site/node_modules/rehype-citation/dist/node/cite.mjs
2024-10-14 08:09:33 +02:00

92006 lines
928 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { parse as parse$8, format as format$8 } from '@citation-js/name';
import require$$0 from 'child_process';
import path from 'path';
import Url from 'url';
import Stream from 'stream';
import http from 'http';
import punycode from 'punycode';
import https from 'https';
import zlib from 'zlib';
import { parse as parse$9, format as format$9 } from '@citation-js/date';
import CSL from 'citeproc';
import yaml from 'js-yaml';
// @ts-nocheck
/**
* @memberof module: @citation-js / core.Cite#
*
* @return {Number} The latest version of the object
*/
function currentVersion() {
return this.log.length;
}
/**
* Returns an image of the object in the version specified.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {Number} [versnum=1] - The number of the version you want to retrieve. Illegal numbers: numbers under or equal to zero, floats, numbers above the current version of the object.
*
* @return {module:@citation-js/core.Cite} The version of the object with the version number passed. `undefined` if an illegal number is passed.
*/
function retrieveVersion(versnum = 1) {
if (versnum <= 0 || versnum > this.currentVersion()) {
return null;
} else {
const [data, options] = this.log[versnum - 1];
const image = new this.constructor(JSON.parse(data), JSON.parse(options));
image.log = this.log.slice(0, versnum);
return image;
}
}
/**
* Returns the second to last saved image of the object.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {Number} [number=1] - number of versions to go back.
*
* @return {module:@citation-js/core.Cite} The second to last version of the object. `undefined` if used on first version.
*/
function undo(number = 1) {
return this.retrieveVersion(this.currentVersion() - number);
}
/**
* Returns the last saved image of the object.
*
* @memberof module:@citation-js/core.Cite#
*
* @return {module:@citation-js/core.Cite} The last version of the object. `undefined` if used on first version.
*/
function retrieveLastVersion() {
return this.retrieveVersion(this.currentVersion());
}
/**
* Save an image of the current version of the object.
*
* @memberof module:@citation-js/core.Cite#
*
* @return {module:@citation-js/core.Cite} The current version of the object.
*/
function save() {
this.log.push([JSON.stringify(this.data), JSON.stringify(this._options)]);
return this;
}
var log = {
__proto__: null,
currentVersion: currentVersion,
retrieveVersion: retrieveVersion,
retrieveLastVersion: retrieveLastVersion,
undo: undo,
save: save
};
// @ts-nocheck
const formats$4 = ['real', 'string'];
const types$1 = ['json', 'html', 'string', 'rtf'];
const styles = ['csl', 'bibtex', 'bibtxt', 'citation-*', 'ris', 'ndjson'];
const wrapperTypes = ['string', 'function'];
/**
* @access public
* @method validateOutputOptions
* @memberof module:@citation-js/core.Cite
*
* @deprecated
* @param {module:@citation-js/core~OutputOptions} - options
*
* @return {Boolean} true (if valid)
* @throws {TypeError} Options not an object
* @throws {TypeError} Invalid options
* @throws {Error} Invalid options combination
*
* @todo check registers if styles and langs are present
*/
/* istanbul ignore next: deprecated */
function validateOutputOptions(options) {
if (typeof options !== 'object') {
throw new TypeError('Options not an object!');
}
const {
format,
type,
style,
lang,
append,
prepend
} = options;
if (format && !formats$4.includes(format)) {
throw new TypeError(`Option format ("${format}") should be one of: ${formats$4}`);
} else if (type && !types$1.includes(type)) {
throw new TypeError(`Option type ("${type}") should be one of: ${types$1}`);
} else if (style && !styles.includes(style) && !/^citation/.test(style)) {
throw new TypeError(`Option style ("${style}") should be one of: ${styles}`);
} else if (lang && typeof lang !== 'string') {
throw new TypeError(`Option lang should be a string, but is a ${typeof lang}`);
} else if (prepend && !wrapperTypes.includes(typeof prepend)) {
throw new TypeError(`Option prepend should be a string or a function, but is a ${typeof prepend}`);
} else if (append && !wrapperTypes.includes(typeof append)) {
throw new TypeError(`Option append should be a string or a function, but is a ${typeof append}`);
}
if (/^citation/.test(style) && type === 'json') {
throw new Error(`Combination type/style of json/citation-* is not valid: ${type}/${style}`);
}
return true;
}
/**
* @access public
* @method valdiateOptions
* @memberof module:@citation-js/core.Cite
*
* @param {module:@citation-js/core~InputOptions} - options
*
* @return {Boolean} true (if valid)
* @throws {TypeError} Options not an object
* @throws {TypeError} Invalid options
*
* @todo check registers if type is present
*/
function validateOptions(options) {
if (typeof options !== 'object') {
throw new TypeError('Options should be an object');
}
/* istanbul ignore if: deprecated */
if (options.output) {
validateOutputOptions(options.output);
} else if (options.maxChainLength && typeof options.maxChainLength !== 'number') {
throw new TypeError('Option maxChainLength should be a number');
} else if (options.forceType && typeof options.forceType !== 'string') {
throw new TypeError('Option forceType should be a string');
} else if (options.generateGraph != null && typeof options.generateGraph !== 'boolean') {
throw new TypeError('Option generateGraph should be a boolean');
} else if (options.strict != null && typeof options.strict !== 'boolean') {
throw new TypeError('Option strict should be a boolean');
} else if (options.target != null && typeof options.target !== 'string') {
throw new TypeError('Option target should be a boolean');
}
return true;
}
/**
* @memberof module:@citation-js/core.Cite#
*
* @constant {module:@citation-js/core~OutputOptions} defaultOptions - default output options
*/
const defaultOptions = {
format: 'real',
type: 'json',
style: 'csl',
lang: 'en-US'
};
/**
* Change the default options of a `Cite` object.
*
* @memberof Cite#
*
* @param {module:@citation-js/core~OutputOptions} options - The options for the output
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated parent object
*/
function options(options, log) {
validateOutputOptions(options);
if (log) {
this.save();
}
Object.assign(this._options, options);
return this;
}
var options$1 = {
__proto__: null,
options: options,
defaultOptions: defaultOptions
};
/**
* Gets the constructor name, with a special case for `null` and `undefined`
*
* @access public
* @method typeOf
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {*} thing - input data or anything else
*
* @return {String} type
*/
function typeOf(thing) {
switch (thing) {
case undefined:
return 'Undefined';
case null:
return 'Null';
default:
return thing.constructor.name;
}
}
/**
* @access public
* @method dataTypeOf
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {*} thing - input data or anything else
*
* @return {module:@citation-js/core.plugins.input~dataType} dataType
*/
function dataTypeOf(thing) {
switch (typeof thing) {
case 'string':
return 'String';
case 'object':
if (Array.isArray(thing)) {
return 'Array';
} else if (typeOf(thing) === 'Object') {
return 'SimpleObject';
} else if (typeOf(thing) !== 'Null') {
return 'ComplexObject';
}
// fall through when thing === null, return default value
default:
return 'Primitive';
}
}
var dataType = {
__proto__: null,
typeOf: typeOf,
dataTypeOf: dataTypeOf
};
/**
* Apply a parse chain graph to an element
*
* @access protected
* @method applyGraph
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {module:@citation-js/core~CSL} entry
* @param {Array<Object>} graph
*
* @return {module:@citation-js/core~CSL} entry
*/
function applyGraph(entry, graph) {
if (entry._graph) {
const index = graph.findIndex(({
type
}) => type === '@else/list+object');
if (index !== -1) {
graph.splice(index + 1, 0, ...entry._graph.slice(0, -1));
}
}
entry._graph = graph;
return entry;
}
/**
* Remove the parse chain graph from an element
*
* @access protected
* @method removeGraph
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {module:@citation-js/core~CSL} entry
*
* @return {module:@citation-js/core~CSL} entry
*/
function removeGraph(entry) {
delete entry._graph;
return entry;
}
var graph = {
__proto__: null,
applyGraph: applyGraph,
removeGraph: removeGraph
};
/**
* @memberof module:@citation-js/core
* @var {Object} logger
* @property _output
* @property {Console} _console
* @property {Array<String>} _log
* @property {Array<module:@citation-js/core~logLevel>} _levels
* @property {module:@citation-js/core~logLevel} level
*/
const logger = {
_output(level, scope, msg) {
this._log.push(scope, msg);
if (this._levels.indexOf(level) < this._levels.indexOf(this.level)) {
return;
}
this._console.log(scope, ...msg);
},
_console: null,
_log: [],
/**
* @typedef {String} module:@citation-js/core~logLevel
*/
_levels: ['http', 'debug', 'unmapped', 'info', 'warn', 'error', 'silent'],
level: 'silent'
};
for (const level of logger._levels) {
logger[level] = (scope, ...msg) => logger._output(level, scope, msg);
}
if (typeof console.Console === 'function') {
logger._console = new console.Console(process.stderr);
} else {
logger._console = console;
}
// @ts-nocheck
// register
const types = {};
const dataTypes = {};
// extensions not registered as such
const unregExts = {};
/**
* Hard-coded, for reasons
*
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input
* @param {module:@citation-js/core.plugins.input~dataType} dataType
* @return {module:@citation-js/core.plugins.input~format} native format
*/
function parseNativeTypes(input, dataType) {
switch (dataType) {
case 'Array':
if (input.length === 0 || input.every(entry => type(entry) === '@csl/object')) {
return '@csl/list+object';
} else {
return '@else/list+object';
}
case 'SimpleObject':
case 'ComplexObject':
// might, of course, be something completely else, but this is how the parser works
return '@csl/object';
default:
return '@invalid';
}
}
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @param {Array<module:@citation-js/core.plugins.input~format>} [typeList=[]]
* @param {module:@citation-js/core~InputData} data
*
* @return {module:@citation-js/core.plugins.input~format} native format
*/
function matchType(typeList = [], data) {
for (const type of typeList) {
if (types[type].predicate(data)) {
return matchType(types[type].extensions, data) || type;
}
}
}
/**
* @access public
* @method type
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input
*
* @return {module:@citation-js/core.plugins.input~format} type
*/
function type(input) {
const dataType = dataTypeOf(input);
// Empty array should be @csl/list+object too
if (dataType === 'Array' && input.length === 0) {
// Off-load to parseNativeTypes() to not repeat the name
// '@csl/list+object' here as well, as it might change
return parseNativeTypes(input, dataType);
}
const match = matchType(dataTypes[dataType], input);
// If no matching formats found, test if native format,
// else invalid input.
return match || parseNativeTypes(input, dataType);
}
/**
* @access public
* @method addTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format
* @param {module:@citation-js/core.plugins.input.util.TypeParser} typeParser
*/
function addTypeParser(format, {
dataType,
predicate,
extends: extend
}) {
// 1. check if any subclass formats are waiting for this format
let extensions = [];
if (format in unregExts) {
extensions = unregExts[format];
delete unregExts[format];
logger.debug('[core]', `Subclasses "${extensions}" finally registered to parent type "${format}"`);
}
// 2. create object with parser info
const object = {
predicate,
extensions
};
types[format] = object;
// 3. determine which type lists the type should be added to
if (extend) {
// 3.1. if format is subclass, check if parent type is registered
const parentTypeParser = types[extend];
if (parentTypeParser) {
// 3.1.1. if it is, add the type parser
parentTypeParser.extensions.push(format);
} else {
// 3.1.2. if it isn't, register type as waiting
if (!unregExts[extend]) {
unregExts[extend] = [];
}
unregExts[extend].push(format);
logger.debug('[core]', `Subclass "${format}" is waiting on parent type "${extend}"`);
}
} else {
// 3.2. else, add
const typeList = dataTypes[dataType] || (dataTypes[dataType] = []);
typeList.push(format);
}
}
/**
* @access public
* @method hasTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} type
*
* @return {Boolean} type parser is registered
*/
function hasTypeParser(type) {
return Object.prototype.hasOwnProperty.call(types, type);
}
/**
* @access public
* @method removeTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} type
*/
function removeTypeParser(type) {
delete types[type];
// Removing orphaned type refs
const typeLists = [...Object.keys(dataTypes).map(key => dataTypes[key]), ...Object.keys(types).map(type => types[type].extensions).filter(list => list.length > 0)];
typeLists.forEach(typeList => {
const index = typeList.indexOf(type);
if (index > -1) {
typeList.splice(index, 1);
}
});
}
/**
* @access public
* @method listTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @return {Array<module:@citation-js/core.plugins.input~format>} list of registered type parsers
*/
function listTypeParser() {
return Object.keys(types);
}
/**
* @access public
* @method treeTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @return {Object} tree structure
*/
/* istanbul ignore next: debugging */
function treeTypeParser() {
const attachNode = name => ({
name,
children: types[name].extensions.map(attachNode)
});
return {
name: 'Type tree',
children: Object.keys(dataTypes).map(name => ({
name,
children: dataTypes[name].map(attachNode)
}))
};
}
/**
* Validate and parse the format name
*
* @access public
* @method typeMatcher
* @memberof module:@citation-js/core.plugins.input
* @type {RegExp}
*/
const typeMatcher = /^(?:@(.+?))(?:\/(?:(.+?)\+)?(?:(.+)))?$/;
// @ts-nocheck
/**
* @memberof module:@citation-js/core.plugins.input.util
* @param {module:@citation-js/core.plugins.input~typeParser} data
*/
class TypeParser {
constructor(data) {
/**
* @access protected
* @type {Array<module:@citation-js/core.plugins.input~dataType>}
*/
this.validDataTypes = ['String', 'Array', 'SimpleObject', 'ComplexObject', 'Primitive'];
this.data = data;
}
// ==========================================================================
// Validation
// ==========================================================================
/**
* @access protected
* @throws {RangeError} if dataType is not valid
*/
validateDataType() {
const dataType = this.data.dataType;
if (dataType && !this.validDataTypes.includes(dataType)) {
throw new RangeError(`dataType was ${dataType}; expected one of ${this.validDataTypes}`);
}
}
/**
* @access protected
* @throws {TypeError} if predicate is not valid
*/
validateParseType() {
const predicate = this.data.predicate;
if (predicate && !(predicate instanceof RegExp || typeof predicate === 'function')) {
throw new TypeError(`predicate was ${typeof predicate}; expected RegExp or function`);
}
}
/**
* @access protected
* @throws {TypeError} if predicate is not valid
*/
validateTokenList() {
const tokenList = this.data.tokenList;
if (tokenList && typeof tokenList !== 'object') {
throw new TypeError(`tokenList was ${typeof tokenList}; expected object or RegExp`);
}
}
/**
* @access protected
* @throws {TypeError} if propertyConstraint is not valid
*/
validatePropertyConstraint() {
const propertyConstraint = this.data.propertyConstraint;
if (propertyConstraint && typeof propertyConstraint !== 'object') {
throw new TypeError(`propertyConstraint was ${typeof propertyConstraint}; expected array or object`);
}
}
/**
* @access protected
* @throws {TypeError} if elementConstraint is not valid
*/
validateElementConstraint() {
const elementConstraint = this.data.elementConstraint;
if (elementConstraint && typeof elementConstraint !== 'string') {
throw new TypeError(`elementConstraint was ${typeof elementConstraint}; expected string`);
}
}
/**
* @access protected
* @throws {TypeError} if extends is not valid
*/
validateExtends() {
const extend = this.data.extends;
if (extend && typeof extend !== 'string') {
throw new TypeError(`extends was ${typeof extend}; expected string`);
}
}
/**
* @access public
* @throws {TypeError|RangeError} if typeParser is not valid
*/
validate() {
if (this.data === null || typeof this.data !== 'object') {
throw new TypeError(`typeParser was ${typeof this.data}; expected object`);
}
this.validateDataType();
this.validateParseType();
this.validateTokenList();
this.validatePropertyConstraint();
this.validateElementConstraint();
this.validateExtends();
}
// ==========================================================================
// Simplification helpers
// ==========================================================================
/**
* @access protected
* @return {Array<module:@citation-js/core.plugins.input~predicate>}
*/
parseTokenList() {
let tokenList = this.data.tokenList;
if (!tokenList) {
return [];
} else if (tokenList instanceof RegExp) {
tokenList = {
token: tokenList
};
}
const {
token,
split = /\s+/,
trim = true,
every = true
} = tokenList;
const trimInput = input => trim ? input.trim() : input;
const testTokens = every ? 'every' : 'some';
const predicate = input => trimInput(input).split(split)[testTokens](part => token.test(part));
return [predicate];
}
/**
* @access protected
* @return {Array<module:@citation-js/core.plugins.input~predicate>}
*/
parsePropertyConstraint() {
const constraints = [].concat(this.data.propertyConstraint || []);
return constraints.map(({
props,
match,
value
}) => {
props = [].concat(props);
switch (match) {
case 'any': // fall-through
case 'some':
return input => props.some(prop => prop in input && (!value || value(input[prop])));
case 'none':
return input => !props.some(prop => prop in input && (!value || value(input[prop])));
case 'every': // fall-through
default:
return input => props.every(prop => prop in input && (!value || value(input[prop])));
}
});
}
/**
* @access protected
* @return {Array<module:@citation-js/core.plugins.input~predicate>}
*/
parseElementConstraint() {
const constraint = this.data.elementConstraint;
return !constraint ? [] : [input => input.every(entry => type(entry) === constraint)];
}
/**
* @access protected
* @return {Array<module:@citation-js/core.plugins.input~predicate>}
*/
parsePredicate() {
if (this.data.predicate instanceof RegExp) {
return [this.data.predicate.test.bind(this.data.predicate)];
} else if (this.data.predicate) {
return [this.data.predicate];
} else {
return [];
}
}
/**
* @access protected
* @return {module:@citation-js/core.plugins.input~predicate}
*/
getCombinedPredicate() {
const predicates = [...this.parsePredicate(), ...this.parseTokenList(), ...this.parsePropertyConstraint(), ...this.parseElementConstraint()];
if (predicates.length === 0) {
return () => true;
} else if (predicates.length === 1) {
return predicates[0];
} else {
return input => predicates.every(predicate => predicate(input));
}
}
/**
* @access protected
* @return {module:@citation-js/core.plugins.input~dataType}
*/
getDataType() {
if (this.data.dataType) {
return this.data.dataType;
} else if (this.data.predicate instanceof RegExp) {
return 'String';
} else if (this.data.tokenList) {
return 'String';
} else if (this.data.elementConstraint) {
return 'Array';
} else {
return 'Primitive';
}
}
// ==========================================================================
// Data simplification
// ==========================================================================
/**
* @type {module:@citation-js/core.plugins.input~dataType}
*/
get dataType() {
return this.getDataType();
}
/**
* @type {module:@citation-js/core.plugins.input~predicate}
*/
get predicate() {
return this.getCombinedPredicate();
}
/**
* @type {module:@citation-js/core.plugins.input~format}
*/
get extends() {
return this.data.extends;
}
}
/**
* @memberof module:@citation-js/core.plugins.input.util
* @param {module:@citation-js/core.plugins.input~dataParser|module:@citation-js/core.plugins.input~asyncDataParser} parser
* @param {Object} options
* @param {Boolean} [options.async=false]
*/
class DataParser {
constructor(parser, {
async
} = {}) {
this.parser = parser;
this.async = async;
}
// ==========================================================================
// Validation
// ==========================================================================
/**
* @throws {TypeError} if dataParser is not valid
*/
validate() {
const parser = this.parser;
if (typeof parser !== 'function') {
throw new TypeError(`parser was ${typeof parser}; expected function`);
}
}
}
/**
* @memberof module:@citation-js/core.plugins.input.util
* @param {module:@citation-js/core.plugins.input~format} format
* @param {module:@citation-js/core.plugins.input~parsers} parsers
*/
class FormatParser {
constructor(format, parsers = {}) {
this.format = format;
if (parsers.parseType) {
this.typeParser = new TypeParser(parsers.parseType);
}
if (parsers.parse) {
this.dataParser = new DataParser(parsers.parse, {
async: false
});
}
if (parsers.parseAsync) {
this.asyncDataParser = new DataParser(parsers.parseAsync, {
async: true
});
}
}
// ==========================================================================
// Validation
// ==========================================================================
/**
* @access protected
* @throws {TypeError} if format is not valid
*/
validateFormat() {
const format = this.format;
if (!typeMatcher.test(format)) {
throw new TypeError(`format name was "${format}"; didn't match expected pattern`);
}
}
/**
* @throws {TypeError} if formatParser is not valid
*/
validate() {
this.validateFormat();
if (this.typeParser) {
this.typeParser.validate();
}
if (this.dataParser) {
this.dataParser.validate();
}
if (this.asyncDataParser) {
this.asyncDataParser.validate();
}
}
}
var parser = {
__proto__: null,
TypeParser: TypeParser,
DataParser: DataParser,
FormatParser: FormatParser
};
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
const NAME = 1;
const NAME_LIST = 2;
const DATE = 3;
const TYPE$3 = 4;
/**
* Data from https://github.com/citation-style-language/schema/blob/master/schemas/input/csl-data.json
*
* - true if a valid type
* - string if another type should be used
*
* @access private
* @constant entryTypes
* @memberof module:@citation-js/core.plugins.input
*/
const entryTypes = {
article: true,
'article-journal': true,
'article-magazine': true,
'article-newspaper': true,
bill: true,
book: true,
broadcast: true,
chapter: true,
classic: true,
collection: true,
dataset: true,
document: true,
entry: true,
'entry-dictionary': true,
'entry-encyclopedia': true,
event: true,
figure: true,
graphic: true,
hearing: true,
interview: true,
legal_case: true,
legislation: true,
manuscript: true,
map: true,
motion_picture: true,
musical_score: true,
pamphlet: true,
'paper-conference': true,
patent: true,
performance: true,
periodical: true,
personal_communication: true,
post: true,
'post-weblog': true,
regulation: true,
report: true,
review: true,
'review-book': true,
software: true,
song: true,
speech: true,
standard: true,
thesis: true,
treaty: true,
webpage: true,
// From https://github.com/CrossRef/rest-api-doc/issues/187
'journal-article': 'article-journal',
'book-chapter': 'chapter',
'posted-content': 'manuscript',
'proceedings-article': 'paper-conference'
};
/**
* Object containing type info on CSL-JSON fields.
*
* * string: primitive value type
* * array: list of primitive value types
* * number: special type
*
* Data from https://github.com/citation-style-language/schema/blob/master/csl-data.json
*
* @access private
* @constant fieldTypes
* @memberof module:@citation-js/core.plugins.input
*/
const fieldTypes$2 = {
author: NAME_LIST,
chair: NAME_LIST,
'collection-editor': NAME_LIST,
compiler: NAME_LIST,
composer: NAME_LIST,
'container-author': NAME_LIST,
contributor: NAME_LIST,
curator: NAME_LIST,
director: NAME_LIST,
editor: NAME_LIST,
'editorial-director': NAME_LIST,
'executive-producer': NAME_LIST,
guest: NAME_LIST,
host: NAME_LIST,
interviewer: NAME_LIST,
illustrator: NAME_LIST,
narrator: NAME_LIST,
organizer: NAME_LIST,
'original-author': NAME_LIST,
performer: NAME_LIST,
producer: NAME_LIST,
'reviewed-author': NAME_LIST,
recipient: NAME_LIST,
'script-writer': NAME_LIST,
'series-creator': NAME_LIST,
translator: NAME_LIST,
accessed: DATE,
'available-date': DATE,
container: DATE,
'event-date': DATE,
issued: DATE,
'original-date': DATE,
submitted: DATE,
type: TYPE$3,
categories: 'object',
// TODO Array<String>
custom: 'object',
id: ['string', 'number'],
language: 'string',
journalAbbreviation: 'string',
shortTitle: 'string',
abstract: 'string',
annote: 'string',
archive: 'string',
archive_collection: 'string',
archive_location: 'string',
'archive-place': 'string',
authority: 'string',
'call-number': 'string',
'chapter-number': 'string',
'citation-number': 'string',
'citation-key': 'string',
'citation-label': 'string',
'collection-number': 'string',
'collection-title': 'string',
'container-title': 'string',
'container-title-short': 'string',
dimensions: 'string',
division: 'string',
DOI: 'string',
edition: ['string', 'number'],
event: 'string',
// deprecated
'event-title': 'string',
'event-place': 'string',
'first-reference-note-number': 'string',
genre: 'string',
ISBN: 'string',
ISSN: 'string',
issue: ['string', 'number'],
jurisdiction: 'string',
keyword: 'string',
locator: 'string',
medium: 'string',
note: 'string',
number: ['string', 'number'],
'number-of-pages': 'string',
'number-of-volumes': ['string', 'number'],
'original-publisher': 'string',
'original-publisher-place': 'string',
'original-title': 'string',
page: 'string',
'page-first': 'string',
'part-number': ['string', 'number'],
'part-title': 'string',
PMCID: 'string',
PMID: 'string',
printing: 'string',
publisher: 'string',
'publisher-place': 'string',
references: 'string',
'reviewed-title': 'string',
'reviewed-genre': 'string',
scale: 'string',
section: 'string',
source: 'string',
status: 'string',
supplement: ['string', 'number'],
title: 'string',
'title-short': 'string',
URL: 'string',
version: 'string',
volume: ['string', 'number'],
'volume-title': 'string',
'volume-title-short': 'string',
'year-suffix': 'string'
};
/**
* Correct a name.
*
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @param {*} name - name
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {Object} returns the (corrected) value if possible, otherwise undefined
*/
function correctName(name, bestGuessConversions) {
if (typeof name === 'object' && name !== null && (name.literal || name.given || name.family)) {
return name;
} else if (!bestGuessConversions) {
return undefined;
} else if (typeof name === 'string') {
return parse$8(name);
}
}
/**
* Correct a name field.
*
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @param {*} nameList - name list
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {Array<Object>|undefined} returns the (corrected) value if possible, otherwise undefined
*/
function correctNameList(nameList, bestGuessConversions) {
if (nameList instanceof Array) {
const names = nameList.map(name => correctName(name, bestGuessConversions)).filter(Boolean);
return names.length ? names : undefined;
}
}
/**
* Correct date parts
*
* @access private
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {Array} dateParts
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {Array<Number>|undefined}
*/
function correctDateParts(dateParts, bestGuessConversions) {
if (dateParts.every(part => typeof part === 'number')) {
return dateParts;
} else if (!bestGuessConversions || dateParts.some(part => isNaN(parseInt(part)))) {
return undefined;
} else {
return dateParts.map(part => parseInt(part));
}
}
/**
* Correct a date field.
*
* @access private
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {*} date - date
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {Array<Object>|undefined} returns the (corrected) value if possible, otherwise undefined
*/
function correctDate(date, bestGuessConversions) {
const dp = 'date-parts';
if (typeof date !== 'object' || date === null) {
return undefined;
// "{'date-parts': [[2000, 1, 1], ...]}"
} else if (date[dp] instanceof Array && date[dp].every(part => part instanceof Array)) {
const range = date[dp].map(dateParts => correctDateParts(dateParts, bestGuessConversions)).filter(Boolean);
return range.length ? _extends({}, date, {
'date-parts': range
}) : undefined;
// LEGACY support
// "[{'date-parts': [2000, 1, 1]}, ...]"
} else if (date instanceof Array && date.every(part => part[dp] instanceof Array)) {
const range = date.map(dateParts => correctDateParts(dateParts[dp], bestGuessConversions)).filter(Boolean);
return range.length ? {
'date-parts': range
} : undefined;
// LEGACY support
// "{'date-parts': [2000, 1, 1]}"
} else if (date[dp] instanceof Array) {
const dateParts = correctDateParts(date[dp], bestGuessConversions);
return dateParts && {
'date-parts': [dateParts]
};
// No separate date-parts
} else if ('literal' in date || 'raw' in date) {
return date;
}
}
/**
* Correct a type field.
*
* @access private
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {String|*} type - type
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {String|undefined} returns the (corrected) value if possible, otherwise undefined
*/
function correctType(type, bestGuessConversions) {
// Also anything that can be converted to a string. Taking `language` as a field
// with similar string constraints, as fields like `title` might take HTML into
// account in the future.
type = correctField('language', type, bestGuessConversions);
if (entryTypes[type] === true) {
return type;
} else if (bestGuessConversions && type in entryTypes) {
return entryTypes[type];
} else {
return undefined;
}
}
/**
* Correct a field.
*
* @access private
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {String} fieldName - field name
* @param {*} value - value
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {*|undefined} returns the (corrected) value if possible, otherwise undefined
*/
function correctField(fieldName, value, bestGuessConversions) {
const fieldType = [].concat(fieldTypes$2[fieldName]);
switch (fieldTypes$2[fieldName]) {
/* istanbul ignore next: no field has this */
case NAME:
return correctName(value, bestGuessConversions);
case NAME_LIST:
return correctNameList(value, bestGuessConversions);
case DATE:
return correctDate(value, bestGuessConversions);
case TYPE$3:
return correctType(value, bestGuessConversions);
}
if (bestGuessConversions) {
if (typeof value === 'string' && fieldType.includes('number') && !fieldType.includes('string') && !isNaN(+value)) {
return parseFloat(value);
} else if (typeof value === 'number' && fieldType.includes('string') && !fieldType.includes('number')) {
return value.toString();
} else if (Array.isArray(value) && value.length) {
return correctField(fieldName, value[0], bestGuessConversions);
}
}
if (fieldType.includes(typeof value)) {
return value;
}
}
/**
* Make CSL JSON conform to standards so that plugins don't have to typecheck all the time.
*
* @access protected
* @method clean
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {Array<module:@citation-js/core~CSL>} data - Array of CSL
* @param {Boolean} [bestGuessConversions=true] - make some best guess conversions on type mismatch
*
* @return {Array<module:@citation-js/core~CSL>} Array of clean CSL
*/
function parseCsl(data, bestGuessConversions = true) {
return data.map(function (entry) {
const clean = {};
for (const field in entry) {
const correction = correctField(field, entry[field], bestGuessConversions);
if (correction !== undefined) {
clean[field] = correction;
}
}
return clean;
});
}
var csl = {
__proto__: null,
clean: parseCsl
};
/**
* Upgrade CSL item from 1.0.1 to 1.0.2
*
* @method upgradeCsl
* @memberof module:@citation-js/core.util
*
* @param {Object} item - Input object
*
* @return {Object} upgraded item
*/
function upgradeCsl(item) {
if (Array.isArray(item)) {
return item.map(upgradeCsl);
}
item = _extends({}, item);
if ('event' in item) {
item['event-title'] = item.event;
delete item.event;
}
if (item.type === 'book' && 'version' in item) {
item.type = 'software';
}
return item;
}
/**
* Downgrade CSL item from 1.0.2 to 1.0.1
*
* @method downgradeCsl
* @memberof module:@citation-js/core.util
*
* @param {Object} item - Input object
*
* @return {Object} downgraded item
*/
function downgradeCsl(item) {
if (Array.isArray(item)) {
return item.map(downgradeCsl);
}
item = _extends({}, item);
if ('event-title' in item) {
item.event = item['event-title'];
delete item['event-title'];
}
if (item.type === 'software') {
item.type = 'book';
}
return item;
}
// @ts-nocheck
/**
* Duplicate objects to prevent Cite changing values outside of own scope
*
* @access protected
* @method deepCopy
* @memberof module:@citation-js/core.util
*
* @param {Object} obj - Input object
* @param {Set} [seen]
*
* @return {Object} Duplicated object
* @throws {TypeError}
*/
function deepCopy(value, seen = new Set()) {
if (typeof value !== 'object' || value === null || value.constructor !== Object && value.constructor !== Array) {
return value;
}
if (seen.has(value)) {
throw new TypeError('Recursively copying circular structure');
}
seen.add(value);
let copy;
if (value.constructor === Array) {
copy = value.map(value => deepCopy(value, seen));
} else {
const object = {};
for (const key in value) {
object[key] = deepCopy(value[key], seen);
}
copy = object;
}
seen.delete(value);
return copy;
}
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn) {
var module = { exports: {} };
return fn(module, module.exports), module.exports;
}
var conversions = {};
var lib$2 = conversions;
function sign(x) {
return x < 0 ? -1 : 1;
}
function evenRound(x) {
// Round x to the nearest integer, choosing the even integer if it lies halfway between two.
if (x % 1 === 0.5 && (x & 1) === 0) {
// [even number].5; round down (i.e. floor)
return Math.floor(x);
} else {
return Math.round(x);
}
}
function createNumberConversion(bitLength, typeOpts) {
if (!typeOpts.unsigned) {
--bitLength;
}
const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
const upperBound = Math.pow(2, bitLength) - 1;
const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);
const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);
return function (V, opts) {
if (!opts) opts = {};
let x = +V;
if (opts.enforceRange) {
if (!Number.isFinite(x)) {
throw new TypeError("Argument is not a finite number");
}
x = sign(x) * Math.floor(Math.abs(x));
if (x < lowerBound || x > upperBound) {
throw new TypeError("Argument is not in byte range");
}
return x;
}
if (!isNaN(x) && opts.clamp) {
x = evenRound(x);
if (x < lowerBound) x = lowerBound;
if (x > upperBound) x = upperBound;
return x;
}
if (!Number.isFinite(x) || x === 0) {
return 0;
}
x = sign(x) * Math.floor(Math.abs(x));
x = x % moduloVal;
if (!typeOpts.unsigned && x >= moduloBound) {
return x - moduloVal;
} else if (typeOpts.unsigned) {
if (x < 0) {
x += moduloVal;
} else if (x === -0) {
// don't return negative zero
return 0;
}
}
return x;
};
}
conversions["void"] = function () {
return undefined;
};
conversions["boolean"] = function (val) {
return !!val;
};
conversions["byte"] = createNumberConversion(8, {
unsigned: false
});
conversions["octet"] = createNumberConversion(8, {
unsigned: true
});
conversions["short"] = createNumberConversion(16, {
unsigned: false
});
conversions["unsigned short"] = createNumberConversion(16, {
unsigned: true
});
conversions["long"] = createNumberConversion(32, {
unsigned: false
});
conversions["unsigned long"] = createNumberConversion(32, {
unsigned: true
});
conversions["long long"] = createNumberConversion(32, {
unsigned: false,
moduloBitLength: 64
});
conversions["unsigned long long"] = createNumberConversion(32, {
unsigned: true,
moduloBitLength: 64
});
conversions["double"] = function (V) {
const x = +V;
if (!Number.isFinite(x)) {
throw new TypeError("Argument is not a finite floating-point value");
}
return x;
};
conversions["unrestricted double"] = function (V) {
const x = +V;
if (isNaN(x)) {
throw new TypeError("Argument is NaN");
}
return x;
};
// not quite valid, but good enough for JS
conversions["float"] = conversions["double"];
conversions["unrestricted float"] = conversions["unrestricted double"];
conversions["DOMString"] = function (V, opts) {
if (!opts) opts = {};
if (opts.treatNullAsEmptyString && V === null) {
return "";
}
return String(V);
};
conversions["ByteString"] = function (V, opts) {
const x = String(V);
let c = undefined;
for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
if (c > 255) {
throw new TypeError("Argument is not a valid bytestring");
}
}
return x;
};
conversions["USVString"] = function (V) {
const S = String(V);
const n = S.length;
const U = [];
for (let i = 0; i < n; ++i) {
const c = S.charCodeAt(i);
if (c < 0xD800 || c > 0xDFFF) {
U.push(String.fromCodePoint(c));
} else if (0xDC00 <= c && c <= 0xDFFF) {
U.push(String.fromCodePoint(0xFFFD));
} else {
if (i === n - 1) {
U.push(String.fromCodePoint(0xFFFD));
} else {
const d = S.charCodeAt(i + 1);
if (0xDC00 <= d && d <= 0xDFFF) {
const a = c & 0x3FF;
const b = d & 0x3FF;
U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));
++i;
} else {
U.push(String.fromCodePoint(0xFFFD));
}
}
}
}
return U.join('');
};
conversions["Date"] = function (V, opts) {
if (!(V instanceof Date)) {
throw new TypeError("Argument is not a Date object");
}
if (isNaN(V)) {
return undefined;
}
return V;
};
conversions["RegExp"] = function (V, opts) {
if (!(V instanceof RegExp)) {
V = new RegExp(V);
}
return V;
};
var utils = createCommonjsModule(function (module) {
module.exports.mixin = function mixin(target, source) {
const keys = Object.getOwnPropertyNames(source);
for (let i = 0; i < keys.length; ++i) {
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
}
};
module.exports.wrapperSymbol = Symbol("wrapper");
module.exports.implSymbol = Symbol("impl");
module.exports.wrapperForImpl = function (impl) {
return impl[module.exports.wrapperSymbol];
};
module.exports.implForWrapper = function (wrapper) {
return wrapper[module.exports.implSymbol];
};
});
var mappingTable = [
[
[
0,
44
],
"disallowed_STD3_valid"
],
[
[
45,
46
],
"valid"
],
[
[
47,
47
],
"disallowed_STD3_valid"
],
[
[
48,
57
],
"valid"
],
[
[
58,
64
],
"disallowed_STD3_valid"
],
[
[
65,
65
],
"mapped",
[
97
]
],
[
[
66,
66
],
"mapped",
[
98
]
],
[
[
67,
67
],
"mapped",
[
99
]
],
[
[
68,
68
],
"mapped",
[
100
]
],
[
[
69,
69
],
"mapped",
[
101
]
],
[
[
70,
70
],
"mapped",
[
102
]
],
[
[
71,
71
],
"mapped",
[
103
]
],
[
[
72,
72
],
"mapped",
[
104
]
],
[
[
73,
73
],
"mapped",
[
105
]
],
[
[
74,
74
],
"mapped",
[
106
]
],
[
[
75,
75
],
"mapped",
[
107
]
],
[
[
76,
76
],
"mapped",
[
108
]
],
[
[
77,
77
],
"mapped",
[
109
]
],
[
[
78,
78
],
"mapped",
[
110
]
],
[
[
79,
79
],
"mapped",
[
111
]
],
[
[
80,
80
],
"mapped",
[
112
]
],
[
[
81,
81
],
"mapped",
[
113
]
],
[
[
82,
82
],
"mapped",
[
114
]
],
[
[
83,
83
],
"mapped",
[
115
]
],
[
[
84,
84
],
"mapped",
[
116
]
],
[
[
85,
85
],
"mapped",
[
117
]
],
[
[
86,
86
],
"mapped",
[
118
]
],
[
[
87,
87
],
"mapped",
[
119
]
],
[
[
88,
88
],
"mapped",
[
120
]
],
[
[
89,
89
],
"mapped",
[
121
]
],
[
[
90,
90
],
"mapped",
[
122
]
],
[
[
91,
96
],
"disallowed_STD3_valid"
],
[
[
97,
122
],
"valid"
],
[
[
123,
127
],
"disallowed_STD3_valid"
],
[
[
128,
159
],
"disallowed"
],
[
[
160,
160
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
161,
167
],
"valid",
[
],
"NV8"
],
[
[
168,
168
],
"disallowed_STD3_mapped",
[
32,
776
]
],
[
[
169,
169
],
"valid",
[
],
"NV8"
],
[
[
170,
170
],
"mapped",
[
97
]
],
[
[
171,
172
],
"valid",
[
],
"NV8"
],
[
[
173,
173
],
"ignored"
],
[
[
174,
174
],
"valid",
[
],
"NV8"
],
[
[
175,
175
],
"disallowed_STD3_mapped",
[
32,
772
]
],
[
[
176,
177
],
"valid",
[
],
"NV8"
],
[
[
178,
178
],
"mapped",
[
50
]
],
[
[
179,
179
],
"mapped",
[
51
]
],
[
[
180,
180
],
"disallowed_STD3_mapped",
[
32,
769
]
],
[
[
181,
181
],
"mapped",
[
956
]
],
[
[
182,
182
],
"valid",
[
],
"NV8"
],
[
[
183,
183
],
"valid"
],
[
[
184,
184
],
"disallowed_STD3_mapped",
[
32,
807
]
],
[
[
185,
185
],
"mapped",
[
49
]
],
[
[
186,
186
],
"mapped",
[
111
]
],
[
[
187,
187
],
"valid",
[
],
"NV8"
],
[
[
188,
188
],
"mapped",
[
49,
8260,
52
]
],
[
[
189,
189
],
"mapped",
[
49,
8260,
50
]
],
[
[
190,
190
],
"mapped",
[
51,
8260,
52
]
],
[
[
191,
191
],
"valid",
[
],
"NV8"
],
[
[
192,
192
],
"mapped",
[
224
]
],
[
[
193,
193
],
"mapped",
[
225
]
],
[
[
194,
194
],
"mapped",
[
226
]
],
[
[
195,
195
],
"mapped",
[
227
]
],
[
[
196,
196
],
"mapped",
[
228
]
],
[
[
197,
197
],
"mapped",
[
229
]
],
[
[
198,
198
],
"mapped",
[
230
]
],
[
[
199,
199
],
"mapped",
[
231
]
],
[
[
200,
200
],
"mapped",
[
232
]
],
[
[
201,
201
],
"mapped",
[
233
]
],
[
[
202,
202
],
"mapped",
[
234
]
],
[
[
203,
203
],
"mapped",
[
235
]
],
[
[
204,
204
],
"mapped",
[
236
]
],
[
[
205,
205
],
"mapped",
[
237
]
],
[
[
206,
206
],
"mapped",
[
238
]
],
[
[
207,
207
],
"mapped",
[
239
]
],
[
[
208,
208
],
"mapped",
[
240
]
],
[
[
209,
209
],
"mapped",
[
241
]
],
[
[
210,
210
],
"mapped",
[
242
]
],
[
[
211,
211
],
"mapped",
[
243
]
],
[
[
212,
212
],
"mapped",
[
244
]
],
[
[
213,
213
],
"mapped",
[
245
]
],
[
[
214,
214
],
"mapped",
[
246
]
],
[
[
215,
215
],
"valid",
[
],
"NV8"
],
[
[
216,
216
],
"mapped",
[
248
]
],
[
[
217,
217
],
"mapped",
[
249
]
],
[
[
218,
218
],
"mapped",
[
250
]
],
[
[
219,
219
],
"mapped",
[
251
]
],
[
[
220,
220
],
"mapped",
[
252
]
],
[
[
221,
221
],
"mapped",
[
253
]
],
[
[
222,
222
],
"mapped",
[
254
]
],
[
[
223,
223
],
"deviation",
[
115,
115
]
],
[
[
224,
246
],
"valid"
],
[
[
247,
247
],
"valid",
[
],
"NV8"
],
[
[
248,
255
],
"valid"
],
[
[
256,
256
],
"mapped",
[
257
]
],
[
[
257,
257
],
"valid"
],
[
[
258,
258
],
"mapped",
[
259
]
],
[
[
259,
259
],
"valid"
],
[
[
260,
260
],
"mapped",
[
261
]
],
[
[
261,
261
],
"valid"
],
[
[
262,
262
],
"mapped",
[
263
]
],
[
[
263,
263
],
"valid"
],
[
[
264,
264
],
"mapped",
[
265
]
],
[
[
265,
265
],
"valid"
],
[
[
266,
266
],
"mapped",
[
267
]
],
[
[
267,
267
],
"valid"
],
[
[
268,
268
],
"mapped",
[
269
]
],
[
[
269,
269
],
"valid"
],
[
[
270,
270
],
"mapped",
[
271
]
],
[
[
271,
271
],
"valid"
],
[
[
272,
272
],
"mapped",
[
273
]
],
[
[
273,
273
],
"valid"
],
[
[
274,
274
],
"mapped",
[
275
]
],
[
[
275,
275
],
"valid"
],
[
[
276,
276
],
"mapped",
[
277
]
],
[
[
277,
277
],
"valid"
],
[
[
278,
278
],
"mapped",
[
279
]
],
[
[
279,
279
],
"valid"
],
[
[
280,
280
],
"mapped",
[
281
]
],
[
[
281,
281
],
"valid"
],
[
[
282,
282
],
"mapped",
[
283
]
],
[
[
283,
283
],
"valid"
],
[
[
284,
284
],
"mapped",
[
285
]
],
[
[
285,
285
],
"valid"
],
[
[
286,
286
],
"mapped",
[
287
]
],
[
[
287,
287
],
"valid"
],
[
[
288,
288
],
"mapped",
[
289
]
],
[
[
289,
289
],
"valid"
],
[
[
290,
290
],
"mapped",
[
291
]
],
[
[
291,
291
],
"valid"
],
[
[
292,
292
],
"mapped",
[
293
]
],
[
[
293,
293
],
"valid"
],
[
[
294,
294
],
"mapped",
[
295
]
],
[
[
295,
295
],
"valid"
],
[
[
296,
296
],
"mapped",
[
297
]
],
[
[
297,
297
],
"valid"
],
[
[
298,
298
],
"mapped",
[
299
]
],
[
[
299,
299
],
"valid"
],
[
[
300,
300
],
"mapped",
[
301
]
],
[
[
301,
301
],
"valid"
],
[
[
302,
302
],
"mapped",
[
303
]
],
[
[
303,
303
],
"valid"
],
[
[
304,
304
],
"mapped",
[
105,
775
]
],
[
[
305,
305
],
"valid"
],
[
[
306,
307
],
"mapped",
[
105,
106
]
],
[
[
308,
308
],
"mapped",
[
309
]
],
[
[
309,
309
],
"valid"
],
[
[
310,
310
],
"mapped",
[
311
]
],
[
[
311,
312
],
"valid"
],
[
[
313,
313
],
"mapped",
[
314
]
],
[
[
314,
314
],
"valid"
],
[
[
315,
315
],
"mapped",
[
316
]
],
[
[
316,
316
],
"valid"
],
[
[
317,
317
],
"mapped",
[
318
]
],
[
[
318,
318
],
"valid"
],
[
[
319,
320
],
"mapped",
[
108,
183
]
],
[
[
321,
321
],
"mapped",
[
322
]
],
[
[
322,
322
],
"valid"
],
[
[
323,
323
],
"mapped",
[
324
]
],
[
[
324,
324
],
"valid"
],
[
[
325,
325
],
"mapped",
[
326
]
],
[
[
326,
326
],
"valid"
],
[
[
327,
327
],
"mapped",
[
328
]
],
[
[
328,
328
],
"valid"
],
[
[
329,
329
],
"mapped",
[
700,
110
]
],
[
[
330,
330
],
"mapped",
[
331
]
],
[
[
331,
331
],
"valid"
],
[
[
332,
332
],
"mapped",
[
333
]
],
[
[
333,
333
],
"valid"
],
[
[
334,
334
],
"mapped",
[
335
]
],
[
[
335,
335
],
"valid"
],
[
[
336,
336
],
"mapped",
[
337
]
],
[
[
337,
337
],
"valid"
],
[
[
338,
338
],
"mapped",
[
339
]
],
[
[
339,
339
],
"valid"
],
[
[
340,
340
],
"mapped",
[
341
]
],
[
[
341,
341
],
"valid"
],
[
[
342,
342
],
"mapped",
[
343
]
],
[
[
343,
343
],
"valid"
],
[
[
344,
344
],
"mapped",
[
345
]
],
[
[
345,
345
],
"valid"
],
[
[
346,
346
],
"mapped",
[
347
]
],
[
[
347,
347
],
"valid"
],
[
[
348,
348
],
"mapped",
[
349
]
],
[
[
349,
349
],
"valid"
],
[
[
350,
350
],
"mapped",
[
351
]
],
[
[
351,
351
],
"valid"
],
[
[
352,
352
],
"mapped",
[
353
]
],
[
[
353,
353
],
"valid"
],
[
[
354,
354
],
"mapped",
[
355
]
],
[
[
355,
355
],
"valid"
],
[
[
356,
356
],
"mapped",
[
357
]
],
[
[
357,
357
],
"valid"
],
[
[
358,
358
],
"mapped",
[
359
]
],
[
[
359,
359
],
"valid"
],
[
[
360,
360
],
"mapped",
[
361
]
],
[
[
361,
361
],
"valid"
],
[
[
362,
362
],
"mapped",
[
363
]
],
[
[
363,
363
],
"valid"
],
[
[
364,
364
],
"mapped",
[
365
]
],
[
[
365,
365
],
"valid"
],
[
[
366,
366
],
"mapped",
[
367
]
],
[
[
367,
367
],
"valid"
],
[
[
368,
368
],
"mapped",
[
369
]
],
[
[
369,
369
],
"valid"
],
[
[
370,
370
],
"mapped",
[
371
]
],
[
[
371,
371
],
"valid"
],
[
[
372,
372
],
"mapped",
[
373
]
],
[
[
373,
373
],
"valid"
],
[
[
374,
374
],
"mapped",
[
375
]
],
[
[
375,
375
],
"valid"
],
[
[
376,
376
],
"mapped",
[
255
]
],
[
[
377,
377
],
"mapped",
[
378
]
],
[
[
378,
378
],
"valid"
],
[
[
379,
379
],
"mapped",
[
380
]
],
[
[
380,
380
],
"valid"
],
[
[
381,
381
],
"mapped",
[
382
]
],
[
[
382,
382
],
"valid"
],
[
[
383,
383
],
"mapped",
[
115
]
],
[
[
384,
384
],
"valid"
],
[
[
385,
385
],
"mapped",
[
595
]
],
[
[
386,
386
],
"mapped",
[
387
]
],
[
[
387,
387
],
"valid"
],
[
[
388,
388
],
"mapped",
[
389
]
],
[
[
389,
389
],
"valid"
],
[
[
390,
390
],
"mapped",
[
596
]
],
[
[
391,
391
],
"mapped",
[
392
]
],
[
[
392,
392
],
"valid"
],
[
[
393,
393
],
"mapped",
[
598
]
],
[
[
394,
394
],
"mapped",
[
599
]
],
[
[
395,
395
],
"mapped",
[
396
]
],
[
[
396,
397
],
"valid"
],
[
[
398,
398
],
"mapped",
[
477
]
],
[
[
399,
399
],
"mapped",
[
601
]
],
[
[
400,
400
],
"mapped",
[
603
]
],
[
[
401,
401
],
"mapped",
[
402
]
],
[
[
402,
402
],
"valid"
],
[
[
403,
403
],
"mapped",
[
608
]
],
[
[
404,
404
],
"mapped",
[
611
]
],
[
[
405,
405
],
"valid"
],
[
[
406,
406
],
"mapped",
[
617
]
],
[
[
407,
407
],
"mapped",
[
616
]
],
[
[
408,
408
],
"mapped",
[
409
]
],
[
[
409,
411
],
"valid"
],
[
[
412,
412
],
"mapped",
[
623
]
],
[
[
413,
413
],
"mapped",
[
626
]
],
[
[
414,
414
],
"valid"
],
[
[
415,
415
],
"mapped",
[
629
]
],
[
[
416,
416
],
"mapped",
[
417
]
],
[
[
417,
417
],
"valid"
],
[
[
418,
418
],
"mapped",
[
419
]
],
[
[
419,
419
],
"valid"
],
[
[
420,
420
],
"mapped",
[
421
]
],
[
[
421,
421
],
"valid"
],
[
[
422,
422
],
"mapped",
[
640
]
],
[
[
423,
423
],
"mapped",
[
424
]
],
[
[
424,
424
],
"valid"
],
[
[
425,
425
],
"mapped",
[
643
]
],
[
[
426,
427
],
"valid"
],
[
[
428,
428
],
"mapped",
[
429
]
],
[
[
429,
429
],
"valid"
],
[
[
430,
430
],
"mapped",
[
648
]
],
[
[
431,
431
],
"mapped",
[
432
]
],
[
[
432,
432
],
"valid"
],
[
[
433,
433
],
"mapped",
[
650
]
],
[
[
434,
434
],
"mapped",
[
651
]
],
[
[
435,
435
],
"mapped",
[
436
]
],
[
[
436,
436
],
"valid"
],
[
[
437,
437
],
"mapped",
[
438
]
],
[
[
438,
438
],
"valid"
],
[
[
439,
439
],
"mapped",
[
658
]
],
[
[
440,
440
],
"mapped",
[
441
]
],
[
[
441,
443
],
"valid"
],
[
[
444,
444
],
"mapped",
[
445
]
],
[
[
445,
451
],
"valid"
],
[
[
452,
454
],
"mapped",
[
100,
382
]
],
[
[
455,
457
],
"mapped",
[
108,
106
]
],
[
[
458,
460
],
"mapped",
[
110,
106
]
],
[
[
461,
461
],
"mapped",
[
462
]
],
[
[
462,
462
],
"valid"
],
[
[
463,
463
],
"mapped",
[
464
]
],
[
[
464,
464
],
"valid"
],
[
[
465,
465
],
"mapped",
[
466
]
],
[
[
466,
466
],
"valid"
],
[
[
467,
467
],
"mapped",
[
468
]
],
[
[
468,
468
],
"valid"
],
[
[
469,
469
],
"mapped",
[
470
]
],
[
[
470,
470
],
"valid"
],
[
[
471,
471
],
"mapped",
[
472
]
],
[
[
472,
472
],
"valid"
],
[
[
473,
473
],
"mapped",
[
474
]
],
[
[
474,
474
],
"valid"
],
[
[
475,
475
],
"mapped",
[
476
]
],
[
[
476,
477
],
"valid"
],
[
[
478,
478
],
"mapped",
[
479
]
],
[
[
479,
479
],
"valid"
],
[
[
480,
480
],
"mapped",
[
481
]
],
[
[
481,
481
],
"valid"
],
[
[
482,
482
],
"mapped",
[
483
]
],
[
[
483,
483
],
"valid"
],
[
[
484,
484
],
"mapped",
[
485
]
],
[
[
485,
485
],
"valid"
],
[
[
486,
486
],
"mapped",
[
487
]
],
[
[
487,
487
],
"valid"
],
[
[
488,
488
],
"mapped",
[
489
]
],
[
[
489,
489
],
"valid"
],
[
[
490,
490
],
"mapped",
[
491
]
],
[
[
491,
491
],
"valid"
],
[
[
492,
492
],
"mapped",
[
493
]
],
[
[
493,
493
],
"valid"
],
[
[
494,
494
],
"mapped",
[
495
]
],
[
[
495,
496
],
"valid"
],
[
[
497,
499
],
"mapped",
[
100,
122
]
],
[
[
500,
500
],
"mapped",
[
501
]
],
[
[
501,
501
],
"valid"
],
[
[
502,
502
],
"mapped",
[
405
]
],
[
[
503,
503
],
"mapped",
[
447
]
],
[
[
504,
504
],
"mapped",
[
505
]
],
[
[
505,
505
],
"valid"
],
[
[
506,
506
],
"mapped",
[
507
]
],
[
[
507,
507
],
"valid"
],
[
[
508,
508
],
"mapped",
[
509
]
],
[
[
509,
509
],
"valid"
],
[
[
510,
510
],
"mapped",
[
511
]
],
[
[
511,
511
],
"valid"
],
[
[
512,
512
],
"mapped",
[
513
]
],
[
[
513,
513
],
"valid"
],
[
[
514,
514
],
"mapped",
[
515
]
],
[
[
515,
515
],
"valid"
],
[
[
516,
516
],
"mapped",
[
517
]
],
[
[
517,
517
],
"valid"
],
[
[
518,
518
],
"mapped",
[
519
]
],
[
[
519,
519
],
"valid"
],
[
[
520,
520
],
"mapped",
[
521
]
],
[
[
521,
521
],
"valid"
],
[
[
522,
522
],
"mapped",
[
523
]
],
[
[
523,
523
],
"valid"
],
[
[
524,
524
],
"mapped",
[
525
]
],
[
[
525,
525
],
"valid"
],
[
[
526,
526
],
"mapped",
[
527
]
],
[
[
527,
527
],
"valid"
],
[
[
528,
528
],
"mapped",
[
529
]
],
[
[
529,
529
],
"valid"
],
[
[
530,
530
],
"mapped",
[
531
]
],
[
[
531,
531
],
"valid"
],
[
[
532,
532
],
"mapped",
[
533
]
],
[
[
533,
533
],
"valid"
],
[
[
534,
534
],
"mapped",
[
535
]
],
[
[
535,
535
],
"valid"
],
[
[
536,
536
],
"mapped",
[
537
]
],
[
[
537,
537
],
"valid"
],
[
[
538,
538
],
"mapped",
[
539
]
],
[
[
539,
539
],
"valid"
],
[
[
540,
540
],
"mapped",
[
541
]
],
[
[
541,
541
],
"valid"
],
[
[
542,
542
],
"mapped",
[
543
]
],
[
[
543,
543
],
"valid"
],
[
[
544,
544
],
"mapped",
[
414
]
],
[
[
545,
545
],
"valid"
],
[
[
546,
546
],
"mapped",
[
547
]
],
[
[
547,
547
],
"valid"
],
[
[
548,
548
],
"mapped",
[
549
]
],
[
[
549,
549
],
"valid"
],
[
[
550,
550
],
"mapped",
[
551
]
],
[
[
551,
551
],
"valid"
],
[
[
552,
552
],
"mapped",
[
553
]
],
[
[
553,
553
],
"valid"
],
[
[
554,
554
],
"mapped",
[
555
]
],
[
[
555,
555
],
"valid"
],
[
[
556,
556
],
"mapped",
[
557
]
],
[
[
557,
557
],
"valid"
],
[
[
558,
558
],
"mapped",
[
559
]
],
[
[
559,
559
],
"valid"
],
[
[
560,
560
],
"mapped",
[
561
]
],
[
[
561,
561
],
"valid"
],
[
[
562,
562
],
"mapped",
[
563
]
],
[
[
563,
563
],
"valid"
],
[
[
564,
566
],
"valid"
],
[
[
567,
569
],
"valid"
],
[
[
570,
570
],
"mapped",
[
11365
]
],
[
[
571,
571
],
"mapped",
[
572
]
],
[
[
572,
572
],
"valid"
],
[
[
573,
573
],
"mapped",
[
410
]
],
[
[
574,
574
],
"mapped",
[
11366
]
],
[
[
575,
576
],
"valid"
],
[
[
577,
577
],
"mapped",
[
578
]
],
[
[
578,
578
],
"valid"
],
[
[
579,
579
],
"mapped",
[
384
]
],
[
[
580,
580
],
"mapped",
[
649
]
],
[
[
581,
581
],
"mapped",
[
652
]
],
[
[
582,
582
],
"mapped",
[
583
]
],
[
[
583,
583
],
"valid"
],
[
[
584,
584
],
"mapped",
[
585
]
],
[
[
585,
585
],
"valid"
],
[
[
586,
586
],
"mapped",
[
587
]
],
[
[
587,
587
],
"valid"
],
[
[
588,
588
],
"mapped",
[
589
]
],
[
[
589,
589
],
"valid"
],
[
[
590,
590
],
"mapped",
[
591
]
],
[
[
591,
591
],
"valid"
],
[
[
592,
680
],
"valid"
],
[
[
681,
685
],
"valid"
],
[
[
686,
687
],
"valid"
],
[
[
688,
688
],
"mapped",
[
104
]
],
[
[
689,
689
],
"mapped",
[
614
]
],
[
[
690,
690
],
"mapped",
[
106
]
],
[
[
691,
691
],
"mapped",
[
114
]
],
[
[
692,
692
],
"mapped",
[
633
]
],
[
[
693,
693
],
"mapped",
[
635
]
],
[
[
694,
694
],
"mapped",
[
641
]
],
[
[
695,
695
],
"mapped",
[
119
]
],
[
[
696,
696
],
"mapped",
[
121
]
],
[
[
697,
705
],
"valid"
],
[
[
706,
709
],
"valid",
[
],
"NV8"
],
[
[
710,
721
],
"valid"
],
[
[
722,
727
],
"valid",
[
],
"NV8"
],
[
[
728,
728
],
"disallowed_STD3_mapped",
[
32,
774
]
],
[
[
729,
729
],
"disallowed_STD3_mapped",
[
32,
775
]
],
[
[
730,
730
],
"disallowed_STD3_mapped",
[
32,
778
]
],
[
[
731,
731
],
"disallowed_STD3_mapped",
[
32,
808
]
],
[
[
732,
732
],
"disallowed_STD3_mapped",
[
32,
771
]
],
[
[
733,
733
],
"disallowed_STD3_mapped",
[
32,
779
]
],
[
[
734,
734
],
"valid",
[
],
"NV8"
],
[
[
735,
735
],
"valid",
[
],
"NV8"
],
[
[
736,
736
],
"mapped",
[
611
]
],
[
[
737,
737
],
"mapped",
[
108
]
],
[
[
738,
738
],
"mapped",
[
115
]
],
[
[
739,
739
],
"mapped",
[
120
]
],
[
[
740,
740
],
"mapped",
[
661
]
],
[
[
741,
745
],
"valid",
[
],
"NV8"
],
[
[
746,
747
],
"valid",
[
],
"NV8"
],
[
[
748,
748
],
"valid"
],
[
[
749,
749
],
"valid",
[
],
"NV8"
],
[
[
750,
750
],
"valid"
],
[
[
751,
767
],
"valid",
[
],
"NV8"
],
[
[
768,
831
],
"valid"
],
[
[
832,
832
],
"mapped",
[
768
]
],
[
[
833,
833
],
"mapped",
[
769
]
],
[
[
834,
834
],
"valid"
],
[
[
835,
835
],
"mapped",
[
787
]
],
[
[
836,
836
],
"mapped",
[
776,
769
]
],
[
[
837,
837
],
"mapped",
[
953
]
],
[
[
838,
846
],
"valid"
],
[
[
847,
847
],
"ignored"
],
[
[
848,
855
],
"valid"
],
[
[
856,
860
],
"valid"
],
[
[
861,
863
],
"valid"
],
[
[
864,
865
],
"valid"
],
[
[
866,
866
],
"valid"
],
[
[
867,
879
],
"valid"
],
[
[
880,
880
],
"mapped",
[
881
]
],
[
[
881,
881
],
"valid"
],
[
[
882,
882
],
"mapped",
[
883
]
],
[
[
883,
883
],
"valid"
],
[
[
884,
884
],
"mapped",
[
697
]
],
[
[
885,
885
],
"valid"
],
[
[
886,
886
],
"mapped",
[
887
]
],
[
[
887,
887
],
"valid"
],
[
[
888,
889
],
"disallowed"
],
[
[
890,
890
],
"disallowed_STD3_mapped",
[
32,
953
]
],
[
[
891,
893
],
"valid"
],
[
[
894,
894
],
"disallowed_STD3_mapped",
[
59
]
],
[
[
895,
895
],
"mapped",
[
1011
]
],
[
[
896,
899
],
"disallowed"
],
[
[
900,
900
],
"disallowed_STD3_mapped",
[
32,
769
]
],
[
[
901,
901
],
"disallowed_STD3_mapped",
[
32,
776,
769
]
],
[
[
902,
902
],
"mapped",
[
940
]
],
[
[
903,
903
],
"mapped",
[
183
]
],
[
[
904,
904
],
"mapped",
[
941
]
],
[
[
905,
905
],
"mapped",
[
942
]
],
[
[
906,
906
],
"mapped",
[
943
]
],
[
[
907,
907
],
"disallowed"
],
[
[
908,
908
],
"mapped",
[
972
]
],
[
[
909,
909
],
"disallowed"
],
[
[
910,
910
],
"mapped",
[
973
]
],
[
[
911,
911
],
"mapped",
[
974
]
],
[
[
912,
912
],
"valid"
],
[
[
913,
913
],
"mapped",
[
945
]
],
[
[
914,
914
],
"mapped",
[
946
]
],
[
[
915,
915
],
"mapped",
[
947
]
],
[
[
916,
916
],
"mapped",
[
948
]
],
[
[
917,
917
],
"mapped",
[
949
]
],
[
[
918,
918
],
"mapped",
[
950
]
],
[
[
919,
919
],
"mapped",
[
951
]
],
[
[
920,
920
],
"mapped",
[
952
]
],
[
[
921,
921
],
"mapped",
[
953
]
],
[
[
922,
922
],
"mapped",
[
954
]
],
[
[
923,
923
],
"mapped",
[
955
]
],
[
[
924,
924
],
"mapped",
[
956
]
],
[
[
925,
925
],
"mapped",
[
957
]
],
[
[
926,
926
],
"mapped",
[
958
]
],
[
[
927,
927
],
"mapped",
[
959
]
],
[
[
928,
928
],
"mapped",
[
960
]
],
[
[
929,
929
],
"mapped",
[
961
]
],
[
[
930,
930
],
"disallowed"
],
[
[
931,
931
],
"mapped",
[
963
]
],
[
[
932,
932
],
"mapped",
[
964
]
],
[
[
933,
933
],
"mapped",
[
965
]
],
[
[
934,
934
],
"mapped",
[
966
]
],
[
[
935,
935
],
"mapped",
[
967
]
],
[
[
936,
936
],
"mapped",
[
968
]
],
[
[
937,
937
],
"mapped",
[
969
]
],
[
[
938,
938
],
"mapped",
[
970
]
],
[
[
939,
939
],
"mapped",
[
971
]
],
[
[
940,
961
],
"valid"
],
[
[
962,
962
],
"deviation",
[
963
]
],
[
[
963,
974
],
"valid"
],
[
[
975,
975
],
"mapped",
[
983
]
],
[
[
976,
976
],
"mapped",
[
946
]
],
[
[
977,
977
],
"mapped",
[
952
]
],
[
[
978,
978
],
"mapped",
[
965
]
],
[
[
979,
979
],
"mapped",
[
973
]
],
[
[
980,
980
],
"mapped",
[
971
]
],
[
[
981,
981
],
"mapped",
[
966
]
],
[
[
982,
982
],
"mapped",
[
960
]
],
[
[
983,
983
],
"valid"
],
[
[
984,
984
],
"mapped",
[
985
]
],
[
[
985,
985
],
"valid"
],
[
[
986,
986
],
"mapped",
[
987
]
],
[
[
987,
987
],
"valid"
],
[
[
988,
988
],
"mapped",
[
989
]
],
[
[
989,
989
],
"valid"
],
[
[
990,
990
],
"mapped",
[
991
]
],
[
[
991,
991
],
"valid"
],
[
[
992,
992
],
"mapped",
[
993
]
],
[
[
993,
993
],
"valid"
],
[
[
994,
994
],
"mapped",
[
995
]
],
[
[
995,
995
],
"valid"
],
[
[
996,
996
],
"mapped",
[
997
]
],
[
[
997,
997
],
"valid"
],
[
[
998,
998
],
"mapped",
[
999
]
],
[
[
999,
999
],
"valid"
],
[
[
1000,
1000
],
"mapped",
[
1001
]
],
[
[
1001,
1001
],
"valid"
],
[
[
1002,
1002
],
"mapped",
[
1003
]
],
[
[
1003,
1003
],
"valid"
],
[
[
1004,
1004
],
"mapped",
[
1005
]
],
[
[
1005,
1005
],
"valid"
],
[
[
1006,
1006
],
"mapped",
[
1007
]
],
[
[
1007,
1007
],
"valid"
],
[
[
1008,
1008
],
"mapped",
[
954
]
],
[
[
1009,
1009
],
"mapped",
[
961
]
],
[
[
1010,
1010
],
"mapped",
[
963
]
],
[
[
1011,
1011
],
"valid"
],
[
[
1012,
1012
],
"mapped",
[
952
]
],
[
[
1013,
1013
],
"mapped",
[
949
]
],
[
[
1014,
1014
],
"valid",
[
],
"NV8"
],
[
[
1015,
1015
],
"mapped",
[
1016
]
],
[
[
1016,
1016
],
"valid"
],
[
[
1017,
1017
],
"mapped",
[
963
]
],
[
[
1018,
1018
],
"mapped",
[
1019
]
],
[
[
1019,
1019
],
"valid"
],
[
[
1020,
1020
],
"valid"
],
[
[
1021,
1021
],
"mapped",
[
891
]
],
[
[
1022,
1022
],
"mapped",
[
892
]
],
[
[
1023,
1023
],
"mapped",
[
893
]
],
[
[
1024,
1024
],
"mapped",
[
1104
]
],
[
[
1025,
1025
],
"mapped",
[
1105
]
],
[
[
1026,
1026
],
"mapped",
[
1106
]
],
[
[
1027,
1027
],
"mapped",
[
1107
]
],
[
[
1028,
1028
],
"mapped",
[
1108
]
],
[
[
1029,
1029
],
"mapped",
[
1109
]
],
[
[
1030,
1030
],
"mapped",
[
1110
]
],
[
[
1031,
1031
],
"mapped",
[
1111
]
],
[
[
1032,
1032
],
"mapped",
[
1112
]
],
[
[
1033,
1033
],
"mapped",
[
1113
]
],
[
[
1034,
1034
],
"mapped",
[
1114
]
],
[
[
1035,
1035
],
"mapped",
[
1115
]
],
[
[
1036,
1036
],
"mapped",
[
1116
]
],
[
[
1037,
1037
],
"mapped",
[
1117
]
],
[
[
1038,
1038
],
"mapped",
[
1118
]
],
[
[
1039,
1039
],
"mapped",
[
1119
]
],
[
[
1040,
1040
],
"mapped",
[
1072
]
],
[
[
1041,
1041
],
"mapped",
[
1073
]
],
[
[
1042,
1042
],
"mapped",
[
1074
]
],
[
[
1043,
1043
],
"mapped",
[
1075
]
],
[
[
1044,
1044
],
"mapped",
[
1076
]
],
[
[
1045,
1045
],
"mapped",
[
1077
]
],
[
[
1046,
1046
],
"mapped",
[
1078
]
],
[
[
1047,
1047
],
"mapped",
[
1079
]
],
[
[
1048,
1048
],
"mapped",
[
1080
]
],
[
[
1049,
1049
],
"mapped",
[
1081
]
],
[
[
1050,
1050
],
"mapped",
[
1082
]
],
[
[
1051,
1051
],
"mapped",
[
1083
]
],
[
[
1052,
1052
],
"mapped",
[
1084
]
],
[
[
1053,
1053
],
"mapped",
[
1085
]
],
[
[
1054,
1054
],
"mapped",
[
1086
]
],
[
[
1055,
1055
],
"mapped",
[
1087
]
],
[
[
1056,
1056
],
"mapped",
[
1088
]
],
[
[
1057,
1057
],
"mapped",
[
1089
]
],
[
[
1058,
1058
],
"mapped",
[
1090
]
],
[
[
1059,
1059
],
"mapped",
[
1091
]
],
[
[
1060,
1060
],
"mapped",
[
1092
]
],
[
[
1061,
1061
],
"mapped",
[
1093
]
],
[
[
1062,
1062
],
"mapped",
[
1094
]
],
[
[
1063,
1063
],
"mapped",
[
1095
]
],
[
[
1064,
1064
],
"mapped",
[
1096
]
],
[
[
1065,
1065
],
"mapped",
[
1097
]
],
[
[
1066,
1066
],
"mapped",
[
1098
]
],
[
[
1067,
1067
],
"mapped",
[
1099
]
],
[
[
1068,
1068
],
"mapped",
[
1100
]
],
[
[
1069,
1069
],
"mapped",
[
1101
]
],
[
[
1070,
1070
],
"mapped",
[
1102
]
],
[
[
1071,
1071
],
"mapped",
[
1103
]
],
[
[
1072,
1103
],
"valid"
],
[
[
1104,
1104
],
"valid"
],
[
[
1105,
1116
],
"valid"
],
[
[
1117,
1117
],
"valid"
],
[
[
1118,
1119
],
"valid"
],
[
[
1120,
1120
],
"mapped",
[
1121
]
],
[
[
1121,
1121
],
"valid"
],
[
[
1122,
1122
],
"mapped",
[
1123
]
],
[
[
1123,
1123
],
"valid"
],
[
[
1124,
1124
],
"mapped",
[
1125
]
],
[
[
1125,
1125
],
"valid"
],
[
[
1126,
1126
],
"mapped",
[
1127
]
],
[
[
1127,
1127
],
"valid"
],
[
[
1128,
1128
],
"mapped",
[
1129
]
],
[
[
1129,
1129
],
"valid"
],
[
[
1130,
1130
],
"mapped",
[
1131
]
],
[
[
1131,
1131
],
"valid"
],
[
[
1132,
1132
],
"mapped",
[
1133
]
],
[
[
1133,
1133
],
"valid"
],
[
[
1134,
1134
],
"mapped",
[
1135
]
],
[
[
1135,
1135
],
"valid"
],
[
[
1136,
1136
],
"mapped",
[
1137
]
],
[
[
1137,
1137
],
"valid"
],
[
[
1138,
1138
],
"mapped",
[
1139
]
],
[
[
1139,
1139
],
"valid"
],
[
[
1140,
1140
],
"mapped",
[
1141
]
],
[
[
1141,
1141
],
"valid"
],
[
[
1142,
1142
],
"mapped",
[
1143
]
],
[
[
1143,
1143
],
"valid"
],
[
[
1144,
1144
],
"mapped",
[
1145
]
],
[
[
1145,
1145
],
"valid"
],
[
[
1146,
1146
],
"mapped",
[
1147
]
],
[
[
1147,
1147
],
"valid"
],
[
[
1148,
1148
],
"mapped",
[
1149
]
],
[
[
1149,
1149
],
"valid"
],
[
[
1150,
1150
],
"mapped",
[
1151
]
],
[
[
1151,
1151
],
"valid"
],
[
[
1152,
1152
],
"mapped",
[
1153
]
],
[
[
1153,
1153
],
"valid"
],
[
[
1154,
1154
],
"valid",
[
],
"NV8"
],
[
[
1155,
1158
],
"valid"
],
[
[
1159,
1159
],
"valid"
],
[
[
1160,
1161
],
"valid",
[
],
"NV8"
],
[
[
1162,
1162
],
"mapped",
[
1163
]
],
[
[
1163,
1163
],
"valid"
],
[
[
1164,
1164
],
"mapped",
[
1165
]
],
[
[
1165,
1165
],
"valid"
],
[
[
1166,
1166
],
"mapped",
[
1167
]
],
[
[
1167,
1167
],
"valid"
],
[
[
1168,
1168
],
"mapped",
[
1169
]
],
[
[
1169,
1169
],
"valid"
],
[
[
1170,
1170
],
"mapped",
[
1171
]
],
[
[
1171,
1171
],
"valid"
],
[
[
1172,
1172
],
"mapped",
[
1173
]
],
[
[
1173,
1173
],
"valid"
],
[
[
1174,
1174
],
"mapped",
[
1175
]
],
[
[
1175,
1175
],
"valid"
],
[
[
1176,
1176
],
"mapped",
[
1177
]
],
[
[
1177,
1177
],
"valid"
],
[
[
1178,
1178
],
"mapped",
[
1179
]
],
[
[
1179,
1179
],
"valid"
],
[
[
1180,
1180
],
"mapped",
[
1181
]
],
[
[
1181,
1181
],
"valid"
],
[
[
1182,
1182
],
"mapped",
[
1183
]
],
[
[
1183,
1183
],
"valid"
],
[
[
1184,
1184
],
"mapped",
[
1185
]
],
[
[
1185,
1185
],
"valid"
],
[
[
1186,
1186
],
"mapped",
[
1187
]
],
[
[
1187,
1187
],
"valid"
],
[
[
1188,
1188
],
"mapped",
[
1189
]
],
[
[
1189,
1189
],
"valid"
],
[
[
1190,
1190
],
"mapped",
[
1191
]
],
[
[
1191,
1191
],
"valid"
],
[
[
1192,
1192
],
"mapped",
[
1193
]
],
[
[
1193,
1193
],
"valid"
],
[
[
1194,
1194
],
"mapped",
[
1195
]
],
[
[
1195,
1195
],
"valid"
],
[
[
1196,
1196
],
"mapped",
[
1197
]
],
[
[
1197,
1197
],
"valid"
],
[
[
1198,
1198
],
"mapped",
[
1199
]
],
[
[
1199,
1199
],
"valid"
],
[
[
1200,
1200
],
"mapped",
[
1201
]
],
[
[
1201,
1201
],
"valid"
],
[
[
1202,
1202
],
"mapped",
[
1203
]
],
[
[
1203,
1203
],
"valid"
],
[
[
1204,
1204
],
"mapped",
[
1205
]
],
[
[
1205,
1205
],
"valid"
],
[
[
1206,
1206
],
"mapped",
[
1207
]
],
[
[
1207,
1207
],
"valid"
],
[
[
1208,
1208
],
"mapped",
[
1209
]
],
[
[
1209,
1209
],
"valid"
],
[
[
1210,
1210
],
"mapped",
[
1211
]
],
[
[
1211,
1211
],
"valid"
],
[
[
1212,
1212
],
"mapped",
[
1213
]
],
[
[
1213,
1213
],
"valid"
],
[
[
1214,
1214
],
"mapped",
[
1215
]
],
[
[
1215,
1215
],
"valid"
],
[
[
1216,
1216
],
"disallowed"
],
[
[
1217,
1217
],
"mapped",
[
1218
]
],
[
[
1218,
1218
],
"valid"
],
[
[
1219,
1219
],
"mapped",
[
1220
]
],
[
[
1220,
1220
],
"valid"
],
[
[
1221,
1221
],
"mapped",
[
1222
]
],
[
[
1222,
1222
],
"valid"
],
[
[
1223,
1223
],
"mapped",
[
1224
]
],
[
[
1224,
1224
],
"valid"
],
[
[
1225,
1225
],
"mapped",
[
1226
]
],
[
[
1226,
1226
],
"valid"
],
[
[
1227,
1227
],
"mapped",
[
1228
]
],
[
[
1228,
1228
],
"valid"
],
[
[
1229,
1229
],
"mapped",
[
1230
]
],
[
[
1230,
1230
],
"valid"
],
[
[
1231,
1231
],
"valid"
],
[
[
1232,
1232
],
"mapped",
[
1233
]
],
[
[
1233,
1233
],
"valid"
],
[
[
1234,
1234
],
"mapped",
[
1235
]
],
[
[
1235,
1235
],
"valid"
],
[
[
1236,
1236
],
"mapped",
[
1237
]
],
[
[
1237,
1237
],
"valid"
],
[
[
1238,
1238
],
"mapped",
[
1239
]
],
[
[
1239,
1239
],
"valid"
],
[
[
1240,
1240
],
"mapped",
[
1241
]
],
[
[
1241,
1241
],
"valid"
],
[
[
1242,
1242
],
"mapped",
[
1243
]
],
[
[
1243,
1243
],
"valid"
],
[
[
1244,
1244
],
"mapped",
[
1245
]
],
[
[
1245,
1245
],
"valid"
],
[
[
1246,
1246
],
"mapped",
[
1247
]
],
[
[
1247,
1247
],
"valid"
],
[
[
1248,
1248
],
"mapped",
[
1249
]
],
[
[
1249,
1249
],
"valid"
],
[
[
1250,
1250
],
"mapped",
[
1251
]
],
[
[
1251,
1251
],
"valid"
],
[
[
1252,
1252
],
"mapped",
[
1253
]
],
[
[
1253,
1253
],
"valid"
],
[
[
1254,
1254
],
"mapped",
[
1255
]
],
[
[
1255,
1255
],
"valid"
],
[
[
1256,
1256
],
"mapped",
[
1257
]
],
[
[
1257,
1257
],
"valid"
],
[
[
1258,
1258
],
"mapped",
[
1259
]
],
[
[
1259,
1259
],
"valid"
],
[
[
1260,
1260
],
"mapped",
[
1261
]
],
[
[
1261,
1261
],
"valid"
],
[
[
1262,
1262
],
"mapped",
[
1263
]
],
[
[
1263,
1263
],
"valid"
],
[
[
1264,
1264
],
"mapped",
[
1265
]
],
[
[
1265,
1265
],
"valid"
],
[
[
1266,
1266
],
"mapped",
[
1267
]
],
[
[
1267,
1267
],
"valid"
],
[
[
1268,
1268
],
"mapped",
[
1269
]
],
[
[
1269,
1269
],
"valid"
],
[
[
1270,
1270
],
"mapped",
[
1271
]
],
[
[
1271,
1271
],
"valid"
],
[
[
1272,
1272
],
"mapped",
[
1273
]
],
[
[
1273,
1273
],
"valid"
],
[
[
1274,
1274
],
"mapped",
[
1275
]
],
[
[
1275,
1275
],
"valid"
],
[
[
1276,
1276
],
"mapped",
[
1277
]
],
[
[
1277,
1277
],
"valid"
],
[
[
1278,
1278
],
"mapped",
[
1279
]
],
[
[
1279,
1279
],
"valid"
],
[
[
1280,
1280
],
"mapped",
[
1281
]
],
[
[
1281,
1281
],
"valid"
],
[
[
1282,
1282
],
"mapped",
[
1283
]
],
[
[
1283,
1283
],
"valid"
],
[
[
1284,
1284
],
"mapped",
[
1285
]
],
[
[
1285,
1285
],
"valid"
],
[
[
1286,
1286
],
"mapped",
[
1287
]
],
[
[
1287,
1287
],
"valid"
],
[
[
1288,
1288
],
"mapped",
[
1289
]
],
[
[
1289,
1289
],
"valid"
],
[
[
1290,
1290
],
"mapped",
[
1291
]
],
[
[
1291,
1291
],
"valid"
],
[
[
1292,
1292
],
"mapped",
[
1293
]
],
[
[
1293,
1293
],
"valid"
],
[
[
1294,
1294
],
"mapped",
[
1295
]
],
[
[
1295,
1295
],
"valid"
],
[
[
1296,
1296
],
"mapped",
[
1297
]
],
[
[
1297,
1297
],
"valid"
],
[
[
1298,
1298
],
"mapped",
[
1299
]
],
[
[
1299,
1299
],
"valid"
],
[
[
1300,
1300
],
"mapped",
[
1301
]
],
[
[
1301,
1301
],
"valid"
],
[
[
1302,
1302
],
"mapped",
[
1303
]
],
[
[
1303,
1303
],
"valid"
],
[
[
1304,
1304
],
"mapped",
[
1305
]
],
[
[
1305,
1305
],
"valid"
],
[
[
1306,
1306
],
"mapped",
[
1307
]
],
[
[
1307,
1307
],
"valid"
],
[
[
1308,
1308
],
"mapped",
[
1309
]
],
[
[
1309,
1309
],
"valid"
],
[
[
1310,
1310
],
"mapped",
[
1311
]
],
[
[
1311,
1311
],
"valid"
],
[
[
1312,
1312
],
"mapped",
[
1313
]
],
[
[
1313,
1313
],
"valid"
],
[
[
1314,
1314
],
"mapped",
[
1315
]
],
[
[
1315,
1315
],
"valid"
],
[
[
1316,
1316
],
"mapped",
[
1317
]
],
[
[
1317,
1317
],
"valid"
],
[
[
1318,
1318
],
"mapped",
[
1319
]
],
[
[
1319,
1319
],
"valid"
],
[
[
1320,
1320
],
"mapped",
[
1321
]
],
[
[
1321,
1321
],
"valid"
],
[
[
1322,
1322
],
"mapped",
[
1323
]
],
[
[
1323,
1323
],
"valid"
],
[
[
1324,
1324
],
"mapped",
[
1325
]
],
[
[
1325,
1325
],
"valid"
],
[
[
1326,
1326
],
"mapped",
[
1327
]
],
[
[
1327,
1327
],
"valid"
],
[
[
1328,
1328
],
"disallowed"
],
[
[
1329,
1329
],
"mapped",
[
1377
]
],
[
[
1330,
1330
],
"mapped",
[
1378
]
],
[
[
1331,
1331
],
"mapped",
[
1379
]
],
[
[
1332,
1332
],
"mapped",
[
1380
]
],
[
[
1333,
1333
],
"mapped",
[
1381
]
],
[
[
1334,
1334
],
"mapped",
[
1382
]
],
[
[
1335,
1335
],
"mapped",
[
1383
]
],
[
[
1336,
1336
],
"mapped",
[
1384
]
],
[
[
1337,
1337
],
"mapped",
[
1385
]
],
[
[
1338,
1338
],
"mapped",
[
1386
]
],
[
[
1339,
1339
],
"mapped",
[
1387
]
],
[
[
1340,
1340
],
"mapped",
[
1388
]
],
[
[
1341,
1341
],
"mapped",
[
1389
]
],
[
[
1342,
1342
],
"mapped",
[
1390
]
],
[
[
1343,
1343
],
"mapped",
[
1391
]
],
[
[
1344,
1344
],
"mapped",
[
1392
]
],
[
[
1345,
1345
],
"mapped",
[
1393
]
],
[
[
1346,
1346
],
"mapped",
[
1394
]
],
[
[
1347,
1347
],
"mapped",
[
1395
]
],
[
[
1348,
1348
],
"mapped",
[
1396
]
],
[
[
1349,
1349
],
"mapped",
[
1397
]
],
[
[
1350,
1350
],
"mapped",
[
1398
]
],
[
[
1351,
1351
],
"mapped",
[
1399
]
],
[
[
1352,
1352
],
"mapped",
[
1400
]
],
[
[
1353,
1353
],
"mapped",
[
1401
]
],
[
[
1354,
1354
],
"mapped",
[
1402
]
],
[
[
1355,
1355
],
"mapped",
[
1403
]
],
[
[
1356,
1356
],
"mapped",
[
1404
]
],
[
[
1357,
1357
],
"mapped",
[
1405
]
],
[
[
1358,
1358
],
"mapped",
[
1406
]
],
[
[
1359,
1359
],
"mapped",
[
1407
]
],
[
[
1360,
1360
],
"mapped",
[
1408
]
],
[
[
1361,
1361
],
"mapped",
[
1409
]
],
[
[
1362,
1362
],
"mapped",
[
1410
]
],
[
[
1363,
1363
],
"mapped",
[
1411
]
],
[
[
1364,
1364
],
"mapped",
[
1412
]
],
[
[
1365,
1365
],
"mapped",
[
1413
]
],
[
[
1366,
1366
],
"mapped",
[
1414
]
],
[
[
1367,
1368
],
"disallowed"
],
[
[
1369,
1369
],
"valid"
],
[
[
1370,
1375
],
"valid",
[
],
"NV8"
],
[
[
1376,
1376
],
"disallowed"
],
[
[
1377,
1414
],
"valid"
],
[
[
1415,
1415
],
"mapped",
[
1381,
1410
]
],
[
[
1416,
1416
],
"disallowed"
],
[
[
1417,
1417
],
"valid",
[
],
"NV8"
],
[
[
1418,
1418
],
"valid",
[
],
"NV8"
],
[
[
1419,
1420
],
"disallowed"
],
[
[
1421,
1422
],
"valid",
[
],
"NV8"
],
[
[
1423,
1423
],
"valid",
[
],
"NV8"
],
[
[
1424,
1424
],
"disallowed"
],
[
[
1425,
1441
],
"valid"
],
[
[
1442,
1442
],
"valid"
],
[
[
1443,
1455
],
"valid"
],
[
[
1456,
1465
],
"valid"
],
[
[
1466,
1466
],
"valid"
],
[
[
1467,
1469
],
"valid"
],
[
[
1470,
1470
],
"valid",
[
],
"NV8"
],
[
[
1471,
1471
],
"valid"
],
[
[
1472,
1472
],
"valid",
[
],
"NV8"
],
[
[
1473,
1474
],
"valid"
],
[
[
1475,
1475
],
"valid",
[
],
"NV8"
],
[
[
1476,
1476
],
"valid"
],
[
[
1477,
1477
],
"valid"
],
[
[
1478,
1478
],
"valid",
[
],
"NV8"
],
[
[
1479,
1479
],
"valid"
],
[
[
1480,
1487
],
"disallowed"
],
[
[
1488,
1514
],
"valid"
],
[
[
1515,
1519
],
"disallowed"
],
[
[
1520,
1524
],
"valid"
],
[
[
1525,
1535
],
"disallowed"
],
[
[
1536,
1539
],
"disallowed"
],
[
[
1540,
1540
],
"disallowed"
],
[
[
1541,
1541
],
"disallowed"
],
[
[
1542,
1546
],
"valid",
[
],
"NV8"
],
[
[
1547,
1547
],
"valid",
[
],
"NV8"
],
[
[
1548,
1548
],
"valid",
[
],
"NV8"
],
[
[
1549,
1551
],
"valid",
[
],
"NV8"
],
[
[
1552,
1557
],
"valid"
],
[
[
1558,
1562
],
"valid"
],
[
[
1563,
1563
],
"valid",
[
],
"NV8"
],
[
[
1564,
1564
],
"disallowed"
],
[
[
1565,
1565
],
"disallowed"
],
[
[
1566,
1566
],
"valid",
[
],
"NV8"
],
[
[
1567,
1567
],
"valid",
[
],
"NV8"
],
[
[
1568,
1568
],
"valid"
],
[
[
1569,
1594
],
"valid"
],
[
[
1595,
1599
],
"valid"
],
[
[
1600,
1600
],
"valid",
[
],
"NV8"
],
[
[
1601,
1618
],
"valid"
],
[
[
1619,
1621
],
"valid"
],
[
[
1622,
1624
],
"valid"
],
[
[
1625,
1630
],
"valid"
],
[
[
1631,
1631
],
"valid"
],
[
[
1632,
1641
],
"valid"
],
[
[
1642,
1645
],
"valid",
[
],
"NV8"
],
[
[
1646,
1647
],
"valid"
],
[
[
1648,
1652
],
"valid"
],
[
[
1653,
1653
],
"mapped",
[
1575,
1652
]
],
[
[
1654,
1654
],
"mapped",
[
1608,
1652
]
],
[
[
1655,
1655
],
"mapped",
[
1735,
1652
]
],
[
[
1656,
1656
],
"mapped",
[
1610,
1652
]
],
[
[
1657,
1719
],
"valid"
],
[
[
1720,
1721
],
"valid"
],
[
[
1722,
1726
],
"valid"
],
[
[
1727,
1727
],
"valid"
],
[
[
1728,
1742
],
"valid"
],
[
[
1743,
1743
],
"valid"
],
[
[
1744,
1747
],
"valid"
],
[
[
1748,
1748
],
"valid",
[
],
"NV8"
],
[
[
1749,
1756
],
"valid"
],
[
[
1757,
1757
],
"disallowed"
],
[
[
1758,
1758
],
"valid",
[
],
"NV8"
],
[
[
1759,
1768
],
"valid"
],
[
[
1769,
1769
],
"valid",
[
],
"NV8"
],
[
[
1770,
1773
],
"valid"
],
[
[
1774,
1775
],
"valid"
],
[
[
1776,
1785
],
"valid"
],
[
[
1786,
1790
],
"valid"
],
[
[
1791,
1791
],
"valid"
],
[
[
1792,
1805
],
"valid",
[
],
"NV8"
],
[
[
1806,
1806
],
"disallowed"
],
[
[
1807,
1807
],
"disallowed"
],
[
[
1808,
1836
],
"valid"
],
[
[
1837,
1839
],
"valid"
],
[
[
1840,
1866
],
"valid"
],
[
[
1867,
1868
],
"disallowed"
],
[
[
1869,
1871
],
"valid"
],
[
[
1872,
1901
],
"valid"
],
[
[
1902,
1919
],
"valid"
],
[
[
1920,
1968
],
"valid"
],
[
[
1969,
1969
],
"valid"
],
[
[
1970,
1983
],
"disallowed"
],
[
[
1984,
2037
],
"valid"
],
[
[
2038,
2042
],
"valid",
[
],
"NV8"
],
[
[
2043,
2047
],
"disallowed"
],
[
[
2048,
2093
],
"valid"
],
[
[
2094,
2095
],
"disallowed"
],
[
[
2096,
2110
],
"valid",
[
],
"NV8"
],
[
[
2111,
2111
],
"disallowed"
],
[
[
2112,
2139
],
"valid"
],
[
[
2140,
2141
],
"disallowed"
],
[
[
2142,
2142
],
"valid",
[
],
"NV8"
],
[
[
2143,
2207
],
"disallowed"
],
[
[
2208,
2208
],
"valid"
],
[
[
2209,
2209
],
"valid"
],
[
[
2210,
2220
],
"valid"
],
[
[
2221,
2226
],
"valid"
],
[
[
2227,
2228
],
"valid"
],
[
[
2229,
2274
],
"disallowed"
],
[
[
2275,
2275
],
"valid"
],
[
[
2276,
2302
],
"valid"
],
[
[
2303,
2303
],
"valid"
],
[
[
2304,
2304
],
"valid"
],
[
[
2305,
2307
],
"valid"
],
[
[
2308,
2308
],
"valid"
],
[
[
2309,
2361
],
"valid"
],
[
[
2362,
2363
],
"valid"
],
[
[
2364,
2381
],
"valid"
],
[
[
2382,
2382
],
"valid"
],
[
[
2383,
2383
],
"valid"
],
[
[
2384,
2388
],
"valid"
],
[
[
2389,
2389
],
"valid"
],
[
[
2390,
2391
],
"valid"
],
[
[
2392,
2392
],
"mapped",
[
2325,
2364
]
],
[
[
2393,
2393
],
"mapped",
[
2326,
2364
]
],
[
[
2394,
2394
],
"mapped",
[
2327,
2364
]
],
[
[
2395,
2395
],
"mapped",
[
2332,
2364
]
],
[
[
2396,
2396
],
"mapped",
[
2337,
2364
]
],
[
[
2397,
2397
],
"mapped",
[
2338,
2364
]
],
[
[
2398,
2398
],
"mapped",
[
2347,
2364
]
],
[
[
2399,
2399
],
"mapped",
[
2351,
2364
]
],
[
[
2400,
2403
],
"valid"
],
[
[
2404,
2405
],
"valid",
[
],
"NV8"
],
[
[
2406,
2415
],
"valid"
],
[
[
2416,
2416
],
"valid",
[
],
"NV8"
],
[
[
2417,
2418
],
"valid"
],
[
[
2419,
2423
],
"valid"
],
[
[
2424,
2424
],
"valid"
],
[
[
2425,
2426
],
"valid"
],
[
[
2427,
2428
],
"valid"
],
[
[
2429,
2429
],
"valid"
],
[
[
2430,
2431
],
"valid"
],
[
[
2432,
2432
],
"valid"
],
[
[
2433,
2435
],
"valid"
],
[
[
2436,
2436
],
"disallowed"
],
[
[
2437,
2444
],
"valid"
],
[
[
2445,
2446
],
"disallowed"
],
[
[
2447,
2448
],
"valid"
],
[
[
2449,
2450
],
"disallowed"
],
[
[
2451,
2472
],
"valid"
],
[
[
2473,
2473
],
"disallowed"
],
[
[
2474,
2480
],
"valid"
],
[
[
2481,
2481
],
"disallowed"
],
[
[
2482,
2482
],
"valid"
],
[
[
2483,
2485
],
"disallowed"
],
[
[
2486,
2489
],
"valid"
],
[
[
2490,
2491
],
"disallowed"
],
[
[
2492,
2492
],
"valid"
],
[
[
2493,
2493
],
"valid"
],
[
[
2494,
2500
],
"valid"
],
[
[
2501,
2502
],
"disallowed"
],
[
[
2503,
2504
],
"valid"
],
[
[
2505,
2506
],
"disallowed"
],
[
[
2507,
2509
],
"valid"
],
[
[
2510,
2510
],
"valid"
],
[
[
2511,
2518
],
"disallowed"
],
[
[
2519,
2519
],
"valid"
],
[
[
2520,
2523
],
"disallowed"
],
[
[
2524,
2524
],
"mapped",
[
2465,
2492
]
],
[
[
2525,
2525
],
"mapped",
[
2466,
2492
]
],
[
[
2526,
2526
],
"disallowed"
],
[
[
2527,
2527
],
"mapped",
[
2479,
2492
]
],
[
[
2528,
2531
],
"valid"
],
[
[
2532,
2533
],
"disallowed"
],
[
[
2534,
2545
],
"valid"
],
[
[
2546,
2554
],
"valid",
[
],
"NV8"
],
[
[
2555,
2555
],
"valid",
[
],
"NV8"
],
[
[
2556,
2560
],
"disallowed"
],
[
[
2561,
2561
],
"valid"
],
[
[
2562,
2562
],
"valid"
],
[
[
2563,
2563
],
"valid"
],
[
[
2564,
2564
],
"disallowed"
],
[
[
2565,
2570
],
"valid"
],
[
[
2571,
2574
],
"disallowed"
],
[
[
2575,
2576
],
"valid"
],
[
[
2577,
2578
],
"disallowed"
],
[
[
2579,
2600
],
"valid"
],
[
[
2601,
2601
],
"disallowed"
],
[
[
2602,
2608
],
"valid"
],
[
[
2609,
2609
],
"disallowed"
],
[
[
2610,
2610
],
"valid"
],
[
[
2611,
2611
],
"mapped",
[
2610,
2620
]
],
[
[
2612,
2612
],
"disallowed"
],
[
[
2613,
2613
],
"valid"
],
[
[
2614,
2614
],
"mapped",
[
2616,
2620
]
],
[
[
2615,
2615
],
"disallowed"
],
[
[
2616,
2617
],
"valid"
],
[
[
2618,
2619
],
"disallowed"
],
[
[
2620,
2620
],
"valid"
],
[
[
2621,
2621
],
"disallowed"
],
[
[
2622,
2626
],
"valid"
],
[
[
2627,
2630
],
"disallowed"
],
[
[
2631,
2632
],
"valid"
],
[
[
2633,
2634
],
"disallowed"
],
[
[
2635,
2637
],
"valid"
],
[
[
2638,
2640
],
"disallowed"
],
[
[
2641,
2641
],
"valid"
],
[
[
2642,
2648
],
"disallowed"
],
[
[
2649,
2649
],
"mapped",
[
2582,
2620
]
],
[
[
2650,
2650
],
"mapped",
[
2583,
2620
]
],
[
[
2651,
2651
],
"mapped",
[
2588,
2620
]
],
[
[
2652,
2652
],
"valid"
],
[
[
2653,
2653
],
"disallowed"
],
[
[
2654,
2654
],
"mapped",
[
2603,
2620
]
],
[
[
2655,
2661
],
"disallowed"
],
[
[
2662,
2676
],
"valid"
],
[
[
2677,
2677
],
"valid"
],
[
[
2678,
2688
],
"disallowed"
],
[
[
2689,
2691
],
"valid"
],
[
[
2692,
2692
],
"disallowed"
],
[
[
2693,
2699
],
"valid"
],
[
[
2700,
2700
],
"valid"
],
[
[
2701,
2701
],
"valid"
],
[
[
2702,
2702
],
"disallowed"
],
[
[
2703,
2705
],
"valid"
],
[
[
2706,
2706
],
"disallowed"
],
[
[
2707,
2728
],
"valid"
],
[
[
2729,
2729
],
"disallowed"
],
[
[
2730,
2736
],
"valid"
],
[
[
2737,
2737
],
"disallowed"
],
[
[
2738,
2739
],
"valid"
],
[
[
2740,
2740
],
"disallowed"
],
[
[
2741,
2745
],
"valid"
],
[
[
2746,
2747
],
"disallowed"
],
[
[
2748,
2757
],
"valid"
],
[
[
2758,
2758
],
"disallowed"
],
[
[
2759,
2761
],
"valid"
],
[
[
2762,
2762
],
"disallowed"
],
[
[
2763,
2765
],
"valid"
],
[
[
2766,
2767
],
"disallowed"
],
[
[
2768,
2768
],
"valid"
],
[
[
2769,
2783
],
"disallowed"
],
[
[
2784,
2784
],
"valid"
],
[
[
2785,
2787
],
"valid"
],
[
[
2788,
2789
],
"disallowed"
],
[
[
2790,
2799
],
"valid"
],
[
[
2800,
2800
],
"valid",
[
],
"NV8"
],
[
[
2801,
2801
],
"valid",
[
],
"NV8"
],
[
[
2802,
2808
],
"disallowed"
],
[
[
2809,
2809
],
"valid"
],
[
[
2810,
2816
],
"disallowed"
],
[
[
2817,
2819
],
"valid"
],
[
[
2820,
2820
],
"disallowed"
],
[
[
2821,
2828
],
"valid"
],
[
[
2829,
2830
],
"disallowed"
],
[
[
2831,
2832
],
"valid"
],
[
[
2833,
2834
],
"disallowed"
],
[
[
2835,
2856
],
"valid"
],
[
[
2857,
2857
],
"disallowed"
],
[
[
2858,
2864
],
"valid"
],
[
[
2865,
2865
],
"disallowed"
],
[
[
2866,
2867
],
"valid"
],
[
[
2868,
2868
],
"disallowed"
],
[
[
2869,
2869
],
"valid"
],
[
[
2870,
2873
],
"valid"
],
[
[
2874,
2875
],
"disallowed"
],
[
[
2876,
2883
],
"valid"
],
[
[
2884,
2884
],
"valid"
],
[
[
2885,
2886
],
"disallowed"
],
[
[
2887,
2888
],
"valid"
],
[
[
2889,
2890
],
"disallowed"
],
[
[
2891,
2893
],
"valid"
],
[
[
2894,
2901
],
"disallowed"
],
[
[
2902,
2903
],
"valid"
],
[
[
2904,
2907
],
"disallowed"
],
[
[
2908,
2908
],
"mapped",
[
2849,
2876
]
],
[
[
2909,
2909
],
"mapped",
[
2850,
2876
]
],
[
[
2910,
2910
],
"disallowed"
],
[
[
2911,
2913
],
"valid"
],
[
[
2914,
2915
],
"valid"
],
[
[
2916,
2917
],
"disallowed"
],
[
[
2918,
2927
],
"valid"
],
[
[
2928,
2928
],
"valid",
[
],
"NV8"
],
[
[
2929,
2929
],
"valid"
],
[
[
2930,
2935
],
"valid",
[
],
"NV8"
],
[
[
2936,
2945
],
"disallowed"
],
[
[
2946,
2947
],
"valid"
],
[
[
2948,
2948
],
"disallowed"
],
[
[
2949,
2954
],
"valid"
],
[
[
2955,
2957
],
"disallowed"
],
[
[
2958,
2960
],
"valid"
],
[
[
2961,
2961
],
"disallowed"
],
[
[
2962,
2965
],
"valid"
],
[
[
2966,
2968
],
"disallowed"
],
[
[
2969,
2970
],
"valid"
],
[
[
2971,
2971
],
"disallowed"
],
[
[
2972,
2972
],
"valid"
],
[
[
2973,
2973
],
"disallowed"
],
[
[
2974,
2975
],
"valid"
],
[
[
2976,
2978
],
"disallowed"
],
[
[
2979,
2980
],
"valid"
],
[
[
2981,
2983
],
"disallowed"
],
[
[
2984,
2986
],
"valid"
],
[
[
2987,
2989
],
"disallowed"
],
[
[
2990,
2997
],
"valid"
],
[
[
2998,
2998
],
"valid"
],
[
[
2999,
3001
],
"valid"
],
[
[
3002,
3005
],
"disallowed"
],
[
[
3006,
3010
],
"valid"
],
[
[
3011,
3013
],
"disallowed"
],
[
[
3014,
3016
],
"valid"
],
[
[
3017,
3017
],
"disallowed"
],
[
[
3018,
3021
],
"valid"
],
[
[
3022,
3023
],
"disallowed"
],
[
[
3024,
3024
],
"valid"
],
[
[
3025,
3030
],
"disallowed"
],
[
[
3031,
3031
],
"valid"
],
[
[
3032,
3045
],
"disallowed"
],
[
[
3046,
3046
],
"valid"
],
[
[
3047,
3055
],
"valid"
],
[
[
3056,
3058
],
"valid",
[
],
"NV8"
],
[
[
3059,
3066
],
"valid",
[
],
"NV8"
],
[
[
3067,
3071
],
"disallowed"
],
[
[
3072,
3072
],
"valid"
],
[
[
3073,
3075
],
"valid"
],
[
[
3076,
3076
],
"disallowed"
],
[
[
3077,
3084
],
"valid"
],
[
[
3085,
3085
],
"disallowed"
],
[
[
3086,
3088
],
"valid"
],
[
[
3089,
3089
],
"disallowed"
],
[
[
3090,
3112
],
"valid"
],
[
[
3113,
3113
],
"disallowed"
],
[
[
3114,
3123
],
"valid"
],
[
[
3124,
3124
],
"valid"
],
[
[
3125,
3129
],
"valid"
],
[
[
3130,
3132
],
"disallowed"
],
[
[
3133,
3133
],
"valid"
],
[
[
3134,
3140
],
"valid"
],
[
[
3141,
3141
],
"disallowed"
],
[
[
3142,
3144
],
"valid"
],
[
[
3145,
3145
],
"disallowed"
],
[
[
3146,
3149
],
"valid"
],
[
[
3150,
3156
],
"disallowed"
],
[
[
3157,
3158
],
"valid"
],
[
[
3159,
3159
],
"disallowed"
],
[
[
3160,
3161
],
"valid"
],
[
[
3162,
3162
],
"valid"
],
[
[
3163,
3167
],
"disallowed"
],
[
[
3168,
3169
],
"valid"
],
[
[
3170,
3171
],
"valid"
],
[
[
3172,
3173
],
"disallowed"
],
[
[
3174,
3183
],
"valid"
],
[
[
3184,
3191
],
"disallowed"
],
[
[
3192,
3199
],
"valid",
[
],
"NV8"
],
[
[
3200,
3200
],
"disallowed"
],
[
[
3201,
3201
],
"valid"
],
[
[
3202,
3203
],
"valid"
],
[
[
3204,
3204
],
"disallowed"
],
[
[
3205,
3212
],
"valid"
],
[
[
3213,
3213
],
"disallowed"
],
[
[
3214,
3216
],
"valid"
],
[
[
3217,
3217
],
"disallowed"
],
[
[
3218,
3240
],
"valid"
],
[
[
3241,
3241
],
"disallowed"
],
[
[
3242,
3251
],
"valid"
],
[
[
3252,
3252
],
"disallowed"
],
[
[
3253,
3257
],
"valid"
],
[
[
3258,
3259
],
"disallowed"
],
[
[
3260,
3261
],
"valid"
],
[
[
3262,
3268
],
"valid"
],
[
[
3269,
3269
],
"disallowed"
],
[
[
3270,
3272
],
"valid"
],
[
[
3273,
3273
],
"disallowed"
],
[
[
3274,
3277
],
"valid"
],
[
[
3278,
3284
],
"disallowed"
],
[
[
3285,
3286
],
"valid"
],
[
[
3287,
3293
],
"disallowed"
],
[
[
3294,
3294
],
"valid"
],
[
[
3295,
3295
],
"disallowed"
],
[
[
3296,
3297
],
"valid"
],
[
[
3298,
3299
],
"valid"
],
[
[
3300,
3301
],
"disallowed"
],
[
[
3302,
3311
],
"valid"
],
[
[
3312,
3312
],
"disallowed"
],
[
[
3313,
3314
],
"valid"
],
[
[
3315,
3328
],
"disallowed"
],
[
[
3329,
3329
],
"valid"
],
[
[
3330,
3331
],
"valid"
],
[
[
3332,
3332
],
"disallowed"
],
[
[
3333,
3340
],
"valid"
],
[
[
3341,
3341
],
"disallowed"
],
[
[
3342,
3344
],
"valid"
],
[
[
3345,
3345
],
"disallowed"
],
[
[
3346,
3368
],
"valid"
],
[
[
3369,
3369
],
"valid"
],
[
[
3370,
3385
],
"valid"
],
[
[
3386,
3386
],
"valid"
],
[
[
3387,
3388
],
"disallowed"
],
[
[
3389,
3389
],
"valid"
],
[
[
3390,
3395
],
"valid"
],
[
[
3396,
3396
],
"valid"
],
[
[
3397,
3397
],
"disallowed"
],
[
[
3398,
3400
],
"valid"
],
[
[
3401,
3401
],
"disallowed"
],
[
[
3402,
3405
],
"valid"
],
[
[
3406,
3406
],
"valid"
],
[
[
3407,
3414
],
"disallowed"
],
[
[
3415,
3415
],
"valid"
],
[
[
3416,
3422
],
"disallowed"
],
[
[
3423,
3423
],
"valid"
],
[
[
3424,
3425
],
"valid"
],
[
[
3426,
3427
],
"valid"
],
[
[
3428,
3429
],
"disallowed"
],
[
[
3430,
3439
],
"valid"
],
[
[
3440,
3445
],
"valid",
[
],
"NV8"
],
[
[
3446,
3448
],
"disallowed"
],
[
[
3449,
3449
],
"valid",
[
],
"NV8"
],
[
[
3450,
3455
],
"valid"
],
[
[
3456,
3457
],
"disallowed"
],
[
[
3458,
3459
],
"valid"
],
[
[
3460,
3460
],
"disallowed"
],
[
[
3461,
3478
],
"valid"
],
[
[
3479,
3481
],
"disallowed"
],
[
[
3482,
3505
],
"valid"
],
[
[
3506,
3506
],
"disallowed"
],
[
[
3507,
3515
],
"valid"
],
[
[
3516,
3516
],
"disallowed"
],
[
[
3517,
3517
],
"valid"
],
[
[
3518,
3519
],
"disallowed"
],
[
[
3520,
3526
],
"valid"
],
[
[
3527,
3529
],
"disallowed"
],
[
[
3530,
3530
],
"valid"
],
[
[
3531,
3534
],
"disallowed"
],
[
[
3535,
3540
],
"valid"
],
[
[
3541,
3541
],
"disallowed"
],
[
[
3542,
3542
],
"valid"
],
[
[
3543,
3543
],
"disallowed"
],
[
[
3544,
3551
],
"valid"
],
[
[
3552,
3557
],
"disallowed"
],
[
[
3558,
3567
],
"valid"
],
[
[
3568,
3569
],
"disallowed"
],
[
[
3570,
3571
],
"valid"
],
[
[
3572,
3572
],
"valid",
[
],
"NV8"
],
[
[
3573,
3584
],
"disallowed"
],
[
[
3585,
3634
],
"valid"
],
[
[
3635,
3635
],
"mapped",
[
3661,
3634
]
],
[
[
3636,
3642
],
"valid"
],
[
[
3643,
3646
],
"disallowed"
],
[
[
3647,
3647
],
"valid",
[
],
"NV8"
],
[
[
3648,
3662
],
"valid"
],
[
[
3663,
3663
],
"valid",
[
],
"NV8"
],
[
[
3664,
3673
],
"valid"
],
[
[
3674,
3675
],
"valid",
[
],
"NV8"
],
[
[
3676,
3712
],
"disallowed"
],
[
[
3713,
3714
],
"valid"
],
[
[
3715,
3715
],
"disallowed"
],
[
[
3716,
3716
],
"valid"
],
[
[
3717,
3718
],
"disallowed"
],
[
[
3719,
3720
],
"valid"
],
[
[
3721,
3721
],
"disallowed"
],
[
[
3722,
3722
],
"valid"
],
[
[
3723,
3724
],
"disallowed"
],
[
[
3725,
3725
],
"valid"
],
[
[
3726,
3731
],
"disallowed"
],
[
[
3732,
3735
],
"valid"
],
[
[
3736,
3736
],
"disallowed"
],
[
[
3737,
3743
],
"valid"
],
[
[
3744,
3744
],
"disallowed"
],
[
[
3745,
3747
],
"valid"
],
[
[
3748,
3748
],
"disallowed"
],
[
[
3749,
3749
],
"valid"
],
[
[
3750,
3750
],
"disallowed"
],
[
[
3751,
3751
],
"valid"
],
[
[
3752,
3753
],
"disallowed"
],
[
[
3754,
3755
],
"valid"
],
[
[
3756,
3756
],
"disallowed"
],
[
[
3757,
3762
],
"valid"
],
[
[
3763,
3763
],
"mapped",
[
3789,
3762
]
],
[
[
3764,
3769
],
"valid"
],
[
[
3770,
3770
],
"disallowed"
],
[
[
3771,
3773
],
"valid"
],
[
[
3774,
3775
],
"disallowed"
],
[
[
3776,
3780
],
"valid"
],
[
[
3781,
3781
],
"disallowed"
],
[
[
3782,
3782
],
"valid"
],
[
[
3783,
3783
],
"disallowed"
],
[
[
3784,
3789
],
"valid"
],
[
[
3790,
3791
],
"disallowed"
],
[
[
3792,
3801
],
"valid"
],
[
[
3802,
3803
],
"disallowed"
],
[
[
3804,
3804
],
"mapped",
[
3755,
3737
]
],
[
[
3805,
3805
],
"mapped",
[
3755,
3745
]
],
[
[
3806,
3807
],
"valid"
],
[
[
3808,
3839
],
"disallowed"
],
[
[
3840,
3840
],
"valid"
],
[
[
3841,
3850
],
"valid",
[
],
"NV8"
],
[
[
3851,
3851
],
"valid"
],
[
[
3852,
3852
],
"mapped",
[
3851
]
],
[
[
3853,
3863
],
"valid",
[
],
"NV8"
],
[
[
3864,
3865
],
"valid"
],
[
[
3866,
3871
],
"valid",
[
],
"NV8"
],
[
[
3872,
3881
],
"valid"
],
[
[
3882,
3892
],
"valid",
[
],
"NV8"
],
[
[
3893,
3893
],
"valid"
],
[
[
3894,
3894
],
"valid",
[
],
"NV8"
],
[
[
3895,
3895
],
"valid"
],
[
[
3896,
3896
],
"valid",
[
],
"NV8"
],
[
[
3897,
3897
],
"valid"
],
[
[
3898,
3901
],
"valid",
[
],
"NV8"
],
[
[
3902,
3906
],
"valid"
],
[
[
3907,
3907
],
"mapped",
[
3906,
4023
]
],
[
[
3908,
3911
],
"valid"
],
[
[
3912,
3912
],
"disallowed"
],
[
[
3913,
3916
],
"valid"
],
[
[
3917,
3917
],
"mapped",
[
3916,
4023
]
],
[
[
3918,
3921
],
"valid"
],
[
[
3922,
3922
],
"mapped",
[
3921,
4023
]
],
[
[
3923,
3926
],
"valid"
],
[
[
3927,
3927
],
"mapped",
[
3926,
4023
]
],
[
[
3928,
3931
],
"valid"
],
[
[
3932,
3932
],
"mapped",
[
3931,
4023
]
],
[
[
3933,
3944
],
"valid"
],
[
[
3945,
3945
],
"mapped",
[
3904,
4021
]
],
[
[
3946,
3946
],
"valid"
],
[
[
3947,
3948
],
"valid"
],
[
[
3949,
3952
],
"disallowed"
],
[
[
3953,
3954
],
"valid"
],
[
[
3955,
3955
],
"mapped",
[
3953,
3954
]
],
[
[
3956,
3956
],
"valid"
],
[
[
3957,
3957
],
"mapped",
[
3953,
3956
]
],
[
[
3958,
3958
],
"mapped",
[
4018,
3968
]
],
[
[
3959,
3959
],
"mapped",
[
4018,
3953,
3968
]
],
[
[
3960,
3960
],
"mapped",
[
4019,
3968
]
],
[
[
3961,
3961
],
"mapped",
[
4019,
3953,
3968
]
],
[
[
3962,
3968
],
"valid"
],
[
[
3969,
3969
],
"mapped",
[
3953,
3968
]
],
[
[
3970,
3972
],
"valid"
],
[
[
3973,
3973
],
"valid",
[
],
"NV8"
],
[
[
3974,
3979
],
"valid"
],
[
[
3980,
3983
],
"valid"
],
[
[
3984,
3986
],
"valid"
],
[
[
3987,
3987
],
"mapped",
[
3986,
4023
]
],
[
[
3988,
3989
],
"valid"
],
[
[
3990,
3990
],
"valid"
],
[
[
3991,
3991
],
"valid"
],
[
[
3992,
3992
],
"disallowed"
],
[
[
3993,
3996
],
"valid"
],
[
[
3997,
3997
],
"mapped",
[
3996,
4023
]
],
[
[
3998,
4001
],
"valid"
],
[
[
4002,
4002
],
"mapped",
[
4001,
4023
]
],
[
[
4003,
4006
],
"valid"
],
[
[
4007,
4007
],
"mapped",
[
4006,
4023
]
],
[
[
4008,
4011
],
"valid"
],
[
[
4012,
4012
],
"mapped",
[
4011,
4023
]
],
[
[
4013,
4013
],
"valid"
],
[
[
4014,
4016
],
"valid"
],
[
[
4017,
4023
],
"valid"
],
[
[
4024,
4024
],
"valid"
],
[
[
4025,
4025
],
"mapped",
[
3984,
4021
]
],
[
[
4026,
4028
],
"valid"
],
[
[
4029,
4029
],
"disallowed"
],
[
[
4030,
4037
],
"valid",
[
],
"NV8"
],
[
[
4038,
4038
],
"valid"
],
[
[
4039,
4044
],
"valid",
[
],
"NV8"
],
[
[
4045,
4045
],
"disallowed"
],
[
[
4046,
4046
],
"valid",
[
],
"NV8"
],
[
[
4047,
4047
],
"valid",
[
],
"NV8"
],
[
[
4048,
4049
],
"valid",
[
],
"NV8"
],
[
[
4050,
4052
],
"valid",
[
],
"NV8"
],
[
[
4053,
4056
],
"valid",
[
],
"NV8"
],
[
[
4057,
4058
],
"valid",
[
],
"NV8"
],
[
[
4059,
4095
],
"disallowed"
],
[
[
4096,
4129
],
"valid"
],
[
[
4130,
4130
],
"valid"
],
[
[
4131,
4135
],
"valid"
],
[
[
4136,
4136
],
"valid"
],
[
[
4137,
4138
],
"valid"
],
[
[
4139,
4139
],
"valid"
],
[
[
4140,
4146
],
"valid"
],
[
[
4147,
4149
],
"valid"
],
[
[
4150,
4153
],
"valid"
],
[
[
4154,
4159
],
"valid"
],
[
[
4160,
4169
],
"valid"
],
[
[
4170,
4175
],
"valid",
[
],
"NV8"
],
[
[
4176,
4185
],
"valid"
],
[
[
4186,
4249
],
"valid"
],
[
[
4250,
4253
],
"valid"
],
[
[
4254,
4255
],
"valid",
[
],
"NV8"
],
[
[
4256,
4293
],
"disallowed"
],
[
[
4294,
4294
],
"disallowed"
],
[
[
4295,
4295
],
"mapped",
[
11559
]
],
[
[
4296,
4300
],
"disallowed"
],
[
[
4301,
4301
],
"mapped",
[
11565
]
],
[
[
4302,
4303
],
"disallowed"
],
[
[
4304,
4342
],
"valid"
],
[
[
4343,
4344
],
"valid"
],
[
[
4345,
4346
],
"valid"
],
[
[
4347,
4347
],
"valid",
[
],
"NV8"
],
[
[
4348,
4348
],
"mapped",
[
4316
]
],
[
[
4349,
4351
],
"valid"
],
[
[
4352,
4441
],
"valid",
[
],
"NV8"
],
[
[
4442,
4446
],
"valid",
[
],
"NV8"
],
[
[
4447,
4448
],
"disallowed"
],
[
[
4449,
4514
],
"valid",
[
],
"NV8"
],
[
[
4515,
4519
],
"valid",
[
],
"NV8"
],
[
[
4520,
4601
],
"valid",
[
],
"NV8"
],
[
[
4602,
4607
],
"valid",
[
],
"NV8"
],
[
[
4608,
4614
],
"valid"
],
[
[
4615,
4615
],
"valid"
],
[
[
4616,
4678
],
"valid"
],
[
[
4679,
4679
],
"valid"
],
[
[
4680,
4680
],
"valid"
],
[
[
4681,
4681
],
"disallowed"
],
[
[
4682,
4685
],
"valid"
],
[
[
4686,
4687
],
"disallowed"
],
[
[
4688,
4694
],
"valid"
],
[
[
4695,
4695
],
"disallowed"
],
[
[
4696,
4696
],
"valid"
],
[
[
4697,
4697
],
"disallowed"
],
[
[
4698,
4701
],
"valid"
],
[
[
4702,
4703
],
"disallowed"
],
[
[
4704,
4742
],
"valid"
],
[
[
4743,
4743
],
"valid"
],
[
[
4744,
4744
],
"valid"
],
[
[
4745,
4745
],
"disallowed"
],
[
[
4746,
4749
],
"valid"
],
[
[
4750,
4751
],
"disallowed"
],
[
[
4752,
4782
],
"valid"
],
[
[
4783,
4783
],
"valid"
],
[
[
4784,
4784
],
"valid"
],
[
[
4785,
4785
],
"disallowed"
],
[
[
4786,
4789
],
"valid"
],
[
[
4790,
4791
],
"disallowed"
],
[
[
4792,
4798
],
"valid"
],
[
[
4799,
4799
],
"disallowed"
],
[
[
4800,
4800
],
"valid"
],
[
[
4801,
4801
],
"disallowed"
],
[
[
4802,
4805
],
"valid"
],
[
[
4806,
4807
],
"disallowed"
],
[
[
4808,
4814
],
"valid"
],
[
[
4815,
4815
],
"valid"
],
[
[
4816,
4822
],
"valid"
],
[
[
4823,
4823
],
"disallowed"
],
[
[
4824,
4846
],
"valid"
],
[
[
4847,
4847
],
"valid"
],
[
[
4848,
4878
],
"valid"
],
[
[
4879,
4879
],
"valid"
],
[
[
4880,
4880
],
"valid"
],
[
[
4881,
4881
],
"disallowed"
],
[
[
4882,
4885
],
"valid"
],
[
[
4886,
4887
],
"disallowed"
],
[
[
4888,
4894
],
"valid"
],
[
[
4895,
4895
],
"valid"
],
[
[
4896,
4934
],
"valid"
],
[
[
4935,
4935
],
"valid"
],
[
[
4936,
4954
],
"valid"
],
[
[
4955,
4956
],
"disallowed"
],
[
[
4957,
4958
],
"valid"
],
[
[
4959,
4959
],
"valid"
],
[
[
4960,
4960
],
"valid",
[
],
"NV8"
],
[
[
4961,
4988
],
"valid",
[
],
"NV8"
],
[
[
4989,
4991
],
"disallowed"
],
[
[
4992,
5007
],
"valid"
],
[
[
5008,
5017
],
"valid",
[
],
"NV8"
],
[
[
5018,
5023
],
"disallowed"
],
[
[
5024,
5108
],
"valid"
],
[
[
5109,
5109
],
"valid"
],
[
[
5110,
5111
],
"disallowed"
],
[
[
5112,
5112
],
"mapped",
[
5104
]
],
[
[
5113,
5113
],
"mapped",
[
5105
]
],
[
[
5114,
5114
],
"mapped",
[
5106
]
],
[
[
5115,
5115
],
"mapped",
[
5107
]
],
[
[
5116,
5116
],
"mapped",
[
5108
]
],
[
[
5117,
5117
],
"mapped",
[
5109
]
],
[
[
5118,
5119
],
"disallowed"
],
[
[
5120,
5120
],
"valid",
[
],
"NV8"
],
[
[
5121,
5740
],
"valid"
],
[
[
5741,
5742
],
"valid",
[
],
"NV8"
],
[
[
5743,
5750
],
"valid"
],
[
[
5751,
5759
],
"valid"
],
[
[
5760,
5760
],
"disallowed"
],
[
[
5761,
5786
],
"valid"
],
[
[
5787,
5788
],
"valid",
[
],
"NV8"
],
[
[
5789,
5791
],
"disallowed"
],
[
[
5792,
5866
],
"valid"
],
[
[
5867,
5872
],
"valid",
[
],
"NV8"
],
[
[
5873,
5880
],
"valid"
],
[
[
5881,
5887
],
"disallowed"
],
[
[
5888,
5900
],
"valid"
],
[
[
5901,
5901
],
"disallowed"
],
[
[
5902,
5908
],
"valid"
],
[
[
5909,
5919
],
"disallowed"
],
[
[
5920,
5940
],
"valid"
],
[
[
5941,
5942
],
"valid",
[
],
"NV8"
],
[
[
5943,
5951
],
"disallowed"
],
[
[
5952,
5971
],
"valid"
],
[
[
5972,
5983
],
"disallowed"
],
[
[
5984,
5996
],
"valid"
],
[
[
5997,
5997
],
"disallowed"
],
[
[
5998,
6000
],
"valid"
],
[
[
6001,
6001
],
"disallowed"
],
[
[
6002,
6003
],
"valid"
],
[
[
6004,
6015
],
"disallowed"
],
[
[
6016,
6067
],
"valid"
],
[
[
6068,
6069
],
"disallowed"
],
[
[
6070,
6099
],
"valid"
],
[
[
6100,
6102
],
"valid",
[
],
"NV8"
],
[
[
6103,
6103
],
"valid"
],
[
[
6104,
6107
],
"valid",
[
],
"NV8"
],
[
[
6108,
6108
],
"valid"
],
[
[
6109,
6109
],
"valid"
],
[
[
6110,
6111
],
"disallowed"
],
[
[
6112,
6121
],
"valid"
],
[
[
6122,
6127
],
"disallowed"
],
[
[
6128,
6137
],
"valid",
[
],
"NV8"
],
[
[
6138,
6143
],
"disallowed"
],
[
[
6144,
6149
],
"valid",
[
],
"NV8"
],
[
[
6150,
6150
],
"disallowed"
],
[
[
6151,
6154
],
"valid",
[
],
"NV8"
],
[
[
6155,
6157
],
"ignored"
],
[
[
6158,
6158
],
"disallowed"
],
[
[
6159,
6159
],
"disallowed"
],
[
[
6160,
6169
],
"valid"
],
[
[
6170,
6175
],
"disallowed"
],
[
[
6176,
6263
],
"valid"
],
[
[
6264,
6271
],
"disallowed"
],
[
[
6272,
6313
],
"valid"
],
[
[
6314,
6314
],
"valid"
],
[
[
6315,
6319
],
"disallowed"
],
[
[
6320,
6389
],
"valid"
],
[
[
6390,
6399
],
"disallowed"
],
[
[
6400,
6428
],
"valid"
],
[
[
6429,
6430
],
"valid"
],
[
[
6431,
6431
],
"disallowed"
],
[
[
6432,
6443
],
"valid"
],
[
[
6444,
6447
],
"disallowed"
],
[
[
6448,
6459
],
"valid"
],
[
[
6460,
6463
],
"disallowed"
],
[
[
6464,
6464
],
"valid",
[
],
"NV8"
],
[
[
6465,
6467
],
"disallowed"
],
[
[
6468,
6469
],
"valid",
[
],
"NV8"
],
[
[
6470,
6509
],
"valid"
],
[
[
6510,
6511
],
"disallowed"
],
[
[
6512,
6516
],
"valid"
],
[
[
6517,
6527
],
"disallowed"
],
[
[
6528,
6569
],
"valid"
],
[
[
6570,
6571
],
"valid"
],
[
[
6572,
6575
],
"disallowed"
],
[
[
6576,
6601
],
"valid"
],
[
[
6602,
6607
],
"disallowed"
],
[
[
6608,
6617
],
"valid"
],
[
[
6618,
6618
],
"valid",
[
],
"XV8"
],
[
[
6619,
6621
],
"disallowed"
],
[
[
6622,
6623
],
"valid",
[
],
"NV8"
],
[
[
6624,
6655
],
"valid",
[
],
"NV8"
],
[
[
6656,
6683
],
"valid"
],
[
[
6684,
6685
],
"disallowed"
],
[
[
6686,
6687
],
"valid",
[
],
"NV8"
],
[
[
6688,
6750
],
"valid"
],
[
[
6751,
6751
],
"disallowed"
],
[
[
6752,
6780
],
"valid"
],
[
[
6781,
6782
],
"disallowed"
],
[
[
6783,
6793
],
"valid"
],
[
[
6794,
6799
],
"disallowed"
],
[
[
6800,
6809
],
"valid"
],
[
[
6810,
6815
],
"disallowed"
],
[
[
6816,
6822
],
"valid",
[
],
"NV8"
],
[
[
6823,
6823
],
"valid"
],
[
[
6824,
6829
],
"valid",
[
],
"NV8"
],
[
[
6830,
6831
],
"disallowed"
],
[
[
6832,
6845
],
"valid"
],
[
[
6846,
6846
],
"valid",
[
],
"NV8"
],
[
[
6847,
6911
],
"disallowed"
],
[
[
6912,
6987
],
"valid"
],
[
[
6988,
6991
],
"disallowed"
],
[
[
6992,
7001
],
"valid"
],
[
[
7002,
7018
],
"valid",
[
],
"NV8"
],
[
[
7019,
7027
],
"valid"
],
[
[
7028,
7036
],
"valid",
[
],
"NV8"
],
[
[
7037,
7039
],
"disallowed"
],
[
[
7040,
7082
],
"valid"
],
[
[
7083,
7085
],
"valid"
],
[
[
7086,
7097
],
"valid"
],
[
[
7098,
7103
],
"valid"
],
[
[
7104,
7155
],
"valid"
],
[
[
7156,
7163
],
"disallowed"
],
[
[
7164,
7167
],
"valid",
[
],
"NV8"
],
[
[
7168,
7223
],
"valid"
],
[
[
7224,
7226
],
"disallowed"
],
[
[
7227,
7231
],
"valid",
[
],
"NV8"
],
[
[
7232,
7241
],
"valid"
],
[
[
7242,
7244
],
"disallowed"
],
[
[
7245,
7293
],
"valid"
],
[
[
7294,
7295
],
"valid",
[
],
"NV8"
],
[
[
7296,
7359
],
"disallowed"
],
[
[
7360,
7367
],
"valid",
[
],
"NV8"
],
[
[
7368,
7375
],
"disallowed"
],
[
[
7376,
7378
],
"valid"
],
[
[
7379,
7379
],
"valid",
[
],
"NV8"
],
[
[
7380,
7410
],
"valid"
],
[
[
7411,
7414
],
"valid"
],
[
[
7415,
7415
],
"disallowed"
],
[
[
7416,
7417
],
"valid"
],
[
[
7418,
7423
],
"disallowed"
],
[
[
7424,
7467
],
"valid"
],
[
[
7468,
7468
],
"mapped",
[
97
]
],
[
[
7469,
7469
],
"mapped",
[
230
]
],
[
[
7470,
7470
],
"mapped",
[
98
]
],
[
[
7471,
7471
],
"valid"
],
[
[
7472,
7472
],
"mapped",
[
100
]
],
[
[
7473,
7473
],
"mapped",
[
101
]
],
[
[
7474,
7474
],
"mapped",
[
477
]
],
[
[
7475,
7475
],
"mapped",
[
103
]
],
[
[
7476,
7476
],
"mapped",
[
104
]
],
[
[
7477,
7477
],
"mapped",
[
105
]
],
[
[
7478,
7478
],
"mapped",
[
106
]
],
[
[
7479,
7479
],
"mapped",
[
107
]
],
[
[
7480,
7480
],
"mapped",
[
108
]
],
[
[
7481,
7481
],
"mapped",
[
109
]
],
[
[
7482,
7482
],
"mapped",
[
110
]
],
[
[
7483,
7483
],
"valid"
],
[
[
7484,
7484
],
"mapped",
[
111
]
],
[
[
7485,
7485
],
"mapped",
[
547
]
],
[
[
7486,
7486
],
"mapped",
[
112
]
],
[
[
7487,
7487
],
"mapped",
[
114
]
],
[
[
7488,
7488
],
"mapped",
[
116
]
],
[
[
7489,
7489
],
"mapped",
[
117
]
],
[
[
7490,
7490
],
"mapped",
[
119
]
],
[
[
7491,
7491
],
"mapped",
[
97
]
],
[
[
7492,
7492
],
"mapped",
[
592
]
],
[
[
7493,
7493
],
"mapped",
[
593
]
],
[
[
7494,
7494
],
"mapped",
[
7426
]
],
[
[
7495,
7495
],
"mapped",
[
98
]
],
[
[
7496,
7496
],
"mapped",
[
100
]
],
[
[
7497,
7497
],
"mapped",
[
101
]
],
[
[
7498,
7498
],
"mapped",
[
601
]
],
[
[
7499,
7499
],
"mapped",
[
603
]
],
[
[
7500,
7500
],
"mapped",
[
604
]
],
[
[
7501,
7501
],
"mapped",
[
103
]
],
[
[
7502,
7502
],
"valid"
],
[
[
7503,
7503
],
"mapped",
[
107
]
],
[
[
7504,
7504
],
"mapped",
[
109
]
],
[
[
7505,
7505
],
"mapped",
[
331
]
],
[
[
7506,
7506
],
"mapped",
[
111
]
],
[
[
7507,
7507
],
"mapped",
[
596
]
],
[
[
7508,
7508
],
"mapped",
[
7446
]
],
[
[
7509,
7509
],
"mapped",
[
7447
]
],
[
[
7510,
7510
],
"mapped",
[
112
]
],
[
[
7511,
7511
],
"mapped",
[
116
]
],
[
[
7512,
7512
],
"mapped",
[
117
]
],
[
[
7513,
7513
],
"mapped",
[
7453
]
],
[
[
7514,
7514
],
"mapped",
[
623
]
],
[
[
7515,
7515
],
"mapped",
[
118
]
],
[
[
7516,
7516
],
"mapped",
[
7461
]
],
[
[
7517,
7517
],
"mapped",
[
946
]
],
[
[
7518,
7518
],
"mapped",
[
947
]
],
[
[
7519,
7519
],
"mapped",
[
948
]
],
[
[
7520,
7520
],
"mapped",
[
966
]
],
[
[
7521,
7521
],
"mapped",
[
967
]
],
[
[
7522,
7522
],
"mapped",
[
105
]
],
[
[
7523,
7523
],
"mapped",
[
114
]
],
[
[
7524,
7524
],
"mapped",
[
117
]
],
[
[
7525,
7525
],
"mapped",
[
118
]
],
[
[
7526,
7526
],
"mapped",
[
946
]
],
[
[
7527,
7527
],
"mapped",
[
947
]
],
[
[
7528,
7528
],
"mapped",
[
961
]
],
[
[
7529,
7529
],
"mapped",
[
966
]
],
[
[
7530,
7530
],
"mapped",
[
967
]
],
[
[
7531,
7531
],
"valid"
],
[
[
7532,
7543
],
"valid"
],
[
[
7544,
7544
],
"mapped",
[
1085
]
],
[
[
7545,
7578
],
"valid"
],
[
[
7579,
7579
],
"mapped",
[
594
]
],
[
[
7580,
7580
],
"mapped",
[
99
]
],
[
[
7581,
7581
],
"mapped",
[
597
]
],
[
[
7582,
7582
],
"mapped",
[
240
]
],
[
[
7583,
7583
],
"mapped",
[
604
]
],
[
[
7584,
7584
],
"mapped",
[
102
]
],
[
[
7585,
7585
],
"mapped",
[
607
]
],
[
[
7586,
7586
],
"mapped",
[
609
]
],
[
[
7587,
7587
],
"mapped",
[
613
]
],
[
[
7588,
7588
],
"mapped",
[
616
]
],
[
[
7589,
7589
],
"mapped",
[
617
]
],
[
[
7590,
7590
],
"mapped",
[
618
]
],
[
[
7591,
7591
],
"mapped",
[
7547
]
],
[
[
7592,
7592
],
"mapped",
[
669
]
],
[
[
7593,
7593
],
"mapped",
[
621
]
],
[
[
7594,
7594
],
"mapped",
[
7557
]
],
[
[
7595,
7595
],
"mapped",
[
671
]
],
[
[
7596,
7596
],
"mapped",
[
625
]
],
[
[
7597,
7597
],
"mapped",
[
624
]
],
[
[
7598,
7598
],
"mapped",
[
626
]
],
[
[
7599,
7599
],
"mapped",
[
627
]
],
[
[
7600,
7600
],
"mapped",
[
628
]
],
[
[
7601,
7601
],
"mapped",
[
629
]
],
[
[
7602,
7602
],
"mapped",
[
632
]
],
[
[
7603,
7603
],
"mapped",
[
642
]
],
[
[
7604,
7604
],
"mapped",
[
643
]
],
[
[
7605,
7605
],
"mapped",
[
427
]
],
[
[
7606,
7606
],
"mapped",
[
649
]
],
[
[
7607,
7607
],
"mapped",
[
650
]
],
[
[
7608,
7608
],
"mapped",
[
7452
]
],
[
[
7609,
7609
],
"mapped",
[
651
]
],
[
[
7610,
7610
],
"mapped",
[
652
]
],
[
[
7611,
7611
],
"mapped",
[
122
]
],
[
[
7612,
7612
],
"mapped",
[
656
]
],
[
[
7613,
7613
],
"mapped",
[
657
]
],
[
[
7614,
7614
],
"mapped",
[
658
]
],
[
[
7615,
7615
],
"mapped",
[
952
]
],
[
[
7616,
7619
],
"valid"
],
[
[
7620,
7626
],
"valid"
],
[
[
7627,
7654
],
"valid"
],
[
[
7655,
7669
],
"valid"
],
[
[
7670,
7675
],
"disallowed"
],
[
[
7676,
7676
],
"valid"
],
[
[
7677,
7677
],
"valid"
],
[
[
7678,
7679
],
"valid"
],
[
[
7680,
7680
],
"mapped",
[
7681
]
],
[
[
7681,
7681
],
"valid"
],
[
[
7682,
7682
],
"mapped",
[
7683
]
],
[
[
7683,
7683
],
"valid"
],
[
[
7684,
7684
],
"mapped",
[
7685
]
],
[
[
7685,
7685
],
"valid"
],
[
[
7686,
7686
],
"mapped",
[
7687
]
],
[
[
7687,
7687
],
"valid"
],
[
[
7688,
7688
],
"mapped",
[
7689
]
],
[
[
7689,
7689
],
"valid"
],
[
[
7690,
7690
],
"mapped",
[
7691
]
],
[
[
7691,
7691
],
"valid"
],
[
[
7692,
7692
],
"mapped",
[
7693
]
],
[
[
7693,
7693
],
"valid"
],
[
[
7694,
7694
],
"mapped",
[
7695
]
],
[
[
7695,
7695
],
"valid"
],
[
[
7696,
7696
],
"mapped",
[
7697
]
],
[
[
7697,
7697
],
"valid"
],
[
[
7698,
7698
],
"mapped",
[
7699
]
],
[
[
7699,
7699
],
"valid"
],
[
[
7700,
7700
],
"mapped",
[
7701
]
],
[
[
7701,
7701
],
"valid"
],
[
[
7702,
7702
],
"mapped",
[
7703
]
],
[
[
7703,
7703
],
"valid"
],
[
[
7704,
7704
],
"mapped",
[
7705
]
],
[
[
7705,
7705
],
"valid"
],
[
[
7706,
7706
],
"mapped",
[
7707
]
],
[
[
7707,
7707
],
"valid"
],
[
[
7708,
7708
],
"mapped",
[
7709
]
],
[
[
7709,
7709
],
"valid"
],
[
[
7710,
7710
],
"mapped",
[
7711
]
],
[
[
7711,
7711
],
"valid"
],
[
[
7712,
7712
],
"mapped",
[
7713
]
],
[
[
7713,
7713
],
"valid"
],
[
[
7714,
7714
],
"mapped",
[
7715
]
],
[
[
7715,
7715
],
"valid"
],
[
[
7716,
7716
],
"mapped",
[
7717
]
],
[
[
7717,
7717
],
"valid"
],
[
[
7718,
7718
],
"mapped",
[
7719
]
],
[
[
7719,
7719
],
"valid"
],
[
[
7720,
7720
],
"mapped",
[
7721
]
],
[
[
7721,
7721
],
"valid"
],
[
[
7722,
7722
],
"mapped",
[
7723
]
],
[
[
7723,
7723
],
"valid"
],
[
[
7724,
7724
],
"mapped",
[
7725
]
],
[
[
7725,
7725
],
"valid"
],
[
[
7726,
7726
],
"mapped",
[
7727
]
],
[
[
7727,
7727
],
"valid"
],
[
[
7728,
7728
],
"mapped",
[
7729
]
],
[
[
7729,
7729
],
"valid"
],
[
[
7730,
7730
],
"mapped",
[
7731
]
],
[
[
7731,
7731
],
"valid"
],
[
[
7732,
7732
],
"mapped",
[
7733
]
],
[
[
7733,
7733
],
"valid"
],
[
[
7734,
7734
],
"mapped",
[
7735
]
],
[
[
7735,
7735
],
"valid"
],
[
[
7736,
7736
],
"mapped",
[
7737
]
],
[
[
7737,
7737
],
"valid"
],
[
[
7738,
7738
],
"mapped",
[
7739
]
],
[
[
7739,
7739
],
"valid"
],
[
[
7740,
7740
],
"mapped",
[
7741
]
],
[
[
7741,
7741
],
"valid"
],
[
[
7742,
7742
],
"mapped",
[
7743
]
],
[
[
7743,
7743
],
"valid"
],
[
[
7744,
7744
],
"mapped",
[
7745
]
],
[
[
7745,
7745
],
"valid"
],
[
[
7746,
7746
],
"mapped",
[
7747
]
],
[
[
7747,
7747
],
"valid"
],
[
[
7748,
7748
],
"mapped",
[
7749
]
],
[
[
7749,
7749
],
"valid"
],
[
[
7750,
7750
],
"mapped",
[
7751
]
],
[
[
7751,
7751
],
"valid"
],
[
[
7752,
7752
],
"mapped",
[
7753
]
],
[
[
7753,
7753
],
"valid"
],
[
[
7754,
7754
],
"mapped",
[
7755
]
],
[
[
7755,
7755
],
"valid"
],
[
[
7756,
7756
],
"mapped",
[
7757
]
],
[
[
7757,
7757
],
"valid"
],
[
[
7758,
7758
],
"mapped",
[
7759
]
],
[
[
7759,
7759
],
"valid"
],
[
[
7760,
7760
],
"mapped",
[
7761
]
],
[
[
7761,
7761
],
"valid"
],
[
[
7762,
7762
],
"mapped",
[
7763
]
],
[
[
7763,
7763
],
"valid"
],
[
[
7764,
7764
],
"mapped",
[
7765
]
],
[
[
7765,
7765
],
"valid"
],
[
[
7766,
7766
],
"mapped",
[
7767
]
],
[
[
7767,
7767
],
"valid"
],
[
[
7768,
7768
],
"mapped",
[
7769
]
],
[
[
7769,
7769
],
"valid"
],
[
[
7770,
7770
],
"mapped",
[
7771
]
],
[
[
7771,
7771
],
"valid"
],
[
[
7772,
7772
],
"mapped",
[
7773
]
],
[
[
7773,
7773
],
"valid"
],
[
[
7774,
7774
],
"mapped",
[
7775
]
],
[
[
7775,
7775
],
"valid"
],
[
[
7776,
7776
],
"mapped",
[
7777
]
],
[
[
7777,
7777
],
"valid"
],
[
[
7778,
7778
],
"mapped",
[
7779
]
],
[
[
7779,
7779
],
"valid"
],
[
[
7780,
7780
],
"mapped",
[
7781
]
],
[
[
7781,
7781
],
"valid"
],
[
[
7782,
7782
],
"mapped",
[
7783
]
],
[
[
7783,
7783
],
"valid"
],
[
[
7784,
7784
],
"mapped",
[
7785
]
],
[
[
7785,
7785
],
"valid"
],
[
[
7786,
7786
],
"mapped",
[
7787
]
],
[
[
7787,
7787
],
"valid"
],
[
[
7788,
7788
],
"mapped",
[
7789
]
],
[
[
7789,
7789
],
"valid"
],
[
[
7790,
7790
],
"mapped",
[
7791
]
],
[
[
7791,
7791
],
"valid"
],
[
[
7792,
7792
],
"mapped",
[
7793
]
],
[
[
7793,
7793
],
"valid"
],
[
[
7794,
7794
],
"mapped",
[
7795
]
],
[
[
7795,
7795
],
"valid"
],
[
[
7796,
7796
],
"mapped",
[
7797
]
],
[
[
7797,
7797
],
"valid"
],
[
[
7798,
7798
],
"mapped",
[
7799
]
],
[
[
7799,
7799
],
"valid"
],
[
[
7800,
7800
],
"mapped",
[
7801
]
],
[
[
7801,
7801
],
"valid"
],
[
[
7802,
7802
],
"mapped",
[
7803
]
],
[
[
7803,
7803
],
"valid"
],
[
[
7804,
7804
],
"mapped",
[
7805
]
],
[
[
7805,
7805
],
"valid"
],
[
[
7806,
7806
],
"mapped",
[
7807
]
],
[
[
7807,
7807
],
"valid"
],
[
[
7808,
7808
],
"mapped",
[
7809
]
],
[
[
7809,
7809
],
"valid"
],
[
[
7810,
7810
],
"mapped",
[
7811
]
],
[
[
7811,
7811
],
"valid"
],
[
[
7812,
7812
],
"mapped",
[
7813
]
],
[
[
7813,
7813
],
"valid"
],
[
[
7814,
7814
],
"mapped",
[
7815
]
],
[
[
7815,
7815
],
"valid"
],
[
[
7816,
7816
],
"mapped",
[
7817
]
],
[
[
7817,
7817
],
"valid"
],
[
[
7818,
7818
],
"mapped",
[
7819
]
],
[
[
7819,
7819
],
"valid"
],
[
[
7820,
7820
],
"mapped",
[
7821
]
],
[
[
7821,
7821
],
"valid"
],
[
[
7822,
7822
],
"mapped",
[
7823
]
],
[
[
7823,
7823
],
"valid"
],
[
[
7824,
7824
],
"mapped",
[
7825
]
],
[
[
7825,
7825
],
"valid"
],
[
[
7826,
7826
],
"mapped",
[
7827
]
],
[
[
7827,
7827
],
"valid"
],
[
[
7828,
7828
],
"mapped",
[
7829
]
],
[
[
7829,
7833
],
"valid"
],
[
[
7834,
7834
],
"mapped",
[
97,
702
]
],
[
[
7835,
7835
],
"mapped",
[
7777
]
],
[
[
7836,
7837
],
"valid"
],
[
[
7838,
7838
],
"mapped",
[
115,
115
]
],
[
[
7839,
7839
],
"valid"
],
[
[
7840,
7840
],
"mapped",
[
7841
]
],
[
[
7841,
7841
],
"valid"
],
[
[
7842,
7842
],
"mapped",
[
7843
]
],
[
[
7843,
7843
],
"valid"
],
[
[
7844,
7844
],
"mapped",
[
7845
]
],
[
[
7845,
7845
],
"valid"
],
[
[
7846,
7846
],
"mapped",
[
7847
]
],
[
[
7847,
7847
],
"valid"
],
[
[
7848,
7848
],
"mapped",
[
7849
]
],
[
[
7849,
7849
],
"valid"
],
[
[
7850,
7850
],
"mapped",
[
7851
]
],
[
[
7851,
7851
],
"valid"
],
[
[
7852,
7852
],
"mapped",
[
7853
]
],
[
[
7853,
7853
],
"valid"
],
[
[
7854,
7854
],
"mapped",
[
7855
]
],
[
[
7855,
7855
],
"valid"
],
[
[
7856,
7856
],
"mapped",
[
7857
]
],
[
[
7857,
7857
],
"valid"
],
[
[
7858,
7858
],
"mapped",
[
7859
]
],
[
[
7859,
7859
],
"valid"
],
[
[
7860,
7860
],
"mapped",
[
7861
]
],
[
[
7861,
7861
],
"valid"
],
[
[
7862,
7862
],
"mapped",
[
7863
]
],
[
[
7863,
7863
],
"valid"
],
[
[
7864,
7864
],
"mapped",
[
7865
]
],
[
[
7865,
7865
],
"valid"
],
[
[
7866,
7866
],
"mapped",
[
7867
]
],
[
[
7867,
7867
],
"valid"
],
[
[
7868,
7868
],
"mapped",
[
7869
]
],
[
[
7869,
7869
],
"valid"
],
[
[
7870,
7870
],
"mapped",
[
7871
]
],
[
[
7871,
7871
],
"valid"
],
[
[
7872,
7872
],
"mapped",
[
7873
]
],
[
[
7873,
7873
],
"valid"
],
[
[
7874,
7874
],
"mapped",
[
7875
]
],
[
[
7875,
7875
],
"valid"
],
[
[
7876,
7876
],
"mapped",
[
7877
]
],
[
[
7877,
7877
],
"valid"
],
[
[
7878,
7878
],
"mapped",
[
7879
]
],
[
[
7879,
7879
],
"valid"
],
[
[
7880,
7880
],
"mapped",
[
7881
]
],
[
[
7881,
7881
],
"valid"
],
[
[
7882,
7882
],
"mapped",
[
7883
]
],
[
[
7883,
7883
],
"valid"
],
[
[
7884,
7884
],
"mapped",
[
7885
]
],
[
[
7885,
7885
],
"valid"
],
[
[
7886,
7886
],
"mapped",
[
7887
]
],
[
[
7887,
7887
],
"valid"
],
[
[
7888,
7888
],
"mapped",
[
7889
]
],
[
[
7889,
7889
],
"valid"
],
[
[
7890,
7890
],
"mapped",
[
7891
]
],
[
[
7891,
7891
],
"valid"
],
[
[
7892,
7892
],
"mapped",
[
7893
]
],
[
[
7893,
7893
],
"valid"
],
[
[
7894,
7894
],
"mapped",
[
7895
]
],
[
[
7895,
7895
],
"valid"
],
[
[
7896,
7896
],
"mapped",
[
7897
]
],
[
[
7897,
7897
],
"valid"
],
[
[
7898,
7898
],
"mapped",
[
7899
]
],
[
[
7899,
7899
],
"valid"
],
[
[
7900,
7900
],
"mapped",
[
7901
]
],
[
[
7901,
7901
],
"valid"
],
[
[
7902,
7902
],
"mapped",
[
7903
]
],
[
[
7903,
7903
],
"valid"
],
[
[
7904,
7904
],
"mapped",
[
7905
]
],
[
[
7905,
7905
],
"valid"
],
[
[
7906,
7906
],
"mapped",
[
7907
]
],
[
[
7907,
7907
],
"valid"
],
[
[
7908,
7908
],
"mapped",
[
7909
]
],
[
[
7909,
7909
],
"valid"
],
[
[
7910,
7910
],
"mapped",
[
7911
]
],
[
[
7911,
7911
],
"valid"
],
[
[
7912,
7912
],
"mapped",
[
7913
]
],
[
[
7913,
7913
],
"valid"
],
[
[
7914,
7914
],
"mapped",
[
7915
]
],
[
[
7915,
7915
],
"valid"
],
[
[
7916,
7916
],
"mapped",
[
7917
]
],
[
[
7917,
7917
],
"valid"
],
[
[
7918,
7918
],
"mapped",
[
7919
]
],
[
[
7919,
7919
],
"valid"
],
[
[
7920,
7920
],
"mapped",
[
7921
]
],
[
[
7921,
7921
],
"valid"
],
[
[
7922,
7922
],
"mapped",
[
7923
]
],
[
[
7923,
7923
],
"valid"
],
[
[
7924,
7924
],
"mapped",
[
7925
]
],
[
[
7925,
7925
],
"valid"
],
[
[
7926,
7926
],
"mapped",
[
7927
]
],
[
[
7927,
7927
],
"valid"
],
[
[
7928,
7928
],
"mapped",
[
7929
]
],
[
[
7929,
7929
],
"valid"
],
[
[
7930,
7930
],
"mapped",
[
7931
]
],
[
[
7931,
7931
],
"valid"
],
[
[
7932,
7932
],
"mapped",
[
7933
]
],
[
[
7933,
7933
],
"valid"
],
[
[
7934,
7934
],
"mapped",
[
7935
]
],
[
[
7935,
7935
],
"valid"
],
[
[
7936,
7943
],
"valid"
],
[
[
7944,
7944
],
"mapped",
[
7936
]
],
[
[
7945,
7945
],
"mapped",
[
7937
]
],
[
[
7946,
7946
],
"mapped",
[
7938
]
],
[
[
7947,
7947
],
"mapped",
[
7939
]
],
[
[
7948,
7948
],
"mapped",
[
7940
]
],
[
[
7949,
7949
],
"mapped",
[
7941
]
],
[
[
7950,
7950
],
"mapped",
[
7942
]
],
[
[
7951,
7951
],
"mapped",
[
7943
]
],
[
[
7952,
7957
],
"valid"
],
[
[
7958,
7959
],
"disallowed"
],
[
[
7960,
7960
],
"mapped",
[
7952
]
],
[
[
7961,
7961
],
"mapped",
[
7953
]
],
[
[
7962,
7962
],
"mapped",
[
7954
]
],
[
[
7963,
7963
],
"mapped",
[
7955
]
],
[
[
7964,
7964
],
"mapped",
[
7956
]
],
[
[
7965,
7965
],
"mapped",
[
7957
]
],
[
[
7966,
7967
],
"disallowed"
],
[
[
7968,
7975
],
"valid"
],
[
[
7976,
7976
],
"mapped",
[
7968
]
],
[
[
7977,
7977
],
"mapped",
[
7969
]
],
[
[
7978,
7978
],
"mapped",
[
7970
]
],
[
[
7979,
7979
],
"mapped",
[
7971
]
],
[
[
7980,
7980
],
"mapped",
[
7972
]
],
[
[
7981,
7981
],
"mapped",
[
7973
]
],
[
[
7982,
7982
],
"mapped",
[
7974
]
],
[
[
7983,
7983
],
"mapped",
[
7975
]
],
[
[
7984,
7991
],
"valid"
],
[
[
7992,
7992
],
"mapped",
[
7984
]
],
[
[
7993,
7993
],
"mapped",
[
7985
]
],
[
[
7994,
7994
],
"mapped",
[
7986
]
],
[
[
7995,
7995
],
"mapped",
[
7987
]
],
[
[
7996,
7996
],
"mapped",
[
7988
]
],
[
[
7997,
7997
],
"mapped",
[
7989
]
],
[
[
7998,
7998
],
"mapped",
[
7990
]
],
[
[
7999,
7999
],
"mapped",
[
7991
]
],
[
[
8000,
8005
],
"valid"
],
[
[
8006,
8007
],
"disallowed"
],
[
[
8008,
8008
],
"mapped",
[
8000
]
],
[
[
8009,
8009
],
"mapped",
[
8001
]
],
[
[
8010,
8010
],
"mapped",
[
8002
]
],
[
[
8011,
8011
],
"mapped",
[
8003
]
],
[
[
8012,
8012
],
"mapped",
[
8004
]
],
[
[
8013,
8013
],
"mapped",
[
8005
]
],
[
[
8014,
8015
],
"disallowed"
],
[
[
8016,
8023
],
"valid"
],
[
[
8024,
8024
],
"disallowed"
],
[
[
8025,
8025
],
"mapped",
[
8017
]
],
[
[
8026,
8026
],
"disallowed"
],
[
[
8027,
8027
],
"mapped",
[
8019
]
],
[
[
8028,
8028
],
"disallowed"
],
[
[
8029,
8029
],
"mapped",
[
8021
]
],
[
[
8030,
8030
],
"disallowed"
],
[
[
8031,
8031
],
"mapped",
[
8023
]
],
[
[
8032,
8039
],
"valid"
],
[
[
8040,
8040
],
"mapped",
[
8032
]
],
[
[
8041,
8041
],
"mapped",
[
8033
]
],
[
[
8042,
8042
],
"mapped",
[
8034
]
],
[
[
8043,
8043
],
"mapped",
[
8035
]
],
[
[
8044,
8044
],
"mapped",
[
8036
]
],
[
[
8045,
8045
],
"mapped",
[
8037
]
],
[
[
8046,
8046
],
"mapped",
[
8038
]
],
[
[
8047,
8047
],
"mapped",
[
8039
]
],
[
[
8048,
8048
],
"valid"
],
[
[
8049,
8049
],
"mapped",
[
940
]
],
[
[
8050,
8050
],
"valid"
],
[
[
8051,
8051
],
"mapped",
[
941
]
],
[
[
8052,
8052
],
"valid"
],
[
[
8053,
8053
],
"mapped",
[
942
]
],
[
[
8054,
8054
],
"valid"
],
[
[
8055,
8055
],
"mapped",
[
943
]
],
[
[
8056,
8056
],
"valid"
],
[
[
8057,
8057
],
"mapped",
[
972
]
],
[
[
8058,
8058
],
"valid"
],
[
[
8059,
8059
],
"mapped",
[
973
]
],
[
[
8060,
8060
],
"valid"
],
[
[
8061,
8061
],
"mapped",
[
974
]
],
[
[
8062,
8063
],
"disallowed"
],
[
[
8064,
8064
],
"mapped",
[
7936,
953
]
],
[
[
8065,
8065
],
"mapped",
[
7937,
953
]
],
[
[
8066,
8066
],
"mapped",
[
7938,
953
]
],
[
[
8067,
8067
],
"mapped",
[
7939,
953
]
],
[
[
8068,
8068
],
"mapped",
[
7940,
953
]
],
[
[
8069,
8069
],
"mapped",
[
7941,
953
]
],
[
[
8070,
8070
],
"mapped",
[
7942,
953
]
],
[
[
8071,
8071
],
"mapped",
[
7943,
953
]
],
[
[
8072,
8072
],
"mapped",
[
7936,
953
]
],
[
[
8073,
8073
],
"mapped",
[
7937,
953
]
],
[
[
8074,
8074
],
"mapped",
[
7938,
953
]
],
[
[
8075,
8075
],
"mapped",
[
7939,
953
]
],
[
[
8076,
8076
],
"mapped",
[
7940,
953
]
],
[
[
8077,
8077
],
"mapped",
[
7941,
953
]
],
[
[
8078,
8078
],
"mapped",
[
7942,
953
]
],
[
[
8079,
8079
],
"mapped",
[
7943,
953
]
],
[
[
8080,
8080
],
"mapped",
[
7968,
953
]
],
[
[
8081,
8081
],
"mapped",
[
7969,
953
]
],
[
[
8082,
8082
],
"mapped",
[
7970,
953
]
],
[
[
8083,
8083
],
"mapped",
[
7971,
953
]
],
[
[
8084,
8084
],
"mapped",
[
7972,
953
]
],
[
[
8085,
8085
],
"mapped",
[
7973,
953
]
],
[
[
8086,
8086
],
"mapped",
[
7974,
953
]
],
[
[
8087,
8087
],
"mapped",
[
7975,
953
]
],
[
[
8088,
8088
],
"mapped",
[
7968,
953
]
],
[
[
8089,
8089
],
"mapped",
[
7969,
953
]
],
[
[
8090,
8090
],
"mapped",
[
7970,
953
]
],
[
[
8091,
8091
],
"mapped",
[
7971,
953
]
],
[
[
8092,
8092
],
"mapped",
[
7972,
953
]
],
[
[
8093,
8093
],
"mapped",
[
7973,
953
]
],
[
[
8094,
8094
],
"mapped",
[
7974,
953
]
],
[
[
8095,
8095
],
"mapped",
[
7975,
953
]
],
[
[
8096,
8096
],
"mapped",
[
8032,
953
]
],
[
[
8097,
8097
],
"mapped",
[
8033,
953
]
],
[
[
8098,
8098
],
"mapped",
[
8034,
953
]
],
[
[
8099,
8099
],
"mapped",
[
8035,
953
]
],
[
[
8100,
8100
],
"mapped",
[
8036,
953
]
],
[
[
8101,
8101
],
"mapped",
[
8037,
953
]
],
[
[
8102,
8102
],
"mapped",
[
8038,
953
]
],
[
[
8103,
8103
],
"mapped",
[
8039,
953
]
],
[
[
8104,
8104
],
"mapped",
[
8032,
953
]
],
[
[
8105,
8105
],
"mapped",
[
8033,
953
]
],
[
[
8106,
8106
],
"mapped",
[
8034,
953
]
],
[
[
8107,
8107
],
"mapped",
[
8035,
953
]
],
[
[
8108,
8108
],
"mapped",
[
8036,
953
]
],
[
[
8109,
8109
],
"mapped",
[
8037,
953
]
],
[
[
8110,
8110
],
"mapped",
[
8038,
953
]
],
[
[
8111,
8111
],
"mapped",
[
8039,
953
]
],
[
[
8112,
8113
],
"valid"
],
[
[
8114,
8114
],
"mapped",
[
8048,
953
]
],
[
[
8115,
8115
],
"mapped",
[
945,
953
]
],
[
[
8116,
8116
],
"mapped",
[
940,
953
]
],
[
[
8117,
8117
],
"disallowed"
],
[
[
8118,
8118
],
"valid"
],
[
[
8119,
8119
],
"mapped",
[
8118,
953
]
],
[
[
8120,
8120
],
"mapped",
[
8112
]
],
[
[
8121,
8121
],
"mapped",
[
8113
]
],
[
[
8122,
8122
],
"mapped",
[
8048
]
],
[
[
8123,
8123
],
"mapped",
[
940
]
],
[
[
8124,
8124
],
"mapped",
[
945,
953
]
],
[
[
8125,
8125
],
"disallowed_STD3_mapped",
[
32,
787
]
],
[
[
8126,
8126
],
"mapped",
[
953
]
],
[
[
8127,
8127
],
"disallowed_STD3_mapped",
[
32,
787
]
],
[
[
8128,
8128
],
"disallowed_STD3_mapped",
[
32,
834
]
],
[
[
8129,
8129
],
"disallowed_STD3_mapped",
[
32,
776,
834
]
],
[
[
8130,
8130
],
"mapped",
[
8052,
953
]
],
[
[
8131,
8131
],
"mapped",
[
951,
953
]
],
[
[
8132,
8132
],
"mapped",
[
942,
953
]
],
[
[
8133,
8133
],
"disallowed"
],
[
[
8134,
8134
],
"valid"
],
[
[
8135,
8135
],
"mapped",
[
8134,
953
]
],
[
[
8136,
8136
],
"mapped",
[
8050
]
],
[
[
8137,
8137
],
"mapped",
[
941
]
],
[
[
8138,
8138
],
"mapped",
[
8052
]
],
[
[
8139,
8139
],
"mapped",
[
942
]
],
[
[
8140,
8140
],
"mapped",
[
951,
953
]
],
[
[
8141,
8141
],
"disallowed_STD3_mapped",
[
32,
787,
768
]
],
[
[
8142,
8142
],
"disallowed_STD3_mapped",
[
32,
787,
769
]
],
[
[
8143,
8143
],
"disallowed_STD3_mapped",
[
32,
787,
834
]
],
[
[
8144,
8146
],
"valid"
],
[
[
8147,
8147
],
"mapped",
[
912
]
],
[
[
8148,
8149
],
"disallowed"
],
[
[
8150,
8151
],
"valid"
],
[
[
8152,
8152
],
"mapped",
[
8144
]
],
[
[
8153,
8153
],
"mapped",
[
8145
]
],
[
[
8154,
8154
],
"mapped",
[
8054
]
],
[
[
8155,
8155
],
"mapped",
[
943
]
],
[
[
8156,
8156
],
"disallowed"
],
[
[
8157,
8157
],
"disallowed_STD3_mapped",
[
32,
788,
768
]
],
[
[
8158,
8158
],
"disallowed_STD3_mapped",
[
32,
788,
769
]
],
[
[
8159,
8159
],
"disallowed_STD3_mapped",
[
32,
788,
834
]
],
[
[
8160,
8162
],
"valid"
],
[
[
8163,
8163
],
"mapped",
[
944
]
],
[
[
8164,
8167
],
"valid"
],
[
[
8168,
8168
],
"mapped",
[
8160
]
],
[
[
8169,
8169
],
"mapped",
[
8161
]
],
[
[
8170,
8170
],
"mapped",
[
8058
]
],
[
[
8171,
8171
],
"mapped",
[
973
]
],
[
[
8172,
8172
],
"mapped",
[
8165
]
],
[
[
8173,
8173
],
"disallowed_STD3_mapped",
[
32,
776,
768
]
],
[
[
8174,
8174
],
"disallowed_STD3_mapped",
[
32,
776,
769
]
],
[
[
8175,
8175
],
"disallowed_STD3_mapped",
[
96
]
],
[
[
8176,
8177
],
"disallowed"
],
[
[
8178,
8178
],
"mapped",
[
8060,
953
]
],
[
[
8179,
8179
],
"mapped",
[
969,
953
]
],
[
[
8180,
8180
],
"mapped",
[
974,
953
]
],
[
[
8181,
8181
],
"disallowed"
],
[
[
8182,
8182
],
"valid"
],
[
[
8183,
8183
],
"mapped",
[
8182,
953
]
],
[
[
8184,
8184
],
"mapped",
[
8056
]
],
[
[
8185,
8185
],
"mapped",
[
972
]
],
[
[
8186,
8186
],
"mapped",
[
8060
]
],
[
[
8187,
8187
],
"mapped",
[
974
]
],
[
[
8188,
8188
],
"mapped",
[
969,
953
]
],
[
[
8189,
8189
],
"disallowed_STD3_mapped",
[
32,
769
]
],
[
[
8190,
8190
],
"disallowed_STD3_mapped",
[
32,
788
]
],
[
[
8191,
8191
],
"disallowed"
],
[
[
8192,
8202
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
8203,
8203
],
"ignored"
],
[
[
8204,
8205
],
"deviation",
[
]
],
[
[
8206,
8207
],
"disallowed"
],
[
[
8208,
8208
],
"valid",
[
],
"NV8"
],
[
[
8209,
8209
],
"mapped",
[
8208
]
],
[
[
8210,
8214
],
"valid",
[
],
"NV8"
],
[
[
8215,
8215
],
"disallowed_STD3_mapped",
[
32,
819
]
],
[
[
8216,
8227
],
"valid",
[
],
"NV8"
],
[
[
8228,
8230
],
"disallowed"
],
[
[
8231,
8231
],
"valid",
[
],
"NV8"
],
[
[
8232,
8238
],
"disallowed"
],
[
[
8239,
8239
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
8240,
8242
],
"valid",
[
],
"NV8"
],
[
[
8243,
8243
],
"mapped",
[
8242,
8242
]
],
[
[
8244,
8244
],
"mapped",
[
8242,
8242,
8242
]
],
[
[
8245,
8245
],
"valid",
[
],
"NV8"
],
[
[
8246,
8246
],
"mapped",
[
8245,
8245
]
],
[
[
8247,
8247
],
"mapped",
[
8245,
8245,
8245
]
],
[
[
8248,
8251
],
"valid",
[
],
"NV8"
],
[
[
8252,
8252
],
"disallowed_STD3_mapped",
[
33,
33
]
],
[
[
8253,
8253
],
"valid",
[
],
"NV8"
],
[
[
8254,
8254
],
"disallowed_STD3_mapped",
[
32,
773
]
],
[
[
8255,
8262
],
"valid",
[
],
"NV8"
],
[
[
8263,
8263
],
"disallowed_STD3_mapped",
[
63,
63
]
],
[
[
8264,
8264
],
"disallowed_STD3_mapped",
[
63,
33
]
],
[
[
8265,
8265
],
"disallowed_STD3_mapped",
[
33,
63
]
],
[
[
8266,
8269
],
"valid",
[
],
"NV8"
],
[
[
8270,
8274
],
"valid",
[
],
"NV8"
],
[
[
8275,
8276
],
"valid",
[
],
"NV8"
],
[
[
8277,
8278
],
"valid",
[
],
"NV8"
],
[
[
8279,
8279
],
"mapped",
[
8242,
8242,
8242,
8242
]
],
[
[
8280,
8286
],
"valid",
[
],
"NV8"
],
[
[
8287,
8287
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
8288,
8288
],
"ignored"
],
[
[
8289,
8291
],
"disallowed"
],
[
[
8292,
8292
],
"ignored"
],
[
[
8293,
8293
],
"disallowed"
],
[
[
8294,
8297
],
"disallowed"
],
[
[
8298,
8303
],
"disallowed"
],
[
[
8304,
8304
],
"mapped",
[
48
]
],
[
[
8305,
8305
],
"mapped",
[
105
]
],
[
[
8306,
8307
],
"disallowed"
],
[
[
8308,
8308
],
"mapped",
[
52
]
],
[
[
8309,
8309
],
"mapped",
[
53
]
],
[
[
8310,
8310
],
"mapped",
[
54
]
],
[
[
8311,
8311
],
"mapped",
[
55
]
],
[
[
8312,
8312
],
"mapped",
[
56
]
],
[
[
8313,
8313
],
"mapped",
[
57
]
],
[
[
8314,
8314
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
8315,
8315
],
"mapped",
[
8722
]
],
[
[
8316,
8316
],
"disallowed_STD3_mapped",
[
61
]
],
[
[
8317,
8317
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
8318,
8318
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
8319,
8319
],
"mapped",
[
110
]
],
[
[
8320,
8320
],
"mapped",
[
48
]
],
[
[
8321,
8321
],
"mapped",
[
49
]
],
[
[
8322,
8322
],
"mapped",
[
50
]
],
[
[
8323,
8323
],
"mapped",
[
51
]
],
[
[
8324,
8324
],
"mapped",
[
52
]
],
[
[
8325,
8325
],
"mapped",
[
53
]
],
[
[
8326,
8326
],
"mapped",
[
54
]
],
[
[
8327,
8327
],
"mapped",
[
55
]
],
[
[
8328,
8328
],
"mapped",
[
56
]
],
[
[
8329,
8329
],
"mapped",
[
57
]
],
[
[
8330,
8330
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
8331,
8331
],
"mapped",
[
8722
]
],
[
[
8332,
8332
],
"disallowed_STD3_mapped",
[
61
]
],
[
[
8333,
8333
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
8334,
8334
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
8335,
8335
],
"disallowed"
],
[
[
8336,
8336
],
"mapped",
[
97
]
],
[
[
8337,
8337
],
"mapped",
[
101
]
],
[
[
8338,
8338
],
"mapped",
[
111
]
],
[
[
8339,
8339
],
"mapped",
[
120
]
],
[
[
8340,
8340
],
"mapped",
[
601
]
],
[
[
8341,
8341
],
"mapped",
[
104
]
],
[
[
8342,
8342
],
"mapped",
[
107
]
],
[
[
8343,
8343
],
"mapped",
[
108
]
],
[
[
8344,
8344
],
"mapped",
[
109
]
],
[
[
8345,
8345
],
"mapped",
[
110
]
],
[
[
8346,
8346
],
"mapped",
[
112
]
],
[
[
8347,
8347
],
"mapped",
[
115
]
],
[
[
8348,
8348
],
"mapped",
[
116
]
],
[
[
8349,
8351
],
"disallowed"
],
[
[
8352,
8359
],
"valid",
[
],
"NV8"
],
[
[
8360,
8360
],
"mapped",
[
114,
115
]
],
[
[
8361,
8362
],
"valid",
[
],
"NV8"
],
[
[
8363,
8363
],
"valid",
[
],
"NV8"
],
[
[
8364,
8364
],
"valid",
[
],
"NV8"
],
[
[
8365,
8367
],
"valid",
[
],
"NV8"
],
[
[
8368,
8369
],
"valid",
[
],
"NV8"
],
[
[
8370,
8373
],
"valid",
[
],
"NV8"
],
[
[
8374,
8376
],
"valid",
[
],
"NV8"
],
[
[
8377,
8377
],
"valid",
[
],
"NV8"
],
[
[
8378,
8378
],
"valid",
[
],
"NV8"
],
[
[
8379,
8381
],
"valid",
[
],
"NV8"
],
[
[
8382,
8382
],
"valid",
[
],
"NV8"
],
[
[
8383,
8399
],
"disallowed"
],
[
[
8400,
8417
],
"valid",
[
],
"NV8"
],
[
[
8418,
8419
],
"valid",
[
],
"NV8"
],
[
[
8420,
8426
],
"valid",
[
],
"NV8"
],
[
[
8427,
8427
],
"valid",
[
],
"NV8"
],
[
[
8428,
8431
],
"valid",
[
],
"NV8"
],
[
[
8432,
8432
],
"valid",
[
],
"NV8"
],
[
[
8433,
8447
],
"disallowed"
],
[
[
8448,
8448
],
"disallowed_STD3_mapped",
[
97,
47,
99
]
],
[
[
8449,
8449
],
"disallowed_STD3_mapped",
[
97,
47,
115
]
],
[
[
8450,
8450
],
"mapped",
[
99
]
],
[
[
8451,
8451
],
"mapped",
[
176,
99
]
],
[
[
8452,
8452
],
"valid",
[
],
"NV8"
],
[
[
8453,
8453
],
"disallowed_STD3_mapped",
[
99,
47,
111
]
],
[
[
8454,
8454
],
"disallowed_STD3_mapped",
[
99,
47,
117
]
],
[
[
8455,
8455
],
"mapped",
[
603
]
],
[
[
8456,
8456
],
"valid",
[
],
"NV8"
],
[
[
8457,
8457
],
"mapped",
[
176,
102
]
],
[
[
8458,
8458
],
"mapped",
[
103
]
],
[
[
8459,
8462
],
"mapped",
[
104
]
],
[
[
8463,
8463
],
"mapped",
[
295
]
],
[
[
8464,
8465
],
"mapped",
[
105
]
],
[
[
8466,
8467
],
"mapped",
[
108
]
],
[
[
8468,
8468
],
"valid",
[
],
"NV8"
],
[
[
8469,
8469
],
"mapped",
[
110
]
],
[
[
8470,
8470
],
"mapped",
[
110,
111
]
],
[
[
8471,
8472
],
"valid",
[
],
"NV8"
],
[
[
8473,
8473
],
"mapped",
[
112
]
],
[
[
8474,
8474
],
"mapped",
[
113
]
],
[
[
8475,
8477
],
"mapped",
[
114
]
],
[
[
8478,
8479
],
"valid",
[
],
"NV8"
],
[
[
8480,
8480
],
"mapped",
[
115,
109
]
],
[
[
8481,
8481
],
"mapped",
[
116,
101,
108
]
],
[
[
8482,
8482
],
"mapped",
[
116,
109
]
],
[
[
8483,
8483
],
"valid",
[
],
"NV8"
],
[
[
8484,
8484
],
"mapped",
[
122
]
],
[
[
8485,
8485
],
"valid",
[
],
"NV8"
],
[
[
8486,
8486
],
"mapped",
[
969
]
],
[
[
8487,
8487
],
"valid",
[
],
"NV8"
],
[
[
8488,
8488
],
"mapped",
[
122
]
],
[
[
8489,
8489
],
"valid",
[
],
"NV8"
],
[
[
8490,
8490
],
"mapped",
[
107
]
],
[
[
8491,
8491
],
"mapped",
[
229
]
],
[
[
8492,
8492
],
"mapped",
[
98
]
],
[
[
8493,
8493
],
"mapped",
[
99
]
],
[
[
8494,
8494
],
"valid",
[
],
"NV8"
],
[
[
8495,
8496
],
"mapped",
[
101
]
],
[
[
8497,
8497
],
"mapped",
[
102
]
],
[
[
8498,
8498
],
"disallowed"
],
[
[
8499,
8499
],
"mapped",
[
109
]
],
[
[
8500,
8500
],
"mapped",
[
111
]
],
[
[
8501,
8501
],
"mapped",
[
1488
]
],
[
[
8502,
8502
],
"mapped",
[
1489
]
],
[
[
8503,
8503
],
"mapped",
[
1490
]
],
[
[
8504,
8504
],
"mapped",
[
1491
]
],
[
[
8505,
8505
],
"mapped",
[
105
]
],
[
[
8506,
8506
],
"valid",
[
],
"NV8"
],
[
[
8507,
8507
],
"mapped",
[
102,
97,
120
]
],
[
[
8508,
8508
],
"mapped",
[
960
]
],
[
[
8509,
8510
],
"mapped",
[
947
]
],
[
[
8511,
8511
],
"mapped",
[
960
]
],
[
[
8512,
8512
],
"mapped",
[
8721
]
],
[
[
8513,
8516
],
"valid",
[
],
"NV8"
],
[
[
8517,
8518
],
"mapped",
[
100
]
],
[
[
8519,
8519
],
"mapped",
[
101
]
],
[
[
8520,
8520
],
"mapped",
[
105
]
],
[
[
8521,
8521
],
"mapped",
[
106
]
],
[
[
8522,
8523
],
"valid",
[
],
"NV8"
],
[
[
8524,
8524
],
"valid",
[
],
"NV8"
],
[
[
8525,
8525
],
"valid",
[
],
"NV8"
],
[
[
8526,
8526
],
"valid"
],
[
[
8527,
8527
],
"valid",
[
],
"NV8"
],
[
[
8528,
8528
],
"mapped",
[
49,
8260,
55
]
],
[
[
8529,
8529
],
"mapped",
[
49,
8260,
57
]
],
[
[
8530,
8530
],
"mapped",
[
49,
8260,
49,
48
]
],
[
[
8531,
8531
],
"mapped",
[
49,
8260,
51
]
],
[
[
8532,
8532
],
"mapped",
[
50,
8260,
51
]
],
[
[
8533,
8533
],
"mapped",
[
49,
8260,
53
]
],
[
[
8534,
8534
],
"mapped",
[
50,
8260,
53
]
],
[
[
8535,
8535
],
"mapped",
[
51,
8260,
53
]
],
[
[
8536,
8536
],
"mapped",
[
52,
8260,
53
]
],
[
[
8537,
8537
],
"mapped",
[
49,
8260,
54
]
],
[
[
8538,
8538
],
"mapped",
[
53,
8260,
54
]
],
[
[
8539,
8539
],
"mapped",
[
49,
8260,
56
]
],
[
[
8540,
8540
],
"mapped",
[
51,
8260,
56
]
],
[
[
8541,
8541
],
"mapped",
[
53,
8260,
56
]
],
[
[
8542,
8542
],
"mapped",
[
55,
8260,
56
]
],
[
[
8543,
8543
],
"mapped",
[
49,
8260
]
],
[
[
8544,
8544
],
"mapped",
[
105
]
],
[
[
8545,
8545
],
"mapped",
[
105,
105
]
],
[
[
8546,
8546
],
"mapped",
[
105,
105,
105
]
],
[
[
8547,
8547
],
"mapped",
[
105,
118
]
],
[
[
8548,
8548
],
"mapped",
[
118
]
],
[
[
8549,
8549
],
"mapped",
[
118,
105
]
],
[
[
8550,
8550
],
"mapped",
[
118,
105,
105
]
],
[
[
8551,
8551
],
"mapped",
[
118,
105,
105,
105
]
],
[
[
8552,
8552
],
"mapped",
[
105,
120
]
],
[
[
8553,
8553
],
"mapped",
[
120
]
],
[
[
8554,
8554
],
"mapped",
[
120,
105
]
],
[
[
8555,
8555
],
"mapped",
[
120,
105,
105
]
],
[
[
8556,
8556
],
"mapped",
[
108
]
],
[
[
8557,
8557
],
"mapped",
[
99
]
],
[
[
8558,
8558
],
"mapped",
[
100
]
],
[
[
8559,
8559
],
"mapped",
[
109
]
],
[
[
8560,
8560
],
"mapped",
[
105
]
],
[
[
8561,
8561
],
"mapped",
[
105,
105
]
],
[
[
8562,
8562
],
"mapped",
[
105,
105,
105
]
],
[
[
8563,
8563
],
"mapped",
[
105,
118
]
],
[
[
8564,
8564
],
"mapped",
[
118
]
],
[
[
8565,
8565
],
"mapped",
[
118,
105
]
],
[
[
8566,
8566
],
"mapped",
[
118,
105,
105
]
],
[
[
8567,
8567
],
"mapped",
[
118,
105,
105,
105
]
],
[
[
8568,
8568
],
"mapped",
[
105,
120
]
],
[
[
8569,
8569
],
"mapped",
[
120
]
],
[
[
8570,
8570
],
"mapped",
[
120,
105
]
],
[
[
8571,
8571
],
"mapped",
[
120,
105,
105
]
],
[
[
8572,
8572
],
"mapped",
[
108
]
],
[
[
8573,
8573
],
"mapped",
[
99
]
],
[
[
8574,
8574
],
"mapped",
[
100
]
],
[
[
8575,
8575
],
"mapped",
[
109
]
],
[
[
8576,
8578
],
"valid",
[
],
"NV8"
],
[
[
8579,
8579
],
"disallowed"
],
[
[
8580,
8580
],
"valid"
],
[
[
8581,
8584
],
"valid",
[
],
"NV8"
],
[
[
8585,
8585
],
"mapped",
[
48,
8260,
51
]
],
[
[
8586,
8587
],
"valid",
[
],
"NV8"
],
[
[
8588,
8591
],
"disallowed"
],
[
[
8592,
8682
],
"valid",
[
],
"NV8"
],
[
[
8683,
8691
],
"valid",
[
],
"NV8"
],
[
[
8692,
8703
],
"valid",
[
],
"NV8"
],
[
[
8704,
8747
],
"valid",
[
],
"NV8"
],
[
[
8748,
8748
],
"mapped",
[
8747,
8747
]
],
[
[
8749,
8749
],
"mapped",
[
8747,
8747,
8747
]
],
[
[
8750,
8750
],
"valid",
[
],
"NV8"
],
[
[
8751,
8751
],
"mapped",
[
8750,
8750
]
],
[
[
8752,
8752
],
"mapped",
[
8750,
8750,
8750
]
],
[
[
8753,
8799
],
"valid",
[
],
"NV8"
],
[
[
8800,
8800
],
"disallowed_STD3_valid"
],
[
[
8801,
8813
],
"valid",
[
],
"NV8"
],
[
[
8814,
8815
],
"disallowed_STD3_valid"
],
[
[
8816,
8945
],
"valid",
[
],
"NV8"
],
[
[
8946,
8959
],
"valid",
[
],
"NV8"
],
[
[
8960,
8960
],
"valid",
[
],
"NV8"
],
[
[
8961,
8961
],
"valid",
[
],
"NV8"
],
[
[
8962,
9000
],
"valid",
[
],
"NV8"
],
[
[
9001,
9001
],
"mapped",
[
12296
]
],
[
[
9002,
9002
],
"mapped",
[
12297
]
],
[
[
9003,
9082
],
"valid",
[
],
"NV8"
],
[
[
9083,
9083
],
"valid",
[
],
"NV8"
],
[
[
9084,
9084
],
"valid",
[
],
"NV8"
],
[
[
9085,
9114
],
"valid",
[
],
"NV8"
],
[
[
9115,
9166
],
"valid",
[
],
"NV8"
],
[
[
9167,
9168
],
"valid",
[
],
"NV8"
],
[
[
9169,
9179
],
"valid",
[
],
"NV8"
],
[
[
9180,
9191
],
"valid",
[
],
"NV8"
],
[
[
9192,
9192
],
"valid",
[
],
"NV8"
],
[
[
9193,
9203
],
"valid",
[
],
"NV8"
],
[
[
9204,
9210
],
"valid",
[
],
"NV8"
],
[
[
9211,
9215
],
"disallowed"
],
[
[
9216,
9252
],
"valid",
[
],
"NV8"
],
[
[
9253,
9254
],
"valid",
[
],
"NV8"
],
[
[
9255,
9279
],
"disallowed"
],
[
[
9280,
9290
],
"valid",
[
],
"NV8"
],
[
[
9291,
9311
],
"disallowed"
],
[
[
9312,
9312
],
"mapped",
[
49
]
],
[
[
9313,
9313
],
"mapped",
[
50
]
],
[
[
9314,
9314
],
"mapped",
[
51
]
],
[
[
9315,
9315
],
"mapped",
[
52
]
],
[
[
9316,
9316
],
"mapped",
[
53
]
],
[
[
9317,
9317
],
"mapped",
[
54
]
],
[
[
9318,
9318
],
"mapped",
[
55
]
],
[
[
9319,
9319
],
"mapped",
[
56
]
],
[
[
9320,
9320
],
"mapped",
[
57
]
],
[
[
9321,
9321
],
"mapped",
[
49,
48
]
],
[
[
9322,
9322
],
"mapped",
[
49,
49
]
],
[
[
9323,
9323
],
"mapped",
[
49,
50
]
],
[
[
9324,
9324
],
"mapped",
[
49,
51
]
],
[
[
9325,
9325
],
"mapped",
[
49,
52
]
],
[
[
9326,
9326
],
"mapped",
[
49,
53
]
],
[
[
9327,
9327
],
"mapped",
[
49,
54
]
],
[
[
9328,
9328
],
"mapped",
[
49,
55
]
],
[
[
9329,
9329
],
"mapped",
[
49,
56
]
],
[
[
9330,
9330
],
"mapped",
[
49,
57
]
],
[
[
9331,
9331
],
"mapped",
[
50,
48
]
],
[
[
9332,
9332
],
"disallowed_STD3_mapped",
[
40,
49,
41
]
],
[
[
9333,
9333
],
"disallowed_STD3_mapped",
[
40,
50,
41
]
],
[
[
9334,
9334
],
"disallowed_STD3_mapped",
[
40,
51,
41
]
],
[
[
9335,
9335
],
"disallowed_STD3_mapped",
[
40,
52,
41
]
],
[
[
9336,
9336
],
"disallowed_STD3_mapped",
[
40,
53,
41
]
],
[
[
9337,
9337
],
"disallowed_STD3_mapped",
[
40,
54,
41
]
],
[
[
9338,
9338
],
"disallowed_STD3_mapped",
[
40,
55,
41
]
],
[
[
9339,
9339
],
"disallowed_STD3_mapped",
[
40,
56,
41
]
],
[
[
9340,
9340
],
"disallowed_STD3_mapped",
[
40,
57,
41
]
],
[
[
9341,
9341
],
"disallowed_STD3_mapped",
[
40,
49,
48,
41
]
],
[
[
9342,
9342
],
"disallowed_STD3_mapped",
[
40,
49,
49,
41
]
],
[
[
9343,
9343
],
"disallowed_STD3_mapped",
[
40,
49,
50,
41
]
],
[
[
9344,
9344
],
"disallowed_STD3_mapped",
[
40,
49,
51,
41
]
],
[
[
9345,
9345
],
"disallowed_STD3_mapped",
[
40,
49,
52,
41
]
],
[
[
9346,
9346
],
"disallowed_STD3_mapped",
[
40,
49,
53,
41
]
],
[
[
9347,
9347
],
"disallowed_STD3_mapped",
[
40,
49,
54,
41
]
],
[
[
9348,
9348
],
"disallowed_STD3_mapped",
[
40,
49,
55,
41
]
],
[
[
9349,
9349
],
"disallowed_STD3_mapped",
[
40,
49,
56,
41
]
],
[
[
9350,
9350
],
"disallowed_STD3_mapped",
[
40,
49,
57,
41
]
],
[
[
9351,
9351
],
"disallowed_STD3_mapped",
[
40,
50,
48,
41
]
],
[
[
9352,
9371
],
"disallowed"
],
[
[
9372,
9372
],
"disallowed_STD3_mapped",
[
40,
97,
41
]
],
[
[
9373,
9373
],
"disallowed_STD3_mapped",
[
40,
98,
41
]
],
[
[
9374,
9374
],
"disallowed_STD3_mapped",
[
40,
99,
41
]
],
[
[
9375,
9375
],
"disallowed_STD3_mapped",
[
40,
100,
41
]
],
[
[
9376,
9376
],
"disallowed_STD3_mapped",
[
40,
101,
41
]
],
[
[
9377,
9377
],
"disallowed_STD3_mapped",
[
40,
102,
41
]
],
[
[
9378,
9378
],
"disallowed_STD3_mapped",
[
40,
103,
41
]
],
[
[
9379,
9379
],
"disallowed_STD3_mapped",
[
40,
104,
41
]
],
[
[
9380,
9380
],
"disallowed_STD3_mapped",
[
40,
105,
41
]
],
[
[
9381,
9381
],
"disallowed_STD3_mapped",
[
40,
106,
41
]
],
[
[
9382,
9382
],
"disallowed_STD3_mapped",
[
40,
107,
41
]
],
[
[
9383,
9383
],
"disallowed_STD3_mapped",
[
40,
108,
41
]
],
[
[
9384,
9384
],
"disallowed_STD3_mapped",
[
40,
109,
41
]
],
[
[
9385,
9385
],
"disallowed_STD3_mapped",
[
40,
110,
41
]
],
[
[
9386,
9386
],
"disallowed_STD3_mapped",
[
40,
111,
41
]
],
[
[
9387,
9387
],
"disallowed_STD3_mapped",
[
40,
112,
41
]
],
[
[
9388,
9388
],
"disallowed_STD3_mapped",
[
40,
113,
41
]
],
[
[
9389,
9389
],
"disallowed_STD3_mapped",
[
40,
114,
41
]
],
[
[
9390,
9390
],
"disallowed_STD3_mapped",
[
40,
115,
41
]
],
[
[
9391,
9391
],
"disallowed_STD3_mapped",
[
40,
116,
41
]
],
[
[
9392,
9392
],
"disallowed_STD3_mapped",
[
40,
117,
41
]
],
[
[
9393,
9393
],
"disallowed_STD3_mapped",
[
40,
118,
41
]
],
[
[
9394,
9394
],
"disallowed_STD3_mapped",
[
40,
119,
41
]
],
[
[
9395,
9395
],
"disallowed_STD3_mapped",
[
40,
120,
41
]
],
[
[
9396,
9396
],
"disallowed_STD3_mapped",
[
40,
121,
41
]
],
[
[
9397,
9397
],
"disallowed_STD3_mapped",
[
40,
122,
41
]
],
[
[
9398,
9398
],
"mapped",
[
97
]
],
[
[
9399,
9399
],
"mapped",
[
98
]
],
[
[
9400,
9400
],
"mapped",
[
99
]
],
[
[
9401,
9401
],
"mapped",
[
100
]
],
[
[
9402,
9402
],
"mapped",
[
101
]
],
[
[
9403,
9403
],
"mapped",
[
102
]
],
[
[
9404,
9404
],
"mapped",
[
103
]
],
[
[
9405,
9405
],
"mapped",
[
104
]
],
[
[
9406,
9406
],
"mapped",
[
105
]
],
[
[
9407,
9407
],
"mapped",
[
106
]
],
[
[
9408,
9408
],
"mapped",
[
107
]
],
[
[
9409,
9409
],
"mapped",
[
108
]
],
[
[
9410,
9410
],
"mapped",
[
109
]
],
[
[
9411,
9411
],
"mapped",
[
110
]
],
[
[
9412,
9412
],
"mapped",
[
111
]
],
[
[
9413,
9413
],
"mapped",
[
112
]
],
[
[
9414,
9414
],
"mapped",
[
113
]
],
[
[
9415,
9415
],
"mapped",
[
114
]
],
[
[
9416,
9416
],
"mapped",
[
115
]
],
[
[
9417,
9417
],
"mapped",
[
116
]
],
[
[
9418,
9418
],
"mapped",
[
117
]
],
[
[
9419,
9419
],
"mapped",
[
118
]
],
[
[
9420,
9420
],
"mapped",
[
119
]
],
[
[
9421,
9421
],
"mapped",
[
120
]
],
[
[
9422,
9422
],
"mapped",
[
121
]
],
[
[
9423,
9423
],
"mapped",
[
122
]
],
[
[
9424,
9424
],
"mapped",
[
97
]
],
[
[
9425,
9425
],
"mapped",
[
98
]
],
[
[
9426,
9426
],
"mapped",
[
99
]
],
[
[
9427,
9427
],
"mapped",
[
100
]
],
[
[
9428,
9428
],
"mapped",
[
101
]
],
[
[
9429,
9429
],
"mapped",
[
102
]
],
[
[
9430,
9430
],
"mapped",
[
103
]
],
[
[
9431,
9431
],
"mapped",
[
104
]
],
[
[
9432,
9432
],
"mapped",
[
105
]
],
[
[
9433,
9433
],
"mapped",
[
106
]
],
[
[
9434,
9434
],
"mapped",
[
107
]
],
[
[
9435,
9435
],
"mapped",
[
108
]
],
[
[
9436,
9436
],
"mapped",
[
109
]
],
[
[
9437,
9437
],
"mapped",
[
110
]
],
[
[
9438,
9438
],
"mapped",
[
111
]
],
[
[
9439,
9439
],
"mapped",
[
112
]
],
[
[
9440,
9440
],
"mapped",
[
113
]
],
[
[
9441,
9441
],
"mapped",
[
114
]
],
[
[
9442,
9442
],
"mapped",
[
115
]
],
[
[
9443,
9443
],
"mapped",
[
116
]
],
[
[
9444,
9444
],
"mapped",
[
117
]
],
[
[
9445,
9445
],
"mapped",
[
118
]
],
[
[
9446,
9446
],
"mapped",
[
119
]
],
[
[
9447,
9447
],
"mapped",
[
120
]
],
[
[
9448,
9448
],
"mapped",
[
121
]
],
[
[
9449,
9449
],
"mapped",
[
122
]
],
[
[
9450,
9450
],
"mapped",
[
48
]
],
[
[
9451,
9470
],
"valid",
[
],
"NV8"
],
[
[
9471,
9471
],
"valid",
[
],
"NV8"
],
[
[
9472,
9621
],
"valid",
[
],
"NV8"
],
[
[
9622,
9631
],
"valid",
[
],
"NV8"
],
[
[
9632,
9711
],
"valid",
[
],
"NV8"
],
[
[
9712,
9719
],
"valid",
[
],
"NV8"
],
[
[
9720,
9727
],
"valid",
[
],
"NV8"
],
[
[
9728,
9747
],
"valid",
[
],
"NV8"
],
[
[
9748,
9749
],
"valid",
[
],
"NV8"
],
[
[
9750,
9751
],
"valid",
[
],
"NV8"
],
[
[
9752,
9752
],
"valid",
[
],
"NV8"
],
[
[
9753,
9753
],
"valid",
[
],
"NV8"
],
[
[
9754,
9839
],
"valid",
[
],
"NV8"
],
[
[
9840,
9841
],
"valid",
[
],
"NV8"
],
[
[
9842,
9853
],
"valid",
[
],
"NV8"
],
[
[
9854,
9855
],
"valid",
[
],
"NV8"
],
[
[
9856,
9865
],
"valid",
[
],
"NV8"
],
[
[
9866,
9873
],
"valid",
[
],
"NV8"
],
[
[
9874,
9884
],
"valid",
[
],
"NV8"
],
[
[
9885,
9885
],
"valid",
[
],
"NV8"
],
[
[
9886,
9887
],
"valid",
[
],
"NV8"
],
[
[
9888,
9889
],
"valid",
[
],
"NV8"
],
[
[
9890,
9905
],
"valid",
[
],
"NV8"
],
[
[
9906,
9906
],
"valid",
[
],
"NV8"
],
[
[
9907,
9916
],
"valid",
[
],
"NV8"
],
[
[
9917,
9919
],
"valid",
[
],
"NV8"
],
[
[
9920,
9923
],
"valid",
[
],
"NV8"
],
[
[
9924,
9933
],
"valid",
[
],
"NV8"
],
[
[
9934,
9934
],
"valid",
[
],
"NV8"
],
[
[
9935,
9953
],
"valid",
[
],
"NV8"
],
[
[
9954,
9954
],
"valid",
[
],
"NV8"
],
[
[
9955,
9955
],
"valid",
[
],
"NV8"
],
[
[
9956,
9959
],
"valid",
[
],
"NV8"
],
[
[
9960,
9983
],
"valid",
[
],
"NV8"
],
[
[
9984,
9984
],
"valid",
[
],
"NV8"
],
[
[
9985,
9988
],
"valid",
[
],
"NV8"
],
[
[
9989,
9989
],
"valid",
[
],
"NV8"
],
[
[
9990,
9993
],
"valid",
[
],
"NV8"
],
[
[
9994,
9995
],
"valid",
[
],
"NV8"
],
[
[
9996,
10023
],
"valid",
[
],
"NV8"
],
[
[
10024,
10024
],
"valid",
[
],
"NV8"
],
[
[
10025,
10059
],
"valid",
[
],
"NV8"
],
[
[
10060,
10060
],
"valid",
[
],
"NV8"
],
[
[
10061,
10061
],
"valid",
[
],
"NV8"
],
[
[
10062,
10062
],
"valid",
[
],
"NV8"
],
[
[
10063,
10066
],
"valid",
[
],
"NV8"
],
[
[
10067,
10069
],
"valid",
[
],
"NV8"
],
[
[
10070,
10070
],
"valid",
[
],
"NV8"
],
[
[
10071,
10071
],
"valid",
[
],
"NV8"
],
[
[
10072,
10078
],
"valid",
[
],
"NV8"
],
[
[
10079,
10080
],
"valid",
[
],
"NV8"
],
[
[
10081,
10087
],
"valid",
[
],
"NV8"
],
[
[
10088,
10101
],
"valid",
[
],
"NV8"
],
[
[
10102,
10132
],
"valid",
[
],
"NV8"
],
[
[
10133,
10135
],
"valid",
[
],
"NV8"
],
[
[
10136,
10159
],
"valid",
[
],
"NV8"
],
[
[
10160,
10160
],
"valid",
[
],
"NV8"
],
[
[
10161,
10174
],
"valid",
[
],
"NV8"
],
[
[
10175,
10175
],
"valid",
[
],
"NV8"
],
[
[
10176,
10182
],
"valid",
[
],
"NV8"
],
[
[
10183,
10186
],
"valid",
[
],
"NV8"
],
[
[
10187,
10187
],
"valid",
[
],
"NV8"
],
[
[
10188,
10188
],
"valid",
[
],
"NV8"
],
[
[
10189,
10189
],
"valid",
[
],
"NV8"
],
[
[
10190,
10191
],
"valid",
[
],
"NV8"
],
[
[
10192,
10219
],
"valid",
[
],
"NV8"
],
[
[
10220,
10223
],
"valid",
[
],
"NV8"
],
[
[
10224,
10239
],
"valid",
[
],
"NV8"
],
[
[
10240,
10495
],
"valid",
[
],
"NV8"
],
[
[
10496,
10763
],
"valid",
[
],
"NV8"
],
[
[
10764,
10764
],
"mapped",
[
8747,
8747,
8747,
8747
]
],
[
[
10765,
10867
],
"valid",
[
],
"NV8"
],
[
[
10868,
10868
],
"disallowed_STD3_mapped",
[
58,
58,
61
]
],
[
[
10869,
10869
],
"disallowed_STD3_mapped",
[
61,
61
]
],
[
[
10870,
10870
],
"disallowed_STD3_mapped",
[
61,
61,
61
]
],
[
[
10871,
10971
],
"valid",
[
],
"NV8"
],
[
[
10972,
10972
],
"mapped",
[
10973,
824
]
],
[
[
10973,
11007
],
"valid",
[
],
"NV8"
],
[
[
11008,
11021
],
"valid",
[
],
"NV8"
],
[
[
11022,
11027
],
"valid",
[
],
"NV8"
],
[
[
11028,
11034
],
"valid",
[
],
"NV8"
],
[
[
11035,
11039
],
"valid",
[
],
"NV8"
],
[
[
11040,
11043
],
"valid",
[
],
"NV8"
],
[
[
11044,
11084
],
"valid",
[
],
"NV8"
],
[
[
11085,
11087
],
"valid",
[
],
"NV8"
],
[
[
11088,
11092
],
"valid",
[
],
"NV8"
],
[
[
11093,
11097
],
"valid",
[
],
"NV8"
],
[
[
11098,
11123
],
"valid",
[
],
"NV8"
],
[
[
11124,
11125
],
"disallowed"
],
[
[
11126,
11157
],
"valid",
[
],
"NV8"
],
[
[
11158,
11159
],
"disallowed"
],
[
[
11160,
11193
],
"valid",
[
],
"NV8"
],
[
[
11194,
11196
],
"disallowed"
],
[
[
11197,
11208
],
"valid",
[
],
"NV8"
],
[
[
11209,
11209
],
"disallowed"
],
[
[
11210,
11217
],
"valid",
[
],
"NV8"
],
[
[
11218,
11243
],
"disallowed"
],
[
[
11244,
11247
],
"valid",
[
],
"NV8"
],
[
[
11248,
11263
],
"disallowed"
],
[
[
11264,
11264
],
"mapped",
[
11312
]
],
[
[
11265,
11265
],
"mapped",
[
11313
]
],
[
[
11266,
11266
],
"mapped",
[
11314
]
],
[
[
11267,
11267
],
"mapped",
[
11315
]
],
[
[
11268,
11268
],
"mapped",
[
11316
]
],
[
[
11269,
11269
],
"mapped",
[
11317
]
],
[
[
11270,
11270
],
"mapped",
[
11318
]
],
[
[
11271,
11271
],
"mapped",
[
11319
]
],
[
[
11272,
11272
],
"mapped",
[
11320
]
],
[
[
11273,
11273
],
"mapped",
[
11321
]
],
[
[
11274,
11274
],
"mapped",
[
11322
]
],
[
[
11275,
11275
],
"mapped",
[
11323
]
],
[
[
11276,
11276
],
"mapped",
[
11324
]
],
[
[
11277,
11277
],
"mapped",
[
11325
]
],
[
[
11278,
11278
],
"mapped",
[
11326
]
],
[
[
11279,
11279
],
"mapped",
[
11327
]
],
[
[
11280,
11280
],
"mapped",
[
11328
]
],
[
[
11281,
11281
],
"mapped",
[
11329
]
],
[
[
11282,
11282
],
"mapped",
[
11330
]
],
[
[
11283,
11283
],
"mapped",
[
11331
]
],
[
[
11284,
11284
],
"mapped",
[
11332
]
],
[
[
11285,
11285
],
"mapped",
[
11333
]
],
[
[
11286,
11286
],
"mapped",
[
11334
]
],
[
[
11287,
11287
],
"mapped",
[
11335
]
],
[
[
11288,
11288
],
"mapped",
[
11336
]
],
[
[
11289,
11289
],
"mapped",
[
11337
]
],
[
[
11290,
11290
],
"mapped",
[
11338
]
],
[
[
11291,
11291
],
"mapped",
[
11339
]
],
[
[
11292,
11292
],
"mapped",
[
11340
]
],
[
[
11293,
11293
],
"mapped",
[
11341
]
],
[
[
11294,
11294
],
"mapped",
[
11342
]
],
[
[
11295,
11295
],
"mapped",
[
11343
]
],
[
[
11296,
11296
],
"mapped",
[
11344
]
],
[
[
11297,
11297
],
"mapped",
[
11345
]
],
[
[
11298,
11298
],
"mapped",
[
11346
]
],
[
[
11299,
11299
],
"mapped",
[
11347
]
],
[
[
11300,
11300
],
"mapped",
[
11348
]
],
[
[
11301,
11301
],
"mapped",
[
11349
]
],
[
[
11302,
11302
],
"mapped",
[
11350
]
],
[
[
11303,
11303
],
"mapped",
[
11351
]
],
[
[
11304,
11304
],
"mapped",
[
11352
]
],
[
[
11305,
11305
],
"mapped",
[
11353
]
],
[
[
11306,
11306
],
"mapped",
[
11354
]
],
[
[
11307,
11307
],
"mapped",
[
11355
]
],
[
[
11308,
11308
],
"mapped",
[
11356
]
],
[
[
11309,
11309
],
"mapped",
[
11357
]
],
[
[
11310,
11310
],
"mapped",
[
11358
]
],
[
[
11311,
11311
],
"disallowed"
],
[
[
11312,
11358
],
"valid"
],
[
[
11359,
11359
],
"disallowed"
],
[
[
11360,
11360
],
"mapped",
[
11361
]
],
[
[
11361,
11361
],
"valid"
],
[
[
11362,
11362
],
"mapped",
[
619
]
],
[
[
11363,
11363
],
"mapped",
[
7549
]
],
[
[
11364,
11364
],
"mapped",
[
637
]
],
[
[
11365,
11366
],
"valid"
],
[
[
11367,
11367
],
"mapped",
[
11368
]
],
[
[
11368,
11368
],
"valid"
],
[
[
11369,
11369
],
"mapped",
[
11370
]
],
[
[
11370,
11370
],
"valid"
],
[
[
11371,
11371
],
"mapped",
[
11372
]
],
[
[
11372,
11372
],
"valid"
],
[
[
11373,
11373
],
"mapped",
[
593
]
],
[
[
11374,
11374
],
"mapped",
[
625
]
],
[
[
11375,
11375
],
"mapped",
[
592
]
],
[
[
11376,
11376
],
"mapped",
[
594
]
],
[
[
11377,
11377
],
"valid"
],
[
[
11378,
11378
],
"mapped",
[
11379
]
],
[
[
11379,
11379
],
"valid"
],
[
[
11380,
11380
],
"valid"
],
[
[
11381,
11381
],
"mapped",
[
11382
]
],
[
[
11382,
11383
],
"valid"
],
[
[
11384,
11387
],
"valid"
],
[
[
11388,
11388
],
"mapped",
[
106
]
],
[
[
11389,
11389
],
"mapped",
[
118
]
],
[
[
11390,
11390
],
"mapped",
[
575
]
],
[
[
11391,
11391
],
"mapped",
[
576
]
],
[
[
11392,
11392
],
"mapped",
[
11393
]
],
[
[
11393,
11393
],
"valid"
],
[
[
11394,
11394
],
"mapped",
[
11395
]
],
[
[
11395,
11395
],
"valid"
],
[
[
11396,
11396
],
"mapped",
[
11397
]
],
[
[
11397,
11397
],
"valid"
],
[
[
11398,
11398
],
"mapped",
[
11399
]
],
[
[
11399,
11399
],
"valid"
],
[
[
11400,
11400
],
"mapped",
[
11401
]
],
[
[
11401,
11401
],
"valid"
],
[
[
11402,
11402
],
"mapped",
[
11403
]
],
[
[
11403,
11403
],
"valid"
],
[
[
11404,
11404
],
"mapped",
[
11405
]
],
[
[
11405,
11405
],
"valid"
],
[
[
11406,
11406
],
"mapped",
[
11407
]
],
[
[
11407,
11407
],
"valid"
],
[
[
11408,
11408
],
"mapped",
[
11409
]
],
[
[
11409,
11409
],
"valid"
],
[
[
11410,
11410
],
"mapped",
[
11411
]
],
[
[
11411,
11411
],
"valid"
],
[
[
11412,
11412
],
"mapped",
[
11413
]
],
[
[
11413,
11413
],
"valid"
],
[
[
11414,
11414
],
"mapped",
[
11415
]
],
[
[
11415,
11415
],
"valid"
],
[
[
11416,
11416
],
"mapped",
[
11417
]
],
[
[
11417,
11417
],
"valid"
],
[
[
11418,
11418
],
"mapped",
[
11419
]
],
[
[
11419,
11419
],
"valid"
],
[
[
11420,
11420
],
"mapped",
[
11421
]
],
[
[
11421,
11421
],
"valid"
],
[
[
11422,
11422
],
"mapped",
[
11423
]
],
[
[
11423,
11423
],
"valid"
],
[
[
11424,
11424
],
"mapped",
[
11425
]
],
[
[
11425,
11425
],
"valid"
],
[
[
11426,
11426
],
"mapped",
[
11427
]
],
[
[
11427,
11427
],
"valid"
],
[
[
11428,
11428
],
"mapped",
[
11429
]
],
[
[
11429,
11429
],
"valid"
],
[
[
11430,
11430
],
"mapped",
[
11431
]
],
[
[
11431,
11431
],
"valid"
],
[
[
11432,
11432
],
"mapped",
[
11433
]
],
[
[
11433,
11433
],
"valid"
],
[
[
11434,
11434
],
"mapped",
[
11435
]
],
[
[
11435,
11435
],
"valid"
],
[
[
11436,
11436
],
"mapped",
[
11437
]
],
[
[
11437,
11437
],
"valid"
],
[
[
11438,
11438
],
"mapped",
[
11439
]
],
[
[
11439,
11439
],
"valid"
],
[
[
11440,
11440
],
"mapped",
[
11441
]
],
[
[
11441,
11441
],
"valid"
],
[
[
11442,
11442
],
"mapped",
[
11443
]
],
[
[
11443,
11443
],
"valid"
],
[
[
11444,
11444
],
"mapped",
[
11445
]
],
[
[
11445,
11445
],
"valid"
],
[
[
11446,
11446
],
"mapped",
[
11447
]
],
[
[
11447,
11447
],
"valid"
],
[
[
11448,
11448
],
"mapped",
[
11449
]
],
[
[
11449,
11449
],
"valid"
],
[
[
11450,
11450
],
"mapped",
[
11451
]
],
[
[
11451,
11451
],
"valid"
],
[
[
11452,
11452
],
"mapped",
[
11453
]
],
[
[
11453,
11453
],
"valid"
],
[
[
11454,
11454
],
"mapped",
[
11455
]
],
[
[
11455,
11455
],
"valid"
],
[
[
11456,
11456
],
"mapped",
[
11457
]
],
[
[
11457,
11457
],
"valid"
],
[
[
11458,
11458
],
"mapped",
[
11459
]
],
[
[
11459,
11459
],
"valid"
],
[
[
11460,
11460
],
"mapped",
[
11461
]
],
[
[
11461,
11461
],
"valid"
],
[
[
11462,
11462
],
"mapped",
[
11463
]
],
[
[
11463,
11463
],
"valid"
],
[
[
11464,
11464
],
"mapped",
[
11465
]
],
[
[
11465,
11465
],
"valid"
],
[
[
11466,
11466
],
"mapped",
[
11467
]
],
[
[
11467,
11467
],
"valid"
],
[
[
11468,
11468
],
"mapped",
[
11469
]
],
[
[
11469,
11469
],
"valid"
],
[
[
11470,
11470
],
"mapped",
[
11471
]
],
[
[
11471,
11471
],
"valid"
],
[
[
11472,
11472
],
"mapped",
[
11473
]
],
[
[
11473,
11473
],
"valid"
],
[
[
11474,
11474
],
"mapped",
[
11475
]
],
[
[
11475,
11475
],
"valid"
],
[
[
11476,
11476
],
"mapped",
[
11477
]
],
[
[
11477,
11477
],
"valid"
],
[
[
11478,
11478
],
"mapped",
[
11479
]
],
[
[
11479,
11479
],
"valid"
],
[
[
11480,
11480
],
"mapped",
[
11481
]
],
[
[
11481,
11481
],
"valid"
],
[
[
11482,
11482
],
"mapped",
[
11483
]
],
[
[
11483,
11483
],
"valid"
],
[
[
11484,
11484
],
"mapped",
[
11485
]
],
[
[
11485,
11485
],
"valid"
],
[
[
11486,
11486
],
"mapped",
[
11487
]
],
[
[
11487,
11487
],
"valid"
],
[
[
11488,
11488
],
"mapped",
[
11489
]
],
[
[
11489,
11489
],
"valid"
],
[
[
11490,
11490
],
"mapped",
[
11491
]
],
[
[
11491,
11492
],
"valid"
],
[
[
11493,
11498
],
"valid",
[
],
"NV8"
],
[
[
11499,
11499
],
"mapped",
[
11500
]
],
[
[
11500,
11500
],
"valid"
],
[
[
11501,
11501
],
"mapped",
[
11502
]
],
[
[
11502,
11505
],
"valid"
],
[
[
11506,
11506
],
"mapped",
[
11507
]
],
[
[
11507,
11507
],
"valid"
],
[
[
11508,
11512
],
"disallowed"
],
[
[
11513,
11519
],
"valid",
[
],
"NV8"
],
[
[
11520,
11557
],
"valid"
],
[
[
11558,
11558
],
"disallowed"
],
[
[
11559,
11559
],
"valid"
],
[
[
11560,
11564
],
"disallowed"
],
[
[
11565,
11565
],
"valid"
],
[
[
11566,
11567
],
"disallowed"
],
[
[
11568,
11621
],
"valid"
],
[
[
11622,
11623
],
"valid"
],
[
[
11624,
11630
],
"disallowed"
],
[
[
11631,
11631
],
"mapped",
[
11617
]
],
[
[
11632,
11632
],
"valid",
[
],
"NV8"
],
[
[
11633,
11646
],
"disallowed"
],
[
[
11647,
11647
],
"valid"
],
[
[
11648,
11670
],
"valid"
],
[
[
11671,
11679
],
"disallowed"
],
[
[
11680,
11686
],
"valid"
],
[
[
11687,
11687
],
"disallowed"
],
[
[
11688,
11694
],
"valid"
],
[
[
11695,
11695
],
"disallowed"
],
[
[
11696,
11702
],
"valid"
],
[
[
11703,
11703
],
"disallowed"
],
[
[
11704,
11710
],
"valid"
],
[
[
11711,
11711
],
"disallowed"
],
[
[
11712,
11718
],
"valid"
],
[
[
11719,
11719
],
"disallowed"
],
[
[
11720,
11726
],
"valid"
],
[
[
11727,
11727
],
"disallowed"
],
[
[
11728,
11734
],
"valid"
],
[
[
11735,
11735
],
"disallowed"
],
[
[
11736,
11742
],
"valid"
],
[
[
11743,
11743
],
"disallowed"
],
[
[
11744,
11775
],
"valid"
],
[
[
11776,
11799
],
"valid",
[
],
"NV8"
],
[
[
11800,
11803
],
"valid",
[
],
"NV8"
],
[
[
11804,
11805
],
"valid",
[
],
"NV8"
],
[
[
11806,
11822
],
"valid",
[
],
"NV8"
],
[
[
11823,
11823
],
"valid"
],
[
[
11824,
11824
],
"valid",
[
],
"NV8"
],
[
[
11825,
11825
],
"valid",
[
],
"NV8"
],
[
[
11826,
11835
],
"valid",
[
],
"NV8"
],
[
[
11836,
11842
],
"valid",
[
],
"NV8"
],
[
[
11843,
11903
],
"disallowed"
],
[
[
11904,
11929
],
"valid",
[
],
"NV8"
],
[
[
11930,
11930
],
"disallowed"
],
[
[
11931,
11934
],
"valid",
[
],
"NV8"
],
[
[
11935,
11935
],
"mapped",
[
27597
]
],
[
[
11936,
12018
],
"valid",
[
],
"NV8"
],
[
[
12019,
12019
],
"mapped",
[
40863
]
],
[
[
12020,
12031
],
"disallowed"
],
[
[
12032,
12032
],
"mapped",
[
19968
]
],
[
[
12033,
12033
],
"mapped",
[
20008
]
],
[
[
12034,
12034
],
"mapped",
[
20022
]
],
[
[
12035,
12035
],
"mapped",
[
20031
]
],
[
[
12036,
12036
],
"mapped",
[
20057
]
],
[
[
12037,
12037
],
"mapped",
[
20101
]
],
[
[
12038,
12038
],
"mapped",
[
20108
]
],
[
[
12039,
12039
],
"mapped",
[
20128
]
],
[
[
12040,
12040
],
"mapped",
[
20154
]
],
[
[
12041,
12041
],
"mapped",
[
20799
]
],
[
[
12042,
12042
],
"mapped",
[
20837
]
],
[
[
12043,
12043
],
"mapped",
[
20843
]
],
[
[
12044,
12044
],
"mapped",
[
20866
]
],
[
[
12045,
12045
],
"mapped",
[
20886
]
],
[
[
12046,
12046
],
"mapped",
[
20907
]
],
[
[
12047,
12047
],
"mapped",
[
20960
]
],
[
[
12048,
12048
],
"mapped",
[
20981
]
],
[
[
12049,
12049
],
"mapped",
[
20992
]
],
[
[
12050,
12050
],
"mapped",
[
21147
]
],
[
[
12051,
12051
],
"mapped",
[
21241
]
],
[
[
12052,
12052
],
"mapped",
[
21269
]
],
[
[
12053,
12053
],
"mapped",
[
21274
]
],
[
[
12054,
12054
],
"mapped",
[
21304
]
],
[
[
12055,
12055
],
"mapped",
[
21313
]
],
[
[
12056,
12056
],
"mapped",
[
21340
]
],
[
[
12057,
12057
],
"mapped",
[
21353
]
],
[
[
12058,
12058
],
"mapped",
[
21378
]
],
[
[
12059,
12059
],
"mapped",
[
21430
]
],
[
[
12060,
12060
],
"mapped",
[
21448
]
],
[
[
12061,
12061
],
"mapped",
[
21475
]
],
[
[
12062,
12062
],
"mapped",
[
22231
]
],
[
[
12063,
12063
],
"mapped",
[
22303
]
],
[
[
12064,
12064
],
"mapped",
[
22763
]
],
[
[
12065,
12065
],
"mapped",
[
22786
]
],
[
[
12066,
12066
],
"mapped",
[
22794
]
],
[
[
12067,
12067
],
"mapped",
[
22805
]
],
[
[
12068,
12068
],
"mapped",
[
22823
]
],
[
[
12069,
12069
],
"mapped",
[
22899
]
],
[
[
12070,
12070
],
"mapped",
[
23376
]
],
[
[
12071,
12071
],
"mapped",
[
23424
]
],
[
[
12072,
12072
],
"mapped",
[
23544
]
],
[
[
12073,
12073
],
"mapped",
[
23567
]
],
[
[
12074,
12074
],
"mapped",
[
23586
]
],
[
[
12075,
12075
],
"mapped",
[
23608
]
],
[
[
12076,
12076
],
"mapped",
[
23662
]
],
[
[
12077,
12077
],
"mapped",
[
23665
]
],
[
[
12078,
12078
],
"mapped",
[
24027
]
],
[
[
12079,
12079
],
"mapped",
[
24037
]
],
[
[
12080,
12080
],
"mapped",
[
24049
]
],
[
[
12081,
12081
],
"mapped",
[
24062
]
],
[
[
12082,
12082
],
"mapped",
[
24178
]
],
[
[
12083,
12083
],
"mapped",
[
24186
]
],
[
[
12084,
12084
],
"mapped",
[
24191
]
],
[
[
12085,
12085
],
"mapped",
[
24308
]
],
[
[
12086,
12086
],
"mapped",
[
24318
]
],
[
[
12087,
12087
],
"mapped",
[
24331
]
],
[
[
12088,
12088
],
"mapped",
[
24339
]
],
[
[
12089,
12089
],
"mapped",
[
24400
]
],
[
[
12090,
12090
],
"mapped",
[
24417
]
],
[
[
12091,
12091
],
"mapped",
[
24435
]
],
[
[
12092,
12092
],
"mapped",
[
24515
]
],
[
[
12093,
12093
],
"mapped",
[
25096
]
],
[
[
12094,
12094
],
"mapped",
[
25142
]
],
[
[
12095,
12095
],
"mapped",
[
25163
]
],
[
[
12096,
12096
],
"mapped",
[
25903
]
],
[
[
12097,
12097
],
"mapped",
[
25908
]
],
[
[
12098,
12098
],
"mapped",
[
25991
]
],
[
[
12099,
12099
],
"mapped",
[
26007
]
],
[
[
12100,
12100
],
"mapped",
[
26020
]
],
[
[
12101,
12101
],
"mapped",
[
26041
]
],
[
[
12102,
12102
],
"mapped",
[
26080
]
],
[
[
12103,
12103
],
"mapped",
[
26085
]
],
[
[
12104,
12104
],
"mapped",
[
26352
]
],
[
[
12105,
12105
],
"mapped",
[
26376
]
],
[
[
12106,
12106
],
"mapped",
[
26408
]
],
[
[
12107,
12107
],
"mapped",
[
27424
]
],
[
[
12108,
12108
],
"mapped",
[
27490
]
],
[
[
12109,
12109
],
"mapped",
[
27513
]
],
[
[
12110,
12110
],
"mapped",
[
27571
]
],
[
[
12111,
12111
],
"mapped",
[
27595
]
],
[
[
12112,
12112
],
"mapped",
[
27604
]
],
[
[
12113,
12113
],
"mapped",
[
27611
]
],
[
[
12114,
12114
],
"mapped",
[
27663
]
],
[
[
12115,
12115
],
"mapped",
[
27668
]
],
[
[
12116,
12116
],
"mapped",
[
27700
]
],
[
[
12117,
12117
],
"mapped",
[
28779
]
],
[
[
12118,
12118
],
"mapped",
[
29226
]
],
[
[
12119,
12119
],
"mapped",
[
29238
]
],
[
[
12120,
12120
],
"mapped",
[
29243
]
],
[
[
12121,
12121
],
"mapped",
[
29247
]
],
[
[
12122,
12122
],
"mapped",
[
29255
]
],
[
[
12123,
12123
],
"mapped",
[
29273
]
],
[
[
12124,
12124
],
"mapped",
[
29275
]
],
[
[
12125,
12125
],
"mapped",
[
29356
]
],
[
[
12126,
12126
],
"mapped",
[
29572
]
],
[
[
12127,
12127
],
"mapped",
[
29577
]
],
[
[
12128,
12128
],
"mapped",
[
29916
]
],
[
[
12129,
12129
],
"mapped",
[
29926
]
],
[
[
12130,
12130
],
"mapped",
[
29976
]
],
[
[
12131,
12131
],
"mapped",
[
29983
]
],
[
[
12132,
12132
],
"mapped",
[
29992
]
],
[
[
12133,
12133
],
"mapped",
[
30000
]
],
[
[
12134,
12134
],
"mapped",
[
30091
]
],
[
[
12135,
12135
],
"mapped",
[
30098
]
],
[
[
12136,
12136
],
"mapped",
[
30326
]
],
[
[
12137,
12137
],
"mapped",
[
30333
]
],
[
[
12138,
12138
],
"mapped",
[
30382
]
],
[
[
12139,
12139
],
"mapped",
[
30399
]
],
[
[
12140,
12140
],
"mapped",
[
30446
]
],
[
[
12141,
12141
],
"mapped",
[
30683
]
],
[
[
12142,
12142
],
"mapped",
[
30690
]
],
[
[
12143,
12143
],
"mapped",
[
30707
]
],
[
[
12144,
12144
],
"mapped",
[
31034
]
],
[
[
12145,
12145
],
"mapped",
[
31160
]
],
[
[
12146,
12146
],
"mapped",
[
31166
]
],
[
[
12147,
12147
],
"mapped",
[
31348
]
],
[
[
12148,
12148
],
"mapped",
[
31435
]
],
[
[
12149,
12149
],
"mapped",
[
31481
]
],
[
[
12150,
12150
],
"mapped",
[
31859
]
],
[
[
12151,
12151
],
"mapped",
[
31992
]
],
[
[
12152,
12152
],
"mapped",
[
32566
]
],
[
[
12153,
12153
],
"mapped",
[
32593
]
],
[
[
12154,
12154
],
"mapped",
[
32650
]
],
[
[
12155,
12155
],
"mapped",
[
32701
]
],
[
[
12156,
12156
],
"mapped",
[
32769
]
],
[
[
12157,
12157
],
"mapped",
[
32780
]
],
[
[
12158,
12158
],
"mapped",
[
32786
]
],
[
[
12159,
12159
],
"mapped",
[
32819
]
],
[
[
12160,
12160
],
"mapped",
[
32895
]
],
[
[
12161,
12161
],
"mapped",
[
32905
]
],
[
[
12162,
12162
],
"mapped",
[
33251
]
],
[
[
12163,
12163
],
"mapped",
[
33258
]
],
[
[
12164,
12164
],
"mapped",
[
33267
]
],
[
[
12165,
12165
],
"mapped",
[
33276
]
],
[
[
12166,
12166
],
"mapped",
[
33292
]
],
[
[
12167,
12167
],
"mapped",
[
33307
]
],
[
[
12168,
12168
],
"mapped",
[
33311
]
],
[
[
12169,
12169
],
"mapped",
[
33390
]
],
[
[
12170,
12170
],
"mapped",
[
33394
]
],
[
[
12171,
12171
],
"mapped",
[
33400
]
],
[
[
12172,
12172
],
"mapped",
[
34381
]
],
[
[
12173,
12173
],
"mapped",
[
34411
]
],
[
[
12174,
12174
],
"mapped",
[
34880
]
],
[
[
12175,
12175
],
"mapped",
[
34892
]
],
[
[
12176,
12176
],
"mapped",
[
34915
]
],
[
[
12177,
12177
],
"mapped",
[
35198
]
],
[
[
12178,
12178
],
"mapped",
[
35211
]
],
[
[
12179,
12179
],
"mapped",
[
35282
]
],
[
[
12180,
12180
],
"mapped",
[
35328
]
],
[
[
12181,
12181
],
"mapped",
[
35895
]
],
[
[
12182,
12182
],
"mapped",
[
35910
]
],
[
[
12183,
12183
],
"mapped",
[
35925
]
],
[
[
12184,
12184
],
"mapped",
[
35960
]
],
[
[
12185,
12185
],
"mapped",
[
35997
]
],
[
[
12186,
12186
],
"mapped",
[
36196
]
],
[
[
12187,
12187
],
"mapped",
[
36208
]
],
[
[
12188,
12188
],
"mapped",
[
36275
]
],
[
[
12189,
12189
],
"mapped",
[
36523
]
],
[
[
12190,
12190
],
"mapped",
[
36554
]
],
[
[
12191,
12191
],
"mapped",
[
36763
]
],
[
[
12192,
12192
],
"mapped",
[
36784
]
],
[
[
12193,
12193
],
"mapped",
[
36789
]
],
[
[
12194,
12194
],
"mapped",
[
37009
]
],
[
[
12195,
12195
],
"mapped",
[
37193
]
],
[
[
12196,
12196
],
"mapped",
[
37318
]
],
[
[
12197,
12197
],
"mapped",
[
37324
]
],
[
[
12198,
12198
],
"mapped",
[
37329
]
],
[
[
12199,
12199
],
"mapped",
[
38263
]
],
[
[
12200,
12200
],
"mapped",
[
38272
]
],
[
[
12201,
12201
],
"mapped",
[
38428
]
],
[
[
12202,
12202
],
"mapped",
[
38582
]
],
[
[
12203,
12203
],
"mapped",
[
38585
]
],
[
[
12204,
12204
],
"mapped",
[
38632
]
],
[
[
12205,
12205
],
"mapped",
[
38737
]
],
[
[
12206,
12206
],
"mapped",
[
38750
]
],
[
[
12207,
12207
],
"mapped",
[
38754
]
],
[
[
12208,
12208
],
"mapped",
[
38761
]
],
[
[
12209,
12209
],
"mapped",
[
38859
]
],
[
[
12210,
12210
],
"mapped",
[
38893
]
],
[
[
12211,
12211
],
"mapped",
[
38899
]
],
[
[
12212,
12212
],
"mapped",
[
38913
]
],
[
[
12213,
12213
],
"mapped",
[
39080
]
],
[
[
12214,
12214
],
"mapped",
[
39131
]
],
[
[
12215,
12215
],
"mapped",
[
39135
]
],
[
[
12216,
12216
],
"mapped",
[
39318
]
],
[
[
12217,
12217
],
"mapped",
[
39321
]
],
[
[
12218,
12218
],
"mapped",
[
39340
]
],
[
[
12219,
12219
],
"mapped",
[
39592
]
],
[
[
12220,
12220
],
"mapped",
[
39640
]
],
[
[
12221,
12221
],
"mapped",
[
39647
]
],
[
[
12222,
12222
],
"mapped",
[
39717
]
],
[
[
12223,
12223
],
"mapped",
[
39727
]
],
[
[
12224,
12224
],
"mapped",
[
39730
]
],
[
[
12225,
12225
],
"mapped",
[
39740
]
],
[
[
12226,
12226
],
"mapped",
[
39770
]
],
[
[
12227,
12227
],
"mapped",
[
40165
]
],
[
[
12228,
12228
],
"mapped",
[
40565
]
],
[
[
12229,
12229
],
"mapped",
[
40575
]
],
[
[
12230,
12230
],
"mapped",
[
40613
]
],
[
[
12231,
12231
],
"mapped",
[
40635
]
],
[
[
12232,
12232
],
"mapped",
[
40643
]
],
[
[
12233,
12233
],
"mapped",
[
40653
]
],
[
[
12234,
12234
],
"mapped",
[
40657
]
],
[
[
12235,
12235
],
"mapped",
[
40697
]
],
[
[
12236,
12236
],
"mapped",
[
40701
]
],
[
[
12237,
12237
],
"mapped",
[
40718
]
],
[
[
12238,
12238
],
"mapped",
[
40723
]
],
[
[
12239,
12239
],
"mapped",
[
40736
]
],
[
[
12240,
12240
],
"mapped",
[
40763
]
],
[
[
12241,
12241
],
"mapped",
[
40778
]
],
[
[
12242,
12242
],
"mapped",
[
40786
]
],
[
[
12243,
12243
],
"mapped",
[
40845
]
],
[
[
12244,
12244
],
"mapped",
[
40860
]
],
[
[
12245,
12245
],
"mapped",
[
40864
]
],
[
[
12246,
12271
],
"disallowed"
],
[
[
12272,
12283
],
"disallowed"
],
[
[
12284,
12287
],
"disallowed"
],
[
[
12288,
12288
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
12289,
12289
],
"valid",
[
],
"NV8"
],
[
[
12290,
12290
],
"mapped",
[
46
]
],
[
[
12291,
12292
],
"valid",
[
],
"NV8"
],
[
[
12293,
12295
],
"valid"
],
[
[
12296,
12329
],
"valid",
[
],
"NV8"
],
[
[
12330,
12333
],
"valid"
],
[
[
12334,
12341
],
"valid",
[
],
"NV8"
],
[
[
12342,
12342
],
"mapped",
[
12306
]
],
[
[
12343,
12343
],
"valid",
[
],
"NV8"
],
[
[
12344,
12344
],
"mapped",
[
21313
]
],
[
[
12345,
12345
],
"mapped",
[
21316
]
],
[
[
12346,
12346
],
"mapped",
[
21317
]
],
[
[
12347,
12347
],
"valid",
[
],
"NV8"
],
[
[
12348,
12348
],
"valid"
],
[
[
12349,
12349
],
"valid",
[
],
"NV8"
],
[
[
12350,
12350
],
"valid",
[
],
"NV8"
],
[
[
12351,
12351
],
"valid",
[
],
"NV8"
],
[
[
12352,
12352
],
"disallowed"
],
[
[
12353,
12436
],
"valid"
],
[
[
12437,
12438
],
"valid"
],
[
[
12439,
12440
],
"disallowed"
],
[
[
12441,
12442
],
"valid"
],
[
[
12443,
12443
],
"disallowed_STD3_mapped",
[
32,
12441
]
],
[
[
12444,
12444
],
"disallowed_STD3_mapped",
[
32,
12442
]
],
[
[
12445,
12446
],
"valid"
],
[
[
12447,
12447
],
"mapped",
[
12424,
12426
]
],
[
[
12448,
12448
],
"valid",
[
],
"NV8"
],
[
[
12449,
12542
],
"valid"
],
[
[
12543,
12543
],
"mapped",
[
12467,
12488
]
],
[
[
12544,
12548
],
"disallowed"
],
[
[
12549,
12588
],
"valid"
],
[
[
12589,
12589
],
"valid"
],
[
[
12590,
12592
],
"disallowed"
],
[
[
12593,
12593
],
"mapped",
[
4352
]
],
[
[
12594,
12594
],
"mapped",
[
4353
]
],
[
[
12595,
12595
],
"mapped",
[
4522
]
],
[
[
12596,
12596
],
"mapped",
[
4354
]
],
[
[
12597,
12597
],
"mapped",
[
4524
]
],
[
[
12598,
12598
],
"mapped",
[
4525
]
],
[
[
12599,
12599
],
"mapped",
[
4355
]
],
[
[
12600,
12600
],
"mapped",
[
4356
]
],
[
[
12601,
12601
],
"mapped",
[
4357
]
],
[
[
12602,
12602
],
"mapped",
[
4528
]
],
[
[
12603,
12603
],
"mapped",
[
4529
]
],
[
[
12604,
12604
],
"mapped",
[
4530
]
],
[
[
12605,
12605
],
"mapped",
[
4531
]
],
[
[
12606,
12606
],
"mapped",
[
4532
]
],
[
[
12607,
12607
],
"mapped",
[
4533
]
],
[
[
12608,
12608
],
"mapped",
[
4378
]
],
[
[
12609,
12609
],
"mapped",
[
4358
]
],
[
[
12610,
12610
],
"mapped",
[
4359
]
],
[
[
12611,
12611
],
"mapped",
[
4360
]
],
[
[
12612,
12612
],
"mapped",
[
4385
]
],
[
[
12613,
12613
],
"mapped",
[
4361
]
],
[
[
12614,
12614
],
"mapped",
[
4362
]
],
[
[
12615,
12615
],
"mapped",
[
4363
]
],
[
[
12616,
12616
],
"mapped",
[
4364
]
],
[
[
12617,
12617
],
"mapped",
[
4365
]
],
[
[
12618,
12618
],
"mapped",
[
4366
]
],
[
[
12619,
12619
],
"mapped",
[
4367
]
],
[
[
12620,
12620
],
"mapped",
[
4368
]
],
[
[
12621,
12621
],
"mapped",
[
4369
]
],
[
[
12622,
12622
],
"mapped",
[
4370
]
],
[
[
12623,
12623
],
"mapped",
[
4449
]
],
[
[
12624,
12624
],
"mapped",
[
4450
]
],
[
[
12625,
12625
],
"mapped",
[
4451
]
],
[
[
12626,
12626
],
"mapped",
[
4452
]
],
[
[
12627,
12627
],
"mapped",
[
4453
]
],
[
[
12628,
12628
],
"mapped",
[
4454
]
],
[
[
12629,
12629
],
"mapped",
[
4455
]
],
[
[
12630,
12630
],
"mapped",
[
4456
]
],
[
[
12631,
12631
],
"mapped",
[
4457
]
],
[
[
12632,
12632
],
"mapped",
[
4458
]
],
[
[
12633,
12633
],
"mapped",
[
4459
]
],
[
[
12634,
12634
],
"mapped",
[
4460
]
],
[
[
12635,
12635
],
"mapped",
[
4461
]
],
[
[
12636,
12636
],
"mapped",
[
4462
]
],
[
[
12637,
12637
],
"mapped",
[
4463
]
],
[
[
12638,
12638
],
"mapped",
[
4464
]
],
[
[
12639,
12639
],
"mapped",
[
4465
]
],
[
[
12640,
12640
],
"mapped",
[
4466
]
],
[
[
12641,
12641
],
"mapped",
[
4467
]
],
[
[
12642,
12642
],
"mapped",
[
4468
]
],
[
[
12643,
12643
],
"mapped",
[
4469
]
],
[
[
12644,
12644
],
"disallowed"
],
[
[
12645,
12645
],
"mapped",
[
4372
]
],
[
[
12646,
12646
],
"mapped",
[
4373
]
],
[
[
12647,
12647
],
"mapped",
[
4551
]
],
[
[
12648,
12648
],
"mapped",
[
4552
]
],
[
[
12649,
12649
],
"mapped",
[
4556
]
],
[
[
12650,
12650
],
"mapped",
[
4558
]
],
[
[
12651,
12651
],
"mapped",
[
4563
]
],
[
[
12652,
12652
],
"mapped",
[
4567
]
],
[
[
12653,
12653
],
"mapped",
[
4569
]
],
[
[
12654,
12654
],
"mapped",
[
4380
]
],
[
[
12655,
12655
],
"mapped",
[
4573
]
],
[
[
12656,
12656
],
"mapped",
[
4575
]
],
[
[
12657,
12657
],
"mapped",
[
4381
]
],
[
[
12658,
12658
],
"mapped",
[
4382
]
],
[
[
12659,
12659
],
"mapped",
[
4384
]
],
[
[
12660,
12660
],
"mapped",
[
4386
]
],
[
[
12661,
12661
],
"mapped",
[
4387
]
],
[
[
12662,
12662
],
"mapped",
[
4391
]
],
[
[
12663,
12663
],
"mapped",
[
4393
]
],
[
[
12664,
12664
],
"mapped",
[
4395
]
],
[
[
12665,
12665
],
"mapped",
[
4396
]
],
[
[
12666,
12666
],
"mapped",
[
4397
]
],
[
[
12667,
12667
],
"mapped",
[
4398
]
],
[
[
12668,
12668
],
"mapped",
[
4399
]
],
[
[
12669,
12669
],
"mapped",
[
4402
]
],
[
[
12670,
12670
],
"mapped",
[
4406
]
],
[
[
12671,
12671
],
"mapped",
[
4416
]
],
[
[
12672,
12672
],
"mapped",
[
4423
]
],
[
[
12673,
12673
],
"mapped",
[
4428
]
],
[
[
12674,
12674
],
"mapped",
[
4593
]
],
[
[
12675,
12675
],
"mapped",
[
4594
]
],
[
[
12676,
12676
],
"mapped",
[
4439
]
],
[
[
12677,
12677
],
"mapped",
[
4440
]
],
[
[
12678,
12678
],
"mapped",
[
4441
]
],
[
[
12679,
12679
],
"mapped",
[
4484
]
],
[
[
12680,
12680
],
"mapped",
[
4485
]
],
[
[
12681,
12681
],
"mapped",
[
4488
]
],
[
[
12682,
12682
],
"mapped",
[
4497
]
],
[
[
12683,
12683
],
"mapped",
[
4498
]
],
[
[
12684,
12684
],
"mapped",
[
4500
]
],
[
[
12685,
12685
],
"mapped",
[
4510
]
],
[
[
12686,
12686
],
"mapped",
[
4513
]
],
[
[
12687,
12687
],
"disallowed"
],
[
[
12688,
12689
],
"valid",
[
],
"NV8"
],
[
[
12690,
12690
],
"mapped",
[
19968
]
],
[
[
12691,
12691
],
"mapped",
[
20108
]
],
[
[
12692,
12692
],
"mapped",
[
19977
]
],
[
[
12693,
12693
],
"mapped",
[
22235
]
],
[
[
12694,
12694
],
"mapped",
[
19978
]
],
[
[
12695,
12695
],
"mapped",
[
20013
]
],
[
[
12696,
12696
],
"mapped",
[
19979
]
],
[
[
12697,
12697
],
"mapped",
[
30002
]
],
[
[
12698,
12698
],
"mapped",
[
20057
]
],
[
[
12699,
12699
],
"mapped",
[
19993
]
],
[
[
12700,
12700
],
"mapped",
[
19969
]
],
[
[
12701,
12701
],
"mapped",
[
22825
]
],
[
[
12702,
12702
],
"mapped",
[
22320
]
],
[
[
12703,
12703
],
"mapped",
[
20154
]
],
[
[
12704,
12727
],
"valid"
],
[
[
12728,
12730
],
"valid"
],
[
[
12731,
12735
],
"disallowed"
],
[
[
12736,
12751
],
"valid",
[
],
"NV8"
],
[
[
12752,
12771
],
"valid",
[
],
"NV8"
],
[
[
12772,
12783
],
"disallowed"
],
[
[
12784,
12799
],
"valid"
],
[
[
12800,
12800
],
"disallowed_STD3_mapped",
[
40,
4352,
41
]
],
[
[
12801,
12801
],
"disallowed_STD3_mapped",
[
40,
4354,
41
]
],
[
[
12802,
12802
],
"disallowed_STD3_mapped",
[
40,
4355,
41
]
],
[
[
12803,
12803
],
"disallowed_STD3_mapped",
[
40,
4357,
41
]
],
[
[
12804,
12804
],
"disallowed_STD3_mapped",
[
40,
4358,
41
]
],
[
[
12805,
12805
],
"disallowed_STD3_mapped",
[
40,
4359,
41
]
],
[
[
12806,
12806
],
"disallowed_STD3_mapped",
[
40,
4361,
41
]
],
[
[
12807,
12807
],
"disallowed_STD3_mapped",
[
40,
4363,
41
]
],
[
[
12808,
12808
],
"disallowed_STD3_mapped",
[
40,
4364,
41
]
],
[
[
12809,
12809
],
"disallowed_STD3_mapped",
[
40,
4366,
41
]
],
[
[
12810,
12810
],
"disallowed_STD3_mapped",
[
40,
4367,
41
]
],
[
[
12811,
12811
],
"disallowed_STD3_mapped",
[
40,
4368,
41
]
],
[
[
12812,
12812
],
"disallowed_STD3_mapped",
[
40,
4369,
41
]
],
[
[
12813,
12813
],
"disallowed_STD3_mapped",
[
40,
4370,
41
]
],
[
[
12814,
12814
],
"disallowed_STD3_mapped",
[
40,
44032,
41
]
],
[
[
12815,
12815
],
"disallowed_STD3_mapped",
[
40,
45208,
41
]
],
[
[
12816,
12816
],
"disallowed_STD3_mapped",
[
40,
45796,
41
]
],
[
[
12817,
12817
],
"disallowed_STD3_mapped",
[
40,
46972,
41
]
],
[
[
12818,
12818
],
"disallowed_STD3_mapped",
[
40,
47560,
41
]
],
[
[
12819,
12819
],
"disallowed_STD3_mapped",
[
40,
48148,
41
]
],
[
[
12820,
12820
],
"disallowed_STD3_mapped",
[
40,
49324,
41
]
],
[
[
12821,
12821
],
"disallowed_STD3_mapped",
[
40,
50500,
41
]
],
[
[
12822,
12822
],
"disallowed_STD3_mapped",
[
40,
51088,
41
]
],
[
[
12823,
12823
],
"disallowed_STD3_mapped",
[
40,
52264,
41
]
],
[
[
12824,
12824
],
"disallowed_STD3_mapped",
[
40,
52852,
41
]
],
[
[
12825,
12825
],
"disallowed_STD3_mapped",
[
40,
53440,
41
]
],
[
[
12826,
12826
],
"disallowed_STD3_mapped",
[
40,
54028,
41
]
],
[
[
12827,
12827
],
"disallowed_STD3_mapped",
[
40,
54616,
41
]
],
[
[
12828,
12828
],
"disallowed_STD3_mapped",
[
40,
51452,
41
]
],
[
[
12829,
12829
],
"disallowed_STD3_mapped",
[
40,
50724,
51204,
41
]
],
[
[
12830,
12830
],
"disallowed_STD3_mapped",
[
40,
50724,
54980,
41
]
],
[
[
12831,
12831
],
"disallowed"
],
[
[
12832,
12832
],
"disallowed_STD3_mapped",
[
40,
19968,
41
]
],
[
[
12833,
12833
],
"disallowed_STD3_mapped",
[
40,
20108,
41
]
],
[
[
12834,
12834
],
"disallowed_STD3_mapped",
[
40,
19977,
41
]
],
[
[
12835,
12835
],
"disallowed_STD3_mapped",
[
40,
22235,
41
]
],
[
[
12836,
12836
],
"disallowed_STD3_mapped",
[
40,
20116,
41
]
],
[
[
12837,
12837
],
"disallowed_STD3_mapped",
[
40,
20845,
41
]
],
[
[
12838,
12838
],
"disallowed_STD3_mapped",
[
40,
19971,
41
]
],
[
[
12839,
12839
],
"disallowed_STD3_mapped",
[
40,
20843,
41
]
],
[
[
12840,
12840
],
"disallowed_STD3_mapped",
[
40,
20061,
41
]
],
[
[
12841,
12841
],
"disallowed_STD3_mapped",
[
40,
21313,
41
]
],
[
[
12842,
12842
],
"disallowed_STD3_mapped",
[
40,
26376,
41
]
],
[
[
12843,
12843
],
"disallowed_STD3_mapped",
[
40,
28779,
41
]
],
[
[
12844,
12844
],
"disallowed_STD3_mapped",
[
40,
27700,
41
]
],
[
[
12845,
12845
],
"disallowed_STD3_mapped",
[
40,
26408,
41
]
],
[
[
12846,
12846
],
"disallowed_STD3_mapped",
[
40,
37329,
41
]
],
[
[
12847,
12847
],
"disallowed_STD3_mapped",
[
40,
22303,
41
]
],
[
[
12848,
12848
],
"disallowed_STD3_mapped",
[
40,
26085,
41
]
],
[
[
12849,
12849
],
"disallowed_STD3_mapped",
[
40,
26666,
41
]
],
[
[
12850,
12850
],
"disallowed_STD3_mapped",
[
40,
26377,
41
]
],
[
[
12851,
12851
],
"disallowed_STD3_mapped",
[
40,
31038,
41
]
],
[
[
12852,
12852
],
"disallowed_STD3_mapped",
[
40,
21517,
41
]
],
[
[
12853,
12853
],
"disallowed_STD3_mapped",
[
40,
29305,
41
]
],
[
[
12854,
12854
],
"disallowed_STD3_mapped",
[
40,
36001,
41
]
],
[
[
12855,
12855
],
"disallowed_STD3_mapped",
[
40,
31069,
41
]
],
[
[
12856,
12856
],
"disallowed_STD3_mapped",
[
40,
21172,
41
]
],
[
[
12857,
12857
],
"disallowed_STD3_mapped",
[
40,
20195,
41
]
],
[
[
12858,
12858
],
"disallowed_STD3_mapped",
[
40,
21628,
41
]
],
[
[
12859,
12859
],
"disallowed_STD3_mapped",
[
40,
23398,
41
]
],
[
[
12860,
12860
],
"disallowed_STD3_mapped",
[
40,
30435,
41
]
],
[
[
12861,
12861
],
"disallowed_STD3_mapped",
[
40,
20225,
41
]
],
[
[
12862,
12862
],
"disallowed_STD3_mapped",
[
40,
36039,
41
]
],
[
[
12863,
12863
],
"disallowed_STD3_mapped",
[
40,
21332,
41
]
],
[
[
12864,
12864
],
"disallowed_STD3_mapped",
[
40,
31085,
41
]
],
[
[
12865,
12865
],
"disallowed_STD3_mapped",
[
40,
20241,
41
]
],
[
[
12866,
12866
],
"disallowed_STD3_mapped",
[
40,
33258,
41
]
],
[
[
12867,
12867
],
"disallowed_STD3_mapped",
[
40,
33267,
41
]
],
[
[
12868,
12868
],
"mapped",
[
21839
]
],
[
[
12869,
12869
],
"mapped",
[
24188
]
],
[
[
12870,
12870
],
"mapped",
[
25991
]
],
[
[
12871,
12871
],
"mapped",
[
31631
]
],
[
[
12872,
12879
],
"valid",
[
],
"NV8"
],
[
[
12880,
12880
],
"mapped",
[
112,
116,
101
]
],
[
[
12881,
12881
],
"mapped",
[
50,
49
]
],
[
[
12882,
12882
],
"mapped",
[
50,
50
]
],
[
[
12883,
12883
],
"mapped",
[
50,
51
]
],
[
[
12884,
12884
],
"mapped",
[
50,
52
]
],
[
[
12885,
12885
],
"mapped",
[
50,
53
]
],
[
[
12886,
12886
],
"mapped",
[
50,
54
]
],
[
[
12887,
12887
],
"mapped",
[
50,
55
]
],
[
[
12888,
12888
],
"mapped",
[
50,
56
]
],
[
[
12889,
12889
],
"mapped",
[
50,
57
]
],
[
[
12890,
12890
],
"mapped",
[
51,
48
]
],
[
[
12891,
12891
],
"mapped",
[
51,
49
]
],
[
[
12892,
12892
],
"mapped",
[
51,
50
]
],
[
[
12893,
12893
],
"mapped",
[
51,
51
]
],
[
[
12894,
12894
],
"mapped",
[
51,
52
]
],
[
[
12895,
12895
],
"mapped",
[
51,
53
]
],
[
[
12896,
12896
],
"mapped",
[
4352
]
],
[
[
12897,
12897
],
"mapped",
[
4354
]
],
[
[
12898,
12898
],
"mapped",
[
4355
]
],
[
[
12899,
12899
],
"mapped",
[
4357
]
],
[
[
12900,
12900
],
"mapped",
[
4358
]
],
[
[
12901,
12901
],
"mapped",
[
4359
]
],
[
[
12902,
12902
],
"mapped",
[
4361
]
],
[
[
12903,
12903
],
"mapped",
[
4363
]
],
[
[
12904,
12904
],
"mapped",
[
4364
]
],
[
[
12905,
12905
],
"mapped",
[
4366
]
],
[
[
12906,
12906
],
"mapped",
[
4367
]
],
[
[
12907,
12907
],
"mapped",
[
4368
]
],
[
[
12908,
12908
],
"mapped",
[
4369
]
],
[
[
12909,
12909
],
"mapped",
[
4370
]
],
[
[
12910,
12910
],
"mapped",
[
44032
]
],
[
[
12911,
12911
],
"mapped",
[
45208
]
],
[
[
12912,
12912
],
"mapped",
[
45796
]
],
[
[
12913,
12913
],
"mapped",
[
46972
]
],
[
[
12914,
12914
],
"mapped",
[
47560
]
],
[
[
12915,
12915
],
"mapped",
[
48148
]
],
[
[
12916,
12916
],
"mapped",
[
49324
]
],
[
[
12917,
12917
],
"mapped",
[
50500
]
],
[
[
12918,
12918
],
"mapped",
[
51088
]
],
[
[
12919,
12919
],
"mapped",
[
52264
]
],
[
[
12920,
12920
],
"mapped",
[
52852
]
],
[
[
12921,
12921
],
"mapped",
[
53440
]
],
[
[
12922,
12922
],
"mapped",
[
54028
]
],
[
[
12923,
12923
],
"mapped",
[
54616
]
],
[
[
12924,
12924
],
"mapped",
[
52280,
44256
]
],
[
[
12925,
12925
],
"mapped",
[
51452,
51032
]
],
[
[
12926,
12926
],
"mapped",
[
50864
]
],
[
[
12927,
12927
],
"valid",
[
],
"NV8"
],
[
[
12928,
12928
],
"mapped",
[
19968
]
],
[
[
12929,
12929
],
"mapped",
[
20108
]
],
[
[
12930,
12930
],
"mapped",
[
19977
]
],
[
[
12931,
12931
],
"mapped",
[
22235
]
],
[
[
12932,
12932
],
"mapped",
[
20116
]
],
[
[
12933,
12933
],
"mapped",
[
20845
]
],
[
[
12934,
12934
],
"mapped",
[
19971
]
],
[
[
12935,
12935
],
"mapped",
[
20843
]
],
[
[
12936,
12936
],
"mapped",
[
20061
]
],
[
[
12937,
12937
],
"mapped",
[
21313
]
],
[
[
12938,
12938
],
"mapped",
[
26376
]
],
[
[
12939,
12939
],
"mapped",
[
28779
]
],
[
[
12940,
12940
],
"mapped",
[
27700
]
],
[
[
12941,
12941
],
"mapped",
[
26408
]
],
[
[
12942,
12942
],
"mapped",
[
37329
]
],
[
[
12943,
12943
],
"mapped",
[
22303
]
],
[
[
12944,
12944
],
"mapped",
[
26085
]
],
[
[
12945,
12945
],
"mapped",
[
26666
]
],
[
[
12946,
12946
],
"mapped",
[
26377
]
],
[
[
12947,
12947
],
"mapped",
[
31038
]
],
[
[
12948,
12948
],
"mapped",
[
21517
]
],
[
[
12949,
12949
],
"mapped",
[
29305
]
],
[
[
12950,
12950
],
"mapped",
[
36001
]
],
[
[
12951,
12951
],
"mapped",
[
31069
]
],
[
[
12952,
12952
],
"mapped",
[
21172
]
],
[
[
12953,
12953
],
"mapped",
[
31192
]
],
[
[
12954,
12954
],
"mapped",
[
30007
]
],
[
[
12955,
12955
],
"mapped",
[
22899
]
],
[
[
12956,
12956
],
"mapped",
[
36969
]
],
[
[
12957,
12957
],
"mapped",
[
20778
]
],
[
[
12958,
12958
],
"mapped",
[
21360
]
],
[
[
12959,
12959
],
"mapped",
[
27880
]
],
[
[
12960,
12960
],
"mapped",
[
38917
]
],
[
[
12961,
12961
],
"mapped",
[
20241
]
],
[
[
12962,
12962
],
"mapped",
[
20889
]
],
[
[
12963,
12963
],
"mapped",
[
27491
]
],
[
[
12964,
12964
],
"mapped",
[
19978
]
],
[
[
12965,
12965
],
"mapped",
[
20013
]
],
[
[
12966,
12966
],
"mapped",
[
19979
]
],
[
[
12967,
12967
],
"mapped",
[
24038
]
],
[
[
12968,
12968
],
"mapped",
[
21491
]
],
[
[
12969,
12969
],
"mapped",
[
21307
]
],
[
[
12970,
12970
],
"mapped",
[
23447
]
],
[
[
12971,
12971
],
"mapped",
[
23398
]
],
[
[
12972,
12972
],
"mapped",
[
30435
]
],
[
[
12973,
12973
],
"mapped",
[
20225
]
],
[
[
12974,
12974
],
"mapped",
[
36039
]
],
[
[
12975,
12975
],
"mapped",
[
21332
]
],
[
[
12976,
12976
],
"mapped",
[
22812
]
],
[
[
12977,
12977
],
"mapped",
[
51,
54
]
],
[
[
12978,
12978
],
"mapped",
[
51,
55
]
],
[
[
12979,
12979
],
"mapped",
[
51,
56
]
],
[
[
12980,
12980
],
"mapped",
[
51,
57
]
],
[
[
12981,
12981
],
"mapped",
[
52,
48
]
],
[
[
12982,
12982
],
"mapped",
[
52,
49
]
],
[
[
12983,
12983
],
"mapped",
[
52,
50
]
],
[
[
12984,
12984
],
"mapped",
[
52,
51
]
],
[
[
12985,
12985
],
"mapped",
[
52,
52
]
],
[
[
12986,
12986
],
"mapped",
[
52,
53
]
],
[
[
12987,
12987
],
"mapped",
[
52,
54
]
],
[
[
12988,
12988
],
"mapped",
[
52,
55
]
],
[
[
12989,
12989
],
"mapped",
[
52,
56
]
],
[
[
12990,
12990
],
"mapped",
[
52,
57
]
],
[
[
12991,
12991
],
"mapped",
[
53,
48
]
],
[
[
12992,
12992
],
"mapped",
[
49,
26376
]
],
[
[
12993,
12993
],
"mapped",
[
50,
26376
]
],
[
[
12994,
12994
],
"mapped",
[
51,
26376
]
],
[
[
12995,
12995
],
"mapped",
[
52,
26376
]
],
[
[
12996,
12996
],
"mapped",
[
53,
26376
]
],
[
[
12997,
12997
],
"mapped",
[
54,
26376
]
],
[
[
12998,
12998
],
"mapped",
[
55,
26376
]
],
[
[
12999,
12999
],
"mapped",
[
56,
26376
]
],
[
[
13000,
13000
],
"mapped",
[
57,
26376
]
],
[
[
13001,
13001
],
"mapped",
[
49,
48,
26376
]
],
[
[
13002,
13002
],
"mapped",
[
49,
49,
26376
]
],
[
[
13003,
13003
],
"mapped",
[
49,
50,
26376
]
],
[
[
13004,
13004
],
"mapped",
[
104,
103
]
],
[
[
13005,
13005
],
"mapped",
[
101,
114,
103
]
],
[
[
13006,
13006
],
"mapped",
[
101,
118
]
],
[
[
13007,
13007
],
"mapped",
[
108,
116,
100
]
],
[
[
13008,
13008
],
"mapped",
[
12450
]
],
[
[
13009,
13009
],
"mapped",
[
12452
]
],
[
[
13010,
13010
],
"mapped",
[
12454
]
],
[
[
13011,
13011
],
"mapped",
[
12456
]
],
[
[
13012,
13012
],
"mapped",
[
12458
]
],
[
[
13013,
13013
],
"mapped",
[
12459
]
],
[
[
13014,
13014
],
"mapped",
[
12461
]
],
[
[
13015,
13015
],
"mapped",
[
12463
]
],
[
[
13016,
13016
],
"mapped",
[
12465
]
],
[
[
13017,
13017
],
"mapped",
[
12467
]
],
[
[
13018,
13018
],
"mapped",
[
12469
]
],
[
[
13019,
13019
],
"mapped",
[
12471
]
],
[
[
13020,
13020
],
"mapped",
[
12473
]
],
[
[
13021,
13021
],
"mapped",
[
12475
]
],
[
[
13022,
13022
],
"mapped",
[
12477
]
],
[
[
13023,
13023
],
"mapped",
[
12479
]
],
[
[
13024,
13024
],
"mapped",
[
12481
]
],
[
[
13025,
13025
],
"mapped",
[
12484
]
],
[
[
13026,
13026
],
"mapped",
[
12486
]
],
[
[
13027,
13027
],
"mapped",
[
12488
]
],
[
[
13028,
13028
],
"mapped",
[
12490
]
],
[
[
13029,
13029
],
"mapped",
[
12491
]
],
[
[
13030,
13030
],
"mapped",
[
12492
]
],
[
[
13031,
13031
],
"mapped",
[
12493
]
],
[
[
13032,
13032
],
"mapped",
[
12494
]
],
[
[
13033,
13033
],
"mapped",
[
12495
]
],
[
[
13034,
13034
],
"mapped",
[
12498
]
],
[
[
13035,
13035
],
"mapped",
[
12501
]
],
[
[
13036,
13036
],
"mapped",
[
12504
]
],
[
[
13037,
13037
],
"mapped",
[
12507
]
],
[
[
13038,
13038
],
"mapped",
[
12510
]
],
[
[
13039,
13039
],
"mapped",
[
12511
]
],
[
[
13040,
13040
],
"mapped",
[
12512
]
],
[
[
13041,
13041
],
"mapped",
[
12513
]
],
[
[
13042,
13042
],
"mapped",
[
12514
]
],
[
[
13043,
13043
],
"mapped",
[
12516
]
],
[
[
13044,
13044
],
"mapped",
[
12518
]
],
[
[
13045,
13045
],
"mapped",
[
12520
]
],
[
[
13046,
13046
],
"mapped",
[
12521
]
],
[
[
13047,
13047
],
"mapped",
[
12522
]
],
[
[
13048,
13048
],
"mapped",
[
12523
]
],
[
[
13049,
13049
],
"mapped",
[
12524
]
],
[
[
13050,
13050
],
"mapped",
[
12525
]
],
[
[
13051,
13051
],
"mapped",
[
12527
]
],
[
[
13052,
13052
],
"mapped",
[
12528
]
],
[
[
13053,
13053
],
"mapped",
[
12529
]
],
[
[
13054,
13054
],
"mapped",
[
12530
]
],
[
[
13055,
13055
],
"disallowed"
],
[
[
13056,
13056
],
"mapped",
[
12450,
12497,
12540,
12488
]
],
[
[
13057,
13057
],
"mapped",
[
12450,
12523,
12501,
12449
]
],
[
[
13058,
13058
],
"mapped",
[
12450,
12531,
12506,
12450
]
],
[
[
13059,
13059
],
"mapped",
[
12450,
12540,
12523
]
],
[
[
13060,
13060
],
"mapped",
[
12452,
12491,
12531,
12464
]
],
[
[
13061,
13061
],
"mapped",
[
12452,
12531,
12481
]
],
[
[
13062,
13062
],
"mapped",
[
12454,
12457,
12531
]
],
[
[
13063,
13063
],
"mapped",
[
12456,
12473,
12463,
12540,
12489
]
],
[
[
13064,
13064
],
"mapped",
[
12456,
12540,
12459,
12540
]
],
[
[
13065,
13065
],
"mapped",
[
12458,
12531,
12473
]
],
[
[
13066,
13066
],
"mapped",
[
12458,
12540,
12512
]
],
[
[
13067,
13067
],
"mapped",
[
12459,
12452,
12522
]
],
[
[
13068,
13068
],
"mapped",
[
12459,
12521,
12483,
12488
]
],
[
[
13069,
13069
],
"mapped",
[
12459,
12525,
12522,
12540
]
],
[
[
13070,
13070
],
"mapped",
[
12460,
12525,
12531
]
],
[
[
13071,
13071
],
"mapped",
[
12460,
12531,
12510
]
],
[
[
13072,
13072
],
"mapped",
[
12462,
12460
]
],
[
[
13073,
13073
],
"mapped",
[
12462,
12491,
12540
]
],
[
[
13074,
13074
],
"mapped",
[
12461,
12517,
12522,
12540
]
],
[
[
13075,
13075
],
"mapped",
[
12462,
12523,
12480,
12540
]
],
[
[
13076,
13076
],
"mapped",
[
12461,
12525
]
],
[
[
13077,
13077
],
"mapped",
[
12461,
12525,
12464,
12521,
12512
]
],
[
[
13078,
13078
],
"mapped",
[
12461,
12525,
12513,
12540,
12488,
12523
]
],
[
[
13079,
13079
],
"mapped",
[
12461,
12525,
12527,
12483,
12488
]
],
[
[
13080,
13080
],
"mapped",
[
12464,
12521,
12512
]
],
[
[
13081,
13081
],
"mapped",
[
12464,
12521,
12512,
12488,
12531
]
],
[
[
13082,
13082
],
"mapped",
[
12463,
12523,
12476,
12452,
12525
]
],
[
[
13083,
13083
],
"mapped",
[
12463,
12525,
12540,
12493
]
],
[
[
13084,
13084
],
"mapped",
[
12465,
12540,
12473
]
],
[
[
13085,
13085
],
"mapped",
[
12467,
12523,
12490
]
],
[
[
13086,
13086
],
"mapped",
[
12467,
12540,
12509
]
],
[
[
13087,
13087
],
"mapped",
[
12469,
12452,
12463,
12523
]
],
[
[
13088,
13088
],
"mapped",
[
12469,
12531,
12481,
12540,
12512
]
],
[
[
13089,
13089
],
"mapped",
[
12471,
12522,
12531,
12464
]
],
[
[
13090,
13090
],
"mapped",
[
12475,
12531,
12481
]
],
[
[
13091,
13091
],
"mapped",
[
12475,
12531,
12488
]
],
[
[
13092,
13092
],
"mapped",
[
12480,
12540,
12473
]
],
[
[
13093,
13093
],
"mapped",
[
12487,
12471
]
],
[
[
13094,
13094
],
"mapped",
[
12489,
12523
]
],
[
[
13095,
13095
],
"mapped",
[
12488,
12531
]
],
[
[
13096,
13096
],
"mapped",
[
12490,
12494
]
],
[
[
13097,
13097
],
"mapped",
[
12494,
12483,
12488
]
],
[
[
13098,
13098
],
"mapped",
[
12495,
12452,
12484
]
],
[
[
13099,
13099
],
"mapped",
[
12497,
12540,
12475,
12531,
12488
]
],
[
[
13100,
13100
],
"mapped",
[
12497,
12540,
12484
]
],
[
[
13101,
13101
],
"mapped",
[
12496,
12540,
12524,
12523
]
],
[
[
13102,
13102
],
"mapped",
[
12500,
12450,
12473,
12488,
12523
]
],
[
[
13103,
13103
],
"mapped",
[
12500,
12463,
12523
]
],
[
[
13104,
13104
],
"mapped",
[
12500,
12467
]
],
[
[
13105,
13105
],
"mapped",
[
12499,
12523
]
],
[
[
13106,
13106
],
"mapped",
[
12501,
12449,
12521,
12483,
12489
]
],
[
[
13107,
13107
],
"mapped",
[
12501,
12451,
12540,
12488
]
],
[
[
13108,
13108
],
"mapped",
[
12502,
12483,
12471,
12455,
12523
]
],
[
[
13109,
13109
],
"mapped",
[
12501,
12521,
12531
]
],
[
[
13110,
13110
],
"mapped",
[
12504,
12463,
12479,
12540,
12523
]
],
[
[
13111,
13111
],
"mapped",
[
12506,
12477
]
],
[
[
13112,
13112
],
"mapped",
[
12506,
12491,
12498
]
],
[
[
13113,
13113
],
"mapped",
[
12504,
12523,
12484
]
],
[
[
13114,
13114
],
"mapped",
[
12506,
12531,
12473
]
],
[
[
13115,
13115
],
"mapped",
[
12506,
12540,
12472
]
],
[
[
13116,
13116
],
"mapped",
[
12505,
12540,
12479
]
],
[
[
13117,
13117
],
"mapped",
[
12509,
12452,
12531,
12488
]
],
[
[
13118,
13118
],
"mapped",
[
12508,
12523,
12488
]
],
[
[
13119,
13119
],
"mapped",
[
12507,
12531
]
],
[
[
13120,
13120
],
"mapped",
[
12509,
12531,
12489
]
],
[
[
13121,
13121
],
"mapped",
[
12507,
12540,
12523
]
],
[
[
13122,
13122
],
"mapped",
[
12507,
12540,
12531
]
],
[
[
13123,
13123
],
"mapped",
[
12510,
12452,
12463,
12525
]
],
[
[
13124,
13124
],
"mapped",
[
12510,
12452,
12523
]
],
[
[
13125,
13125
],
"mapped",
[
12510,
12483,
12495
]
],
[
[
13126,
13126
],
"mapped",
[
12510,
12523,
12463
]
],
[
[
13127,
13127
],
"mapped",
[
12510,
12531,
12471,
12519,
12531
]
],
[
[
13128,
13128
],
"mapped",
[
12511,
12463,
12525,
12531
]
],
[
[
13129,
13129
],
"mapped",
[
12511,
12522
]
],
[
[
13130,
13130
],
"mapped",
[
12511,
12522,
12496,
12540,
12523
]
],
[
[
13131,
13131
],
"mapped",
[
12513,
12460
]
],
[
[
13132,
13132
],
"mapped",
[
12513,
12460,
12488,
12531
]
],
[
[
13133,
13133
],
"mapped",
[
12513,
12540,
12488,
12523
]
],
[
[
13134,
13134
],
"mapped",
[
12516,
12540,
12489
]
],
[
[
13135,
13135
],
"mapped",
[
12516,
12540,
12523
]
],
[
[
13136,
13136
],
"mapped",
[
12518,
12450,
12531
]
],
[
[
13137,
13137
],
"mapped",
[
12522,
12483,
12488,
12523
]
],
[
[
13138,
13138
],
"mapped",
[
12522,
12521
]
],
[
[
13139,
13139
],
"mapped",
[
12523,
12500,
12540
]
],
[
[
13140,
13140
],
"mapped",
[
12523,
12540,
12502,
12523
]
],
[
[
13141,
13141
],
"mapped",
[
12524,
12512
]
],
[
[
13142,
13142
],
"mapped",
[
12524,
12531,
12488,
12466,
12531
]
],
[
[
13143,
13143
],
"mapped",
[
12527,
12483,
12488
]
],
[
[
13144,
13144
],
"mapped",
[
48,
28857
]
],
[
[
13145,
13145
],
"mapped",
[
49,
28857
]
],
[
[
13146,
13146
],
"mapped",
[
50,
28857
]
],
[
[
13147,
13147
],
"mapped",
[
51,
28857
]
],
[
[
13148,
13148
],
"mapped",
[
52,
28857
]
],
[
[
13149,
13149
],
"mapped",
[
53,
28857
]
],
[
[
13150,
13150
],
"mapped",
[
54,
28857
]
],
[
[
13151,
13151
],
"mapped",
[
55,
28857
]
],
[
[
13152,
13152
],
"mapped",
[
56,
28857
]
],
[
[
13153,
13153
],
"mapped",
[
57,
28857
]
],
[
[
13154,
13154
],
"mapped",
[
49,
48,
28857
]
],
[
[
13155,
13155
],
"mapped",
[
49,
49,
28857
]
],
[
[
13156,
13156
],
"mapped",
[
49,
50,
28857
]
],
[
[
13157,
13157
],
"mapped",
[
49,
51,
28857
]
],
[
[
13158,
13158
],
"mapped",
[
49,
52,
28857
]
],
[
[
13159,
13159
],
"mapped",
[
49,
53,
28857
]
],
[
[
13160,
13160
],
"mapped",
[
49,
54,
28857
]
],
[
[
13161,
13161
],
"mapped",
[
49,
55,
28857
]
],
[
[
13162,
13162
],
"mapped",
[
49,
56,
28857
]
],
[
[
13163,
13163
],
"mapped",
[
49,
57,
28857
]
],
[
[
13164,
13164
],
"mapped",
[
50,
48,
28857
]
],
[
[
13165,
13165
],
"mapped",
[
50,
49,
28857
]
],
[
[
13166,
13166
],
"mapped",
[
50,
50,
28857
]
],
[
[
13167,
13167
],
"mapped",
[
50,
51,
28857
]
],
[
[
13168,
13168
],
"mapped",
[
50,
52,
28857
]
],
[
[
13169,
13169
],
"mapped",
[
104,
112,
97
]
],
[
[
13170,
13170
],
"mapped",
[
100,
97
]
],
[
[
13171,
13171
],
"mapped",
[
97,
117
]
],
[
[
13172,
13172
],
"mapped",
[
98,
97,
114
]
],
[
[
13173,
13173
],
"mapped",
[
111,
118
]
],
[
[
13174,
13174
],
"mapped",
[
112,
99
]
],
[
[
13175,
13175
],
"mapped",
[
100,
109
]
],
[
[
13176,
13176
],
"mapped",
[
100,
109,
50
]
],
[
[
13177,
13177
],
"mapped",
[
100,
109,
51
]
],
[
[
13178,
13178
],
"mapped",
[
105,
117
]
],
[
[
13179,
13179
],
"mapped",
[
24179,
25104
]
],
[
[
13180,
13180
],
"mapped",
[
26157,
21644
]
],
[
[
13181,
13181
],
"mapped",
[
22823,
27491
]
],
[
[
13182,
13182
],
"mapped",
[
26126,
27835
]
],
[
[
13183,
13183
],
"mapped",
[
26666,
24335,
20250,
31038
]
],
[
[
13184,
13184
],
"mapped",
[
112,
97
]
],
[
[
13185,
13185
],
"mapped",
[
110,
97
]
],
[
[
13186,
13186
],
"mapped",
[
956,
97
]
],
[
[
13187,
13187
],
"mapped",
[
109,
97
]
],
[
[
13188,
13188
],
"mapped",
[
107,
97
]
],
[
[
13189,
13189
],
"mapped",
[
107,
98
]
],
[
[
13190,
13190
],
"mapped",
[
109,
98
]
],
[
[
13191,
13191
],
"mapped",
[
103,
98
]
],
[
[
13192,
13192
],
"mapped",
[
99,
97,
108
]
],
[
[
13193,
13193
],
"mapped",
[
107,
99,
97,
108
]
],
[
[
13194,
13194
],
"mapped",
[
112,
102
]
],
[
[
13195,
13195
],
"mapped",
[
110,
102
]
],
[
[
13196,
13196
],
"mapped",
[
956,
102
]
],
[
[
13197,
13197
],
"mapped",
[
956,
103
]
],
[
[
13198,
13198
],
"mapped",
[
109,
103
]
],
[
[
13199,
13199
],
"mapped",
[
107,
103
]
],
[
[
13200,
13200
],
"mapped",
[
104,
122
]
],
[
[
13201,
13201
],
"mapped",
[
107,
104,
122
]
],
[
[
13202,
13202
],
"mapped",
[
109,
104,
122
]
],
[
[
13203,
13203
],
"mapped",
[
103,
104,
122
]
],
[
[
13204,
13204
],
"mapped",
[
116,
104,
122
]
],
[
[
13205,
13205
],
"mapped",
[
956,
108
]
],
[
[
13206,
13206
],
"mapped",
[
109,
108
]
],
[
[
13207,
13207
],
"mapped",
[
100,
108
]
],
[
[
13208,
13208
],
"mapped",
[
107,
108
]
],
[
[
13209,
13209
],
"mapped",
[
102,
109
]
],
[
[
13210,
13210
],
"mapped",
[
110,
109
]
],
[
[
13211,
13211
],
"mapped",
[
956,
109
]
],
[
[
13212,
13212
],
"mapped",
[
109,
109
]
],
[
[
13213,
13213
],
"mapped",
[
99,
109
]
],
[
[
13214,
13214
],
"mapped",
[
107,
109
]
],
[
[
13215,
13215
],
"mapped",
[
109,
109,
50
]
],
[
[
13216,
13216
],
"mapped",
[
99,
109,
50
]
],
[
[
13217,
13217
],
"mapped",
[
109,
50
]
],
[
[
13218,
13218
],
"mapped",
[
107,
109,
50
]
],
[
[
13219,
13219
],
"mapped",
[
109,
109,
51
]
],
[
[
13220,
13220
],
"mapped",
[
99,
109,
51
]
],
[
[
13221,
13221
],
"mapped",
[
109,
51
]
],
[
[
13222,
13222
],
"mapped",
[
107,
109,
51
]
],
[
[
13223,
13223
],
"mapped",
[
109,
8725,
115
]
],
[
[
13224,
13224
],
"mapped",
[
109,
8725,
115,
50
]
],
[
[
13225,
13225
],
"mapped",
[
112,
97
]
],
[
[
13226,
13226
],
"mapped",
[
107,
112,
97
]
],
[
[
13227,
13227
],
"mapped",
[
109,
112,
97
]
],
[
[
13228,
13228
],
"mapped",
[
103,
112,
97
]
],
[
[
13229,
13229
],
"mapped",
[
114,
97,
100
]
],
[
[
13230,
13230
],
"mapped",
[
114,
97,
100,
8725,
115
]
],
[
[
13231,
13231
],
"mapped",
[
114,
97,
100,
8725,
115,
50
]
],
[
[
13232,
13232
],
"mapped",
[
112,
115
]
],
[
[
13233,
13233
],
"mapped",
[
110,
115
]
],
[
[
13234,
13234
],
"mapped",
[
956,
115
]
],
[
[
13235,
13235
],
"mapped",
[
109,
115
]
],
[
[
13236,
13236
],
"mapped",
[
112,
118
]
],
[
[
13237,
13237
],
"mapped",
[
110,
118
]
],
[
[
13238,
13238
],
"mapped",
[
956,
118
]
],
[
[
13239,
13239
],
"mapped",
[
109,
118
]
],
[
[
13240,
13240
],
"mapped",
[
107,
118
]
],
[
[
13241,
13241
],
"mapped",
[
109,
118
]
],
[
[
13242,
13242
],
"mapped",
[
112,
119
]
],
[
[
13243,
13243
],
"mapped",
[
110,
119
]
],
[
[
13244,
13244
],
"mapped",
[
956,
119
]
],
[
[
13245,
13245
],
"mapped",
[
109,
119
]
],
[
[
13246,
13246
],
"mapped",
[
107,
119
]
],
[
[
13247,
13247
],
"mapped",
[
109,
119
]
],
[
[
13248,
13248
],
"mapped",
[
107,
969
]
],
[
[
13249,
13249
],
"mapped",
[
109,
969
]
],
[
[
13250,
13250
],
"disallowed"
],
[
[
13251,
13251
],
"mapped",
[
98,
113
]
],
[
[
13252,
13252
],
"mapped",
[
99,
99
]
],
[
[
13253,
13253
],
"mapped",
[
99,
100
]
],
[
[
13254,
13254
],
"mapped",
[
99,
8725,
107,
103
]
],
[
[
13255,
13255
],
"disallowed"
],
[
[
13256,
13256
],
"mapped",
[
100,
98
]
],
[
[
13257,
13257
],
"mapped",
[
103,
121
]
],
[
[
13258,
13258
],
"mapped",
[
104,
97
]
],
[
[
13259,
13259
],
"mapped",
[
104,
112
]
],
[
[
13260,
13260
],
"mapped",
[
105,
110
]
],
[
[
13261,
13261
],
"mapped",
[
107,
107
]
],
[
[
13262,
13262
],
"mapped",
[
107,
109
]
],
[
[
13263,
13263
],
"mapped",
[
107,
116
]
],
[
[
13264,
13264
],
"mapped",
[
108,
109
]
],
[
[
13265,
13265
],
"mapped",
[
108,
110
]
],
[
[
13266,
13266
],
"mapped",
[
108,
111,
103
]
],
[
[
13267,
13267
],
"mapped",
[
108,
120
]
],
[
[
13268,
13268
],
"mapped",
[
109,
98
]
],
[
[
13269,
13269
],
"mapped",
[
109,
105,
108
]
],
[
[
13270,
13270
],
"mapped",
[
109,
111,
108
]
],
[
[
13271,
13271
],
"mapped",
[
112,
104
]
],
[
[
13272,
13272
],
"disallowed"
],
[
[
13273,
13273
],
"mapped",
[
112,
112,
109
]
],
[
[
13274,
13274
],
"mapped",
[
112,
114
]
],
[
[
13275,
13275
],
"mapped",
[
115,
114
]
],
[
[
13276,
13276
],
"mapped",
[
115,
118
]
],
[
[
13277,
13277
],
"mapped",
[
119,
98
]
],
[
[
13278,
13278
],
"mapped",
[
118,
8725,
109
]
],
[
[
13279,
13279
],
"mapped",
[
97,
8725,
109
]
],
[
[
13280,
13280
],
"mapped",
[
49,
26085
]
],
[
[
13281,
13281
],
"mapped",
[
50,
26085
]
],
[
[
13282,
13282
],
"mapped",
[
51,
26085
]
],
[
[
13283,
13283
],
"mapped",
[
52,
26085
]
],
[
[
13284,
13284
],
"mapped",
[
53,
26085
]
],
[
[
13285,
13285
],
"mapped",
[
54,
26085
]
],
[
[
13286,
13286
],
"mapped",
[
55,
26085
]
],
[
[
13287,
13287
],
"mapped",
[
56,
26085
]
],
[
[
13288,
13288
],
"mapped",
[
57,
26085
]
],
[
[
13289,
13289
],
"mapped",
[
49,
48,
26085
]
],
[
[
13290,
13290
],
"mapped",
[
49,
49,
26085
]
],
[
[
13291,
13291
],
"mapped",
[
49,
50,
26085
]
],
[
[
13292,
13292
],
"mapped",
[
49,
51,
26085
]
],
[
[
13293,
13293
],
"mapped",
[
49,
52,
26085
]
],
[
[
13294,
13294
],
"mapped",
[
49,
53,
26085
]
],
[
[
13295,
13295
],
"mapped",
[
49,
54,
26085
]
],
[
[
13296,
13296
],
"mapped",
[
49,
55,
26085
]
],
[
[
13297,
13297
],
"mapped",
[
49,
56,
26085
]
],
[
[
13298,
13298
],
"mapped",
[
49,
57,
26085
]
],
[
[
13299,
13299
],
"mapped",
[
50,
48,
26085
]
],
[
[
13300,
13300
],
"mapped",
[
50,
49,
26085
]
],
[
[
13301,
13301
],
"mapped",
[
50,
50,
26085
]
],
[
[
13302,
13302
],
"mapped",
[
50,
51,
26085
]
],
[
[
13303,
13303
],
"mapped",
[
50,
52,
26085
]
],
[
[
13304,
13304
],
"mapped",
[
50,
53,
26085
]
],
[
[
13305,
13305
],
"mapped",
[
50,
54,
26085
]
],
[
[
13306,
13306
],
"mapped",
[
50,
55,
26085
]
],
[
[
13307,
13307
],
"mapped",
[
50,
56,
26085
]
],
[
[
13308,
13308
],
"mapped",
[
50,
57,
26085
]
],
[
[
13309,
13309
],
"mapped",
[
51,
48,
26085
]
],
[
[
13310,
13310
],
"mapped",
[
51,
49,
26085
]
],
[
[
13311,
13311
],
"mapped",
[
103,
97,
108
]
],
[
[
13312,
19893
],
"valid"
],
[
[
19894,
19903
],
"disallowed"
],
[
[
19904,
19967
],
"valid",
[
],
"NV8"
],
[
[
19968,
40869
],
"valid"
],
[
[
40870,
40891
],
"valid"
],
[
[
40892,
40899
],
"valid"
],
[
[
40900,
40907
],
"valid"
],
[
[
40908,
40908
],
"valid"
],
[
[
40909,
40917
],
"valid"
],
[
[
40918,
40959
],
"disallowed"
],
[
[
40960,
42124
],
"valid"
],
[
[
42125,
42127
],
"disallowed"
],
[
[
42128,
42145
],
"valid",
[
],
"NV8"
],
[
[
42146,
42147
],
"valid",
[
],
"NV8"
],
[
[
42148,
42163
],
"valid",
[
],
"NV8"
],
[
[
42164,
42164
],
"valid",
[
],
"NV8"
],
[
[
42165,
42176
],
"valid",
[
],
"NV8"
],
[
[
42177,
42177
],
"valid",
[
],
"NV8"
],
[
[
42178,
42180
],
"valid",
[
],
"NV8"
],
[
[
42181,
42181
],
"valid",
[
],
"NV8"
],
[
[
42182,
42182
],
"valid",
[
],
"NV8"
],
[
[
42183,
42191
],
"disallowed"
],
[
[
42192,
42237
],
"valid"
],
[
[
42238,
42239
],
"valid",
[
],
"NV8"
],
[
[
42240,
42508
],
"valid"
],
[
[
42509,
42511
],
"valid",
[
],
"NV8"
],
[
[
42512,
42539
],
"valid"
],
[
[
42540,
42559
],
"disallowed"
],
[
[
42560,
42560
],
"mapped",
[
42561
]
],
[
[
42561,
42561
],
"valid"
],
[
[
42562,
42562
],
"mapped",
[
42563
]
],
[
[
42563,
42563
],
"valid"
],
[
[
42564,
42564
],
"mapped",
[
42565
]
],
[
[
42565,
42565
],
"valid"
],
[
[
42566,
42566
],
"mapped",
[
42567
]
],
[
[
42567,
42567
],
"valid"
],
[
[
42568,
42568
],
"mapped",
[
42569
]
],
[
[
42569,
42569
],
"valid"
],
[
[
42570,
42570
],
"mapped",
[
42571
]
],
[
[
42571,
42571
],
"valid"
],
[
[
42572,
42572
],
"mapped",
[
42573
]
],
[
[
42573,
42573
],
"valid"
],
[
[
42574,
42574
],
"mapped",
[
42575
]
],
[
[
42575,
42575
],
"valid"
],
[
[
42576,
42576
],
"mapped",
[
42577
]
],
[
[
42577,
42577
],
"valid"
],
[
[
42578,
42578
],
"mapped",
[
42579
]
],
[
[
42579,
42579
],
"valid"
],
[
[
42580,
42580
],
"mapped",
[
42581
]
],
[
[
42581,
42581
],
"valid"
],
[
[
42582,
42582
],
"mapped",
[
42583
]
],
[
[
42583,
42583
],
"valid"
],
[
[
42584,
42584
],
"mapped",
[
42585
]
],
[
[
42585,
42585
],
"valid"
],
[
[
42586,
42586
],
"mapped",
[
42587
]
],
[
[
42587,
42587
],
"valid"
],
[
[
42588,
42588
],
"mapped",
[
42589
]
],
[
[
42589,
42589
],
"valid"
],
[
[
42590,
42590
],
"mapped",
[
42591
]
],
[
[
42591,
42591
],
"valid"
],
[
[
42592,
42592
],
"mapped",
[
42593
]
],
[
[
42593,
42593
],
"valid"
],
[
[
42594,
42594
],
"mapped",
[
42595
]
],
[
[
42595,
42595
],
"valid"
],
[
[
42596,
42596
],
"mapped",
[
42597
]
],
[
[
42597,
42597
],
"valid"
],
[
[
42598,
42598
],
"mapped",
[
42599
]
],
[
[
42599,
42599
],
"valid"
],
[
[
42600,
42600
],
"mapped",
[
42601
]
],
[
[
42601,
42601
],
"valid"
],
[
[
42602,
42602
],
"mapped",
[
42603
]
],
[
[
42603,
42603
],
"valid"
],
[
[
42604,
42604
],
"mapped",
[
42605
]
],
[
[
42605,
42607
],
"valid"
],
[
[
42608,
42611
],
"valid",
[
],
"NV8"
],
[
[
42612,
42619
],
"valid"
],
[
[
42620,
42621
],
"valid"
],
[
[
42622,
42622
],
"valid",
[
],
"NV8"
],
[
[
42623,
42623
],
"valid"
],
[
[
42624,
42624
],
"mapped",
[
42625
]
],
[
[
42625,
42625
],
"valid"
],
[
[
42626,
42626
],
"mapped",
[
42627
]
],
[
[
42627,
42627
],
"valid"
],
[
[
42628,
42628
],
"mapped",
[
42629
]
],
[
[
42629,
42629
],
"valid"
],
[
[
42630,
42630
],
"mapped",
[
42631
]
],
[
[
42631,
42631
],
"valid"
],
[
[
42632,
42632
],
"mapped",
[
42633
]
],
[
[
42633,
42633
],
"valid"
],
[
[
42634,
42634
],
"mapped",
[
42635
]
],
[
[
42635,
42635
],
"valid"
],
[
[
42636,
42636
],
"mapped",
[
42637
]
],
[
[
42637,
42637
],
"valid"
],
[
[
42638,
42638
],
"mapped",
[
42639
]
],
[
[
42639,
42639
],
"valid"
],
[
[
42640,
42640
],
"mapped",
[
42641
]
],
[
[
42641,
42641
],
"valid"
],
[
[
42642,
42642
],
"mapped",
[
42643
]
],
[
[
42643,
42643
],
"valid"
],
[
[
42644,
42644
],
"mapped",
[
42645
]
],
[
[
42645,
42645
],
"valid"
],
[
[
42646,
42646
],
"mapped",
[
42647
]
],
[
[
42647,
42647
],
"valid"
],
[
[
42648,
42648
],
"mapped",
[
42649
]
],
[
[
42649,
42649
],
"valid"
],
[
[
42650,
42650
],
"mapped",
[
42651
]
],
[
[
42651,
42651
],
"valid"
],
[
[
42652,
42652
],
"mapped",
[
1098
]
],
[
[
42653,
42653
],
"mapped",
[
1100
]
],
[
[
42654,
42654
],
"valid"
],
[
[
42655,
42655
],
"valid"
],
[
[
42656,
42725
],
"valid"
],
[
[
42726,
42735
],
"valid",
[
],
"NV8"
],
[
[
42736,
42737
],
"valid"
],
[
[
42738,
42743
],
"valid",
[
],
"NV8"
],
[
[
42744,
42751
],
"disallowed"
],
[
[
42752,
42774
],
"valid",
[
],
"NV8"
],
[
[
42775,
42778
],
"valid"
],
[
[
42779,
42783
],
"valid"
],
[
[
42784,
42785
],
"valid",
[
],
"NV8"
],
[
[
42786,
42786
],
"mapped",
[
42787
]
],
[
[
42787,
42787
],
"valid"
],
[
[
42788,
42788
],
"mapped",
[
42789
]
],
[
[
42789,
42789
],
"valid"
],
[
[
42790,
42790
],
"mapped",
[
42791
]
],
[
[
42791,
42791
],
"valid"
],
[
[
42792,
42792
],
"mapped",
[
42793
]
],
[
[
42793,
42793
],
"valid"
],
[
[
42794,
42794
],
"mapped",
[
42795
]
],
[
[
42795,
42795
],
"valid"
],
[
[
42796,
42796
],
"mapped",
[
42797
]
],
[
[
42797,
42797
],
"valid"
],
[
[
42798,
42798
],
"mapped",
[
42799
]
],
[
[
42799,
42801
],
"valid"
],
[
[
42802,
42802
],
"mapped",
[
42803
]
],
[
[
42803,
42803
],
"valid"
],
[
[
42804,
42804
],
"mapped",
[
42805
]
],
[
[
42805,
42805
],
"valid"
],
[
[
42806,
42806
],
"mapped",
[
42807
]
],
[
[
42807,
42807
],
"valid"
],
[
[
42808,
42808
],
"mapped",
[
42809
]
],
[
[
42809,
42809
],
"valid"
],
[
[
42810,
42810
],
"mapped",
[
42811
]
],
[
[
42811,
42811
],
"valid"
],
[
[
42812,
42812
],
"mapped",
[
42813
]
],
[
[
42813,
42813
],
"valid"
],
[
[
42814,
42814
],
"mapped",
[
42815
]
],
[
[
42815,
42815
],
"valid"
],
[
[
42816,
42816
],
"mapped",
[
42817
]
],
[
[
42817,
42817
],
"valid"
],
[
[
42818,
42818
],
"mapped",
[
42819
]
],
[
[
42819,
42819
],
"valid"
],
[
[
42820,
42820
],
"mapped",
[
42821
]
],
[
[
42821,
42821
],
"valid"
],
[
[
42822,
42822
],
"mapped",
[
42823
]
],
[
[
42823,
42823
],
"valid"
],
[
[
42824,
42824
],
"mapped",
[
42825
]
],
[
[
42825,
42825
],
"valid"
],
[
[
42826,
42826
],
"mapped",
[
42827
]
],
[
[
42827,
42827
],
"valid"
],
[
[
42828,
42828
],
"mapped",
[
42829
]
],
[
[
42829,
42829
],
"valid"
],
[
[
42830,
42830
],
"mapped",
[
42831
]
],
[
[
42831,
42831
],
"valid"
],
[
[
42832,
42832
],
"mapped",
[
42833
]
],
[
[
42833,
42833
],
"valid"
],
[
[
42834,
42834
],
"mapped",
[
42835
]
],
[
[
42835,
42835
],
"valid"
],
[
[
42836,
42836
],
"mapped",
[
42837
]
],
[
[
42837,
42837
],
"valid"
],
[
[
42838,
42838
],
"mapped",
[
42839
]
],
[
[
42839,
42839
],
"valid"
],
[
[
42840,
42840
],
"mapped",
[
42841
]
],
[
[
42841,
42841
],
"valid"
],
[
[
42842,
42842
],
"mapped",
[
42843
]
],
[
[
42843,
42843
],
"valid"
],
[
[
42844,
42844
],
"mapped",
[
42845
]
],
[
[
42845,
42845
],
"valid"
],
[
[
42846,
42846
],
"mapped",
[
42847
]
],
[
[
42847,
42847
],
"valid"
],
[
[
42848,
42848
],
"mapped",
[
42849
]
],
[
[
42849,
42849
],
"valid"
],
[
[
42850,
42850
],
"mapped",
[
42851
]
],
[
[
42851,
42851
],
"valid"
],
[
[
42852,
42852
],
"mapped",
[
42853
]
],
[
[
42853,
42853
],
"valid"
],
[
[
42854,
42854
],
"mapped",
[
42855
]
],
[
[
42855,
42855
],
"valid"
],
[
[
42856,
42856
],
"mapped",
[
42857
]
],
[
[
42857,
42857
],
"valid"
],
[
[
42858,
42858
],
"mapped",
[
42859
]
],
[
[
42859,
42859
],
"valid"
],
[
[
42860,
42860
],
"mapped",
[
42861
]
],
[
[
42861,
42861
],
"valid"
],
[
[
42862,
42862
],
"mapped",
[
42863
]
],
[
[
42863,
42863
],
"valid"
],
[
[
42864,
42864
],
"mapped",
[
42863
]
],
[
[
42865,
42872
],
"valid"
],
[
[
42873,
42873
],
"mapped",
[
42874
]
],
[
[
42874,
42874
],
"valid"
],
[
[
42875,
42875
],
"mapped",
[
42876
]
],
[
[
42876,
42876
],
"valid"
],
[
[
42877,
42877
],
"mapped",
[
7545
]
],
[
[
42878,
42878
],
"mapped",
[
42879
]
],
[
[
42879,
42879
],
"valid"
],
[
[
42880,
42880
],
"mapped",
[
42881
]
],
[
[
42881,
42881
],
"valid"
],
[
[
42882,
42882
],
"mapped",
[
42883
]
],
[
[
42883,
42883
],
"valid"
],
[
[
42884,
42884
],
"mapped",
[
42885
]
],
[
[
42885,
42885
],
"valid"
],
[
[
42886,
42886
],
"mapped",
[
42887
]
],
[
[
42887,
42888
],
"valid"
],
[
[
42889,
42890
],
"valid",
[
],
"NV8"
],
[
[
42891,
42891
],
"mapped",
[
42892
]
],
[
[
42892,
42892
],
"valid"
],
[
[
42893,
42893
],
"mapped",
[
613
]
],
[
[
42894,
42894
],
"valid"
],
[
[
42895,
42895
],
"valid"
],
[
[
42896,
42896
],
"mapped",
[
42897
]
],
[
[
42897,
42897
],
"valid"
],
[
[
42898,
42898
],
"mapped",
[
42899
]
],
[
[
42899,
42899
],
"valid"
],
[
[
42900,
42901
],
"valid"
],
[
[
42902,
42902
],
"mapped",
[
42903
]
],
[
[
42903,
42903
],
"valid"
],
[
[
42904,
42904
],
"mapped",
[
42905
]
],
[
[
42905,
42905
],
"valid"
],
[
[
42906,
42906
],
"mapped",
[
42907
]
],
[
[
42907,
42907
],
"valid"
],
[
[
42908,
42908
],
"mapped",
[
42909
]
],
[
[
42909,
42909
],
"valid"
],
[
[
42910,
42910
],
"mapped",
[
42911
]
],
[
[
42911,
42911
],
"valid"
],
[
[
42912,
42912
],
"mapped",
[
42913
]
],
[
[
42913,
42913
],
"valid"
],
[
[
42914,
42914
],
"mapped",
[
42915
]
],
[
[
42915,
42915
],
"valid"
],
[
[
42916,
42916
],
"mapped",
[
42917
]
],
[
[
42917,
42917
],
"valid"
],
[
[
42918,
42918
],
"mapped",
[
42919
]
],
[
[
42919,
42919
],
"valid"
],
[
[
42920,
42920
],
"mapped",
[
42921
]
],
[
[
42921,
42921
],
"valid"
],
[
[
42922,
42922
],
"mapped",
[
614
]
],
[
[
42923,
42923
],
"mapped",
[
604
]
],
[
[
42924,
42924
],
"mapped",
[
609
]
],
[
[
42925,
42925
],
"mapped",
[
620
]
],
[
[
42926,
42927
],
"disallowed"
],
[
[
42928,
42928
],
"mapped",
[
670
]
],
[
[
42929,
42929
],
"mapped",
[
647
]
],
[
[
42930,
42930
],
"mapped",
[
669
]
],
[
[
42931,
42931
],
"mapped",
[
43859
]
],
[
[
42932,
42932
],
"mapped",
[
42933
]
],
[
[
42933,
42933
],
"valid"
],
[
[
42934,
42934
],
"mapped",
[
42935
]
],
[
[
42935,
42935
],
"valid"
],
[
[
42936,
42998
],
"disallowed"
],
[
[
42999,
42999
],
"valid"
],
[
[
43000,
43000
],
"mapped",
[
295
]
],
[
[
43001,
43001
],
"mapped",
[
339
]
],
[
[
43002,
43002
],
"valid"
],
[
[
43003,
43007
],
"valid"
],
[
[
43008,
43047
],
"valid"
],
[
[
43048,
43051
],
"valid",
[
],
"NV8"
],
[
[
43052,
43055
],
"disallowed"
],
[
[
43056,
43065
],
"valid",
[
],
"NV8"
],
[
[
43066,
43071
],
"disallowed"
],
[
[
43072,
43123
],
"valid"
],
[
[
43124,
43127
],
"valid",
[
],
"NV8"
],
[
[
43128,
43135
],
"disallowed"
],
[
[
43136,
43204
],
"valid"
],
[
[
43205,
43213
],
"disallowed"
],
[
[
43214,
43215
],
"valid",
[
],
"NV8"
],
[
[
43216,
43225
],
"valid"
],
[
[
43226,
43231
],
"disallowed"
],
[
[
43232,
43255
],
"valid"
],
[
[
43256,
43258
],
"valid",
[
],
"NV8"
],
[
[
43259,
43259
],
"valid"
],
[
[
43260,
43260
],
"valid",
[
],
"NV8"
],
[
[
43261,
43261
],
"valid"
],
[
[
43262,
43263
],
"disallowed"
],
[
[
43264,
43309
],
"valid"
],
[
[
43310,
43311
],
"valid",
[
],
"NV8"
],
[
[
43312,
43347
],
"valid"
],
[
[
43348,
43358
],
"disallowed"
],
[
[
43359,
43359
],
"valid",
[
],
"NV8"
],
[
[
43360,
43388
],
"valid",
[
],
"NV8"
],
[
[
43389,
43391
],
"disallowed"
],
[
[
43392,
43456
],
"valid"
],
[
[
43457,
43469
],
"valid",
[
],
"NV8"
],
[
[
43470,
43470
],
"disallowed"
],
[
[
43471,
43481
],
"valid"
],
[
[
43482,
43485
],
"disallowed"
],
[
[
43486,
43487
],
"valid",
[
],
"NV8"
],
[
[
43488,
43518
],
"valid"
],
[
[
43519,
43519
],
"disallowed"
],
[
[
43520,
43574
],
"valid"
],
[
[
43575,
43583
],
"disallowed"
],
[
[
43584,
43597
],
"valid"
],
[
[
43598,
43599
],
"disallowed"
],
[
[
43600,
43609
],
"valid"
],
[
[
43610,
43611
],
"disallowed"
],
[
[
43612,
43615
],
"valid",
[
],
"NV8"
],
[
[
43616,
43638
],
"valid"
],
[
[
43639,
43641
],
"valid",
[
],
"NV8"
],
[
[
43642,
43643
],
"valid"
],
[
[
43644,
43647
],
"valid"
],
[
[
43648,
43714
],
"valid"
],
[
[
43715,
43738
],
"disallowed"
],
[
[
43739,
43741
],
"valid"
],
[
[
43742,
43743
],
"valid",
[
],
"NV8"
],
[
[
43744,
43759
],
"valid"
],
[
[
43760,
43761
],
"valid",
[
],
"NV8"
],
[
[
43762,
43766
],
"valid"
],
[
[
43767,
43776
],
"disallowed"
],
[
[
43777,
43782
],
"valid"
],
[
[
43783,
43784
],
"disallowed"
],
[
[
43785,
43790
],
"valid"
],
[
[
43791,
43792
],
"disallowed"
],
[
[
43793,
43798
],
"valid"
],
[
[
43799,
43807
],
"disallowed"
],
[
[
43808,
43814
],
"valid"
],
[
[
43815,
43815
],
"disallowed"
],
[
[
43816,
43822
],
"valid"
],
[
[
43823,
43823
],
"disallowed"
],
[
[
43824,
43866
],
"valid"
],
[
[
43867,
43867
],
"valid",
[
],
"NV8"
],
[
[
43868,
43868
],
"mapped",
[
42791
]
],
[
[
43869,
43869
],
"mapped",
[
43831
]
],
[
[
43870,
43870
],
"mapped",
[
619
]
],
[
[
43871,
43871
],
"mapped",
[
43858
]
],
[
[
43872,
43875
],
"valid"
],
[
[
43876,
43877
],
"valid"
],
[
[
43878,
43887
],
"disallowed"
],
[
[
43888,
43888
],
"mapped",
[
5024
]
],
[
[
43889,
43889
],
"mapped",
[
5025
]
],
[
[
43890,
43890
],
"mapped",
[
5026
]
],
[
[
43891,
43891
],
"mapped",
[
5027
]
],
[
[
43892,
43892
],
"mapped",
[
5028
]
],
[
[
43893,
43893
],
"mapped",
[
5029
]
],
[
[
43894,
43894
],
"mapped",
[
5030
]
],
[
[
43895,
43895
],
"mapped",
[
5031
]
],
[
[
43896,
43896
],
"mapped",
[
5032
]
],
[
[
43897,
43897
],
"mapped",
[
5033
]
],
[
[
43898,
43898
],
"mapped",
[
5034
]
],
[
[
43899,
43899
],
"mapped",
[
5035
]
],
[
[
43900,
43900
],
"mapped",
[
5036
]
],
[
[
43901,
43901
],
"mapped",
[
5037
]
],
[
[
43902,
43902
],
"mapped",
[
5038
]
],
[
[
43903,
43903
],
"mapped",
[
5039
]
],
[
[
43904,
43904
],
"mapped",
[
5040
]
],
[
[
43905,
43905
],
"mapped",
[
5041
]
],
[
[
43906,
43906
],
"mapped",
[
5042
]
],
[
[
43907,
43907
],
"mapped",
[
5043
]
],
[
[
43908,
43908
],
"mapped",
[
5044
]
],
[
[
43909,
43909
],
"mapped",
[
5045
]
],
[
[
43910,
43910
],
"mapped",
[
5046
]
],
[
[
43911,
43911
],
"mapped",
[
5047
]
],
[
[
43912,
43912
],
"mapped",
[
5048
]
],
[
[
43913,
43913
],
"mapped",
[
5049
]
],
[
[
43914,
43914
],
"mapped",
[
5050
]
],
[
[
43915,
43915
],
"mapped",
[
5051
]
],
[
[
43916,
43916
],
"mapped",
[
5052
]
],
[
[
43917,
43917
],
"mapped",
[
5053
]
],
[
[
43918,
43918
],
"mapped",
[
5054
]
],
[
[
43919,
43919
],
"mapped",
[
5055
]
],
[
[
43920,
43920
],
"mapped",
[
5056
]
],
[
[
43921,
43921
],
"mapped",
[
5057
]
],
[
[
43922,
43922
],
"mapped",
[
5058
]
],
[
[
43923,
43923
],
"mapped",
[
5059
]
],
[
[
43924,
43924
],
"mapped",
[
5060
]
],
[
[
43925,
43925
],
"mapped",
[
5061
]
],
[
[
43926,
43926
],
"mapped",
[
5062
]
],
[
[
43927,
43927
],
"mapped",
[
5063
]
],
[
[
43928,
43928
],
"mapped",
[
5064
]
],
[
[
43929,
43929
],
"mapped",
[
5065
]
],
[
[
43930,
43930
],
"mapped",
[
5066
]
],
[
[
43931,
43931
],
"mapped",
[
5067
]
],
[
[
43932,
43932
],
"mapped",
[
5068
]
],
[
[
43933,
43933
],
"mapped",
[
5069
]
],
[
[
43934,
43934
],
"mapped",
[
5070
]
],
[
[
43935,
43935
],
"mapped",
[
5071
]
],
[
[
43936,
43936
],
"mapped",
[
5072
]
],
[
[
43937,
43937
],
"mapped",
[
5073
]
],
[
[
43938,
43938
],
"mapped",
[
5074
]
],
[
[
43939,
43939
],
"mapped",
[
5075
]
],
[
[
43940,
43940
],
"mapped",
[
5076
]
],
[
[
43941,
43941
],
"mapped",
[
5077
]
],
[
[
43942,
43942
],
"mapped",
[
5078
]
],
[
[
43943,
43943
],
"mapped",
[
5079
]
],
[
[
43944,
43944
],
"mapped",
[
5080
]
],
[
[
43945,
43945
],
"mapped",
[
5081
]
],
[
[
43946,
43946
],
"mapped",
[
5082
]
],
[
[
43947,
43947
],
"mapped",
[
5083
]
],
[
[
43948,
43948
],
"mapped",
[
5084
]
],
[
[
43949,
43949
],
"mapped",
[
5085
]
],
[
[
43950,
43950
],
"mapped",
[
5086
]
],
[
[
43951,
43951
],
"mapped",
[
5087
]
],
[
[
43952,
43952
],
"mapped",
[
5088
]
],
[
[
43953,
43953
],
"mapped",
[
5089
]
],
[
[
43954,
43954
],
"mapped",
[
5090
]
],
[
[
43955,
43955
],
"mapped",
[
5091
]
],
[
[
43956,
43956
],
"mapped",
[
5092
]
],
[
[
43957,
43957
],
"mapped",
[
5093
]
],
[
[
43958,
43958
],
"mapped",
[
5094
]
],
[
[
43959,
43959
],
"mapped",
[
5095
]
],
[
[
43960,
43960
],
"mapped",
[
5096
]
],
[
[
43961,
43961
],
"mapped",
[
5097
]
],
[
[
43962,
43962
],
"mapped",
[
5098
]
],
[
[
43963,
43963
],
"mapped",
[
5099
]
],
[
[
43964,
43964
],
"mapped",
[
5100
]
],
[
[
43965,
43965
],
"mapped",
[
5101
]
],
[
[
43966,
43966
],
"mapped",
[
5102
]
],
[
[
43967,
43967
],
"mapped",
[
5103
]
],
[
[
43968,
44010
],
"valid"
],
[
[
44011,
44011
],
"valid",
[
],
"NV8"
],
[
[
44012,
44013
],
"valid"
],
[
[
44014,
44015
],
"disallowed"
],
[
[
44016,
44025
],
"valid"
],
[
[
44026,
44031
],
"disallowed"
],
[
[
44032,
55203
],
"valid"
],
[
[
55204,
55215
],
"disallowed"
],
[
[
55216,
55238
],
"valid",
[
],
"NV8"
],
[
[
55239,
55242
],
"disallowed"
],
[
[
55243,
55291
],
"valid",
[
],
"NV8"
],
[
[
55292,
55295
],
"disallowed"
],
[
[
55296,
57343
],
"disallowed"
],
[
[
57344,
63743
],
"disallowed"
],
[
[
63744,
63744
],
"mapped",
[
35912
]
],
[
[
63745,
63745
],
"mapped",
[
26356
]
],
[
[
63746,
63746
],
"mapped",
[
36554
]
],
[
[
63747,
63747
],
"mapped",
[
36040
]
],
[
[
63748,
63748
],
"mapped",
[
28369
]
],
[
[
63749,
63749
],
"mapped",
[
20018
]
],
[
[
63750,
63750
],
"mapped",
[
21477
]
],
[
[
63751,
63752
],
"mapped",
[
40860
]
],
[
[
63753,
63753
],
"mapped",
[
22865
]
],
[
[
63754,
63754
],
"mapped",
[
37329
]
],
[
[
63755,
63755
],
"mapped",
[
21895
]
],
[
[
63756,
63756
],
"mapped",
[
22856
]
],
[
[
63757,
63757
],
"mapped",
[
25078
]
],
[
[
63758,
63758
],
"mapped",
[
30313
]
],
[
[
63759,
63759
],
"mapped",
[
32645
]
],
[
[
63760,
63760
],
"mapped",
[
34367
]
],
[
[
63761,
63761
],
"mapped",
[
34746
]
],
[
[
63762,
63762
],
"mapped",
[
35064
]
],
[
[
63763,
63763
],
"mapped",
[
37007
]
],
[
[
63764,
63764
],
"mapped",
[
27138
]
],
[
[
63765,
63765
],
"mapped",
[
27931
]
],
[
[
63766,
63766
],
"mapped",
[
28889
]
],
[
[
63767,
63767
],
"mapped",
[
29662
]
],
[
[
63768,
63768
],
"mapped",
[
33853
]
],
[
[
63769,
63769
],
"mapped",
[
37226
]
],
[
[
63770,
63770
],
"mapped",
[
39409
]
],
[
[
63771,
63771
],
"mapped",
[
20098
]
],
[
[
63772,
63772
],
"mapped",
[
21365
]
],
[
[
63773,
63773
],
"mapped",
[
27396
]
],
[
[
63774,
63774
],
"mapped",
[
29211
]
],
[
[
63775,
63775
],
"mapped",
[
34349
]
],
[
[
63776,
63776
],
"mapped",
[
40478
]
],
[
[
63777,
63777
],
"mapped",
[
23888
]
],
[
[
63778,
63778
],
"mapped",
[
28651
]
],
[
[
63779,
63779
],
"mapped",
[
34253
]
],
[
[
63780,
63780
],
"mapped",
[
35172
]
],
[
[
63781,
63781
],
"mapped",
[
25289
]
],
[
[
63782,
63782
],
"mapped",
[
33240
]
],
[
[
63783,
63783
],
"mapped",
[
34847
]
],
[
[
63784,
63784
],
"mapped",
[
24266
]
],
[
[
63785,
63785
],
"mapped",
[
26391
]
],
[
[
63786,
63786
],
"mapped",
[
28010
]
],
[
[
63787,
63787
],
"mapped",
[
29436
]
],
[
[
63788,
63788
],
"mapped",
[
37070
]
],
[
[
63789,
63789
],
"mapped",
[
20358
]
],
[
[
63790,
63790
],
"mapped",
[
20919
]
],
[
[
63791,
63791
],
"mapped",
[
21214
]
],
[
[
63792,
63792
],
"mapped",
[
25796
]
],
[
[
63793,
63793
],
"mapped",
[
27347
]
],
[
[
63794,
63794
],
"mapped",
[
29200
]
],
[
[
63795,
63795
],
"mapped",
[
30439
]
],
[
[
63796,
63796
],
"mapped",
[
32769
]
],
[
[
63797,
63797
],
"mapped",
[
34310
]
],
[
[
63798,
63798
],
"mapped",
[
34396
]
],
[
[
63799,
63799
],
"mapped",
[
36335
]
],
[
[
63800,
63800
],
"mapped",
[
38706
]
],
[
[
63801,
63801
],
"mapped",
[
39791
]
],
[
[
63802,
63802
],
"mapped",
[
40442
]
],
[
[
63803,
63803
],
"mapped",
[
30860
]
],
[
[
63804,
63804
],
"mapped",
[
31103
]
],
[
[
63805,
63805
],
"mapped",
[
32160
]
],
[
[
63806,
63806
],
"mapped",
[
33737
]
],
[
[
63807,
63807
],
"mapped",
[
37636
]
],
[
[
63808,
63808
],
"mapped",
[
40575
]
],
[
[
63809,
63809
],
"mapped",
[
35542
]
],
[
[
63810,
63810
],
"mapped",
[
22751
]
],
[
[
63811,
63811
],
"mapped",
[
24324
]
],
[
[
63812,
63812
],
"mapped",
[
31840
]
],
[
[
63813,
63813
],
"mapped",
[
32894
]
],
[
[
63814,
63814
],
"mapped",
[
29282
]
],
[
[
63815,
63815
],
"mapped",
[
30922
]
],
[
[
63816,
63816
],
"mapped",
[
36034
]
],
[
[
63817,
63817
],
"mapped",
[
38647
]
],
[
[
63818,
63818
],
"mapped",
[
22744
]
],
[
[
63819,
63819
],
"mapped",
[
23650
]
],
[
[
63820,
63820
],
"mapped",
[
27155
]
],
[
[
63821,
63821
],
"mapped",
[
28122
]
],
[
[
63822,
63822
],
"mapped",
[
28431
]
],
[
[
63823,
63823
],
"mapped",
[
32047
]
],
[
[
63824,
63824
],
"mapped",
[
32311
]
],
[
[
63825,
63825
],
"mapped",
[
38475
]
],
[
[
63826,
63826
],
"mapped",
[
21202
]
],
[
[
63827,
63827
],
"mapped",
[
32907
]
],
[
[
63828,
63828
],
"mapped",
[
20956
]
],
[
[
63829,
63829
],
"mapped",
[
20940
]
],
[
[
63830,
63830
],
"mapped",
[
31260
]
],
[
[
63831,
63831
],
"mapped",
[
32190
]
],
[
[
63832,
63832
],
"mapped",
[
33777
]
],
[
[
63833,
63833
],
"mapped",
[
38517
]
],
[
[
63834,
63834
],
"mapped",
[
35712
]
],
[
[
63835,
63835
],
"mapped",
[
25295
]
],
[
[
63836,
63836
],
"mapped",
[
27138
]
],
[
[
63837,
63837
],
"mapped",
[
35582
]
],
[
[
63838,
63838
],
"mapped",
[
20025
]
],
[
[
63839,
63839
],
"mapped",
[
23527
]
],
[
[
63840,
63840
],
"mapped",
[
24594
]
],
[
[
63841,
63841
],
"mapped",
[
29575
]
],
[
[
63842,
63842
],
"mapped",
[
30064
]
],
[
[
63843,
63843
],
"mapped",
[
21271
]
],
[
[
63844,
63844
],
"mapped",
[
30971
]
],
[
[
63845,
63845
],
"mapped",
[
20415
]
],
[
[
63846,
63846
],
"mapped",
[
24489
]
],
[
[
63847,
63847
],
"mapped",
[
19981
]
],
[
[
63848,
63848
],
"mapped",
[
27852
]
],
[
[
63849,
63849
],
"mapped",
[
25976
]
],
[
[
63850,
63850
],
"mapped",
[
32034
]
],
[
[
63851,
63851
],
"mapped",
[
21443
]
],
[
[
63852,
63852
],
"mapped",
[
22622
]
],
[
[
63853,
63853
],
"mapped",
[
30465
]
],
[
[
63854,
63854
],
"mapped",
[
33865
]
],
[
[
63855,
63855
],
"mapped",
[
35498
]
],
[
[
63856,
63856
],
"mapped",
[
27578
]
],
[
[
63857,
63857
],
"mapped",
[
36784
]
],
[
[
63858,
63858
],
"mapped",
[
27784
]
],
[
[
63859,
63859
],
"mapped",
[
25342
]
],
[
[
63860,
63860
],
"mapped",
[
33509
]
],
[
[
63861,
63861
],
"mapped",
[
25504
]
],
[
[
63862,
63862
],
"mapped",
[
30053
]
],
[
[
63863,
63863
],
"mapped",
[
20142
]
],
[
[
63864,
63864
],
"mapped",
[
20841
]
],
[
[
63865,
63865
],
"mapped",
[
20937
]
],
[
[
63866,
63866
],
"mapped",
[
26753
]
],
[
[
63867,
63867
],
"mapped",
[
31975
]
],
[
[
63868,
63868
],
"mapped",
[
33391
]
],
[
[
63869,
63869
],
"mapped",
[
35538
]
],
[
[
63870,
63870
],
"mapped",
[
37327
]
],
[
[
63871,
63871
],
"mapped",
[
21237
]
],
[
[
63872,
63872
],
"mapped",
[
21570
]
],
[
[
63873,
63873
],
"mapped",
[
22899
]
],
[
[
63874,
63874
],
"mapped",
[
24300
]
],
[
[
63875,
63875
],
"mapped",
[
26053
]
],
[
[
63876,
63876
],
"mapped",
[
28670
]
],
[
[
63877,
63877
],
"mapped",
[
31018
]
],
[
[
63878,
63878
],
"mapped",
[
38317
]
],
[
[
63879,
63879
],
"mapped",
[
39530
]
],
[
[
63880,
63880
],
"mapped",
[
40599
]
],
[
[
63881,
63881
],
"mapped",
[
40654
]
],
[
[
63882,
63882
],
"mapped",
[
21147
]
],
[
[
63883,
63883
],
"mapped",
[
26310
]
],
[
[
63884,
63884
],
"mapped",
[
27511
]
],
[
[
63885,
63885
],
"mapped",
[
36706
]
],
[
[
63886,
63886
],
"mapped",
[
24180
]
],
[
[
63887,
63887
],
"mapped",
[
24976
]
],
[
[
63888,
63888
],
"mapped",
[
25088
]
],
[
[
63889,
63889
],
"mapped",
[
25754
]
],
[
[
63890,
63890
],
"mapped",
[
28451
]
],
[
[
63891,
63891
],
"mapped",
[
29001
]
],
[
[
63892,
63892
],
"mapped",
[
29833
]
],
[
[
63893,
63893
],
"mapped",
[
31178
]
],
[
[
63894,
63894
],
"mapped",
[
32244
]
],
[
[
63895,
63895
],
"mapped",
[
32879
]
],
[
[
63896,
63896
],
"mapped",
[
36646
]
],
[
[
63897,
63897
],
"mapped",
[
34030
]
],
[
[
63898,
63898
],
"mapped",
[
36899
]
],
[
[
63899,
63899
],
"mapped",
[
37706
]
],
[
[
63900,
63900
],
"mapped",
[
21015
]
],
[
[
63901,
63901
],
"mapped",
[
21155
]
],
[
[
63902,
63902
],
"mapped",
[
21693
]
],
[
[
63903,
63903
],
"mapped",
[
28872
]
],
[
[
63904,
63904
],
"mapped",
[
35010
]
],
[
[
63905,
63905
],
"mapped",
[
35498
]
],
[
[
63906,
63906
],
"mapped",
[
24265
]
],
[
[
63907,
63907
],
"mapped",
[
24565
]
],
[
[
63908,
63908
],
"mapped",
[
25467
]
],
[
[
63909,
63909
],
"mapped",
[
27566
]
],
[
[
63910,
63910
],
"mapped",
[
31806
]
],
[
[
63911,
63911
],
"mapped",
[
29557
]
],
[
[
63912,
63912
],
"mapped",
[
20196
]
],
[
[
63913,
63913
],
"mapped",
[
22265
]
],
[
[
63914,
63914
],
"mapped",
[
23527
]
],
[
[
63915,
63915
],
"mapped",
[
23994
]
],
[
[
63916,
63916
],
"mapped",
[
24604
]
],
[
[
63917,
63917
],
"mapped",
[
29618
]
],
[
[
63918,
63918
],
"mapped",
[
29801
]
],
[
[
63919,
63919
],
"mapped",
[
32666
]
],
[
[
63920,
63920
],
"mapped",
[
32838
]
],
[
[
63921,
63921
],
"mapped",
[
37428
]
],
[
[
63922,
63922
],
"mapped",
[
38646
]
],
[
[
63923,
63923
],
"mapped",
[
38728
]
],
[
[
63924,
63924
],
"mapped",
[
38936
]
],
[
[
63925,
63925
],
"mapped",
[
20363
]
],
[
[
63926,
63926
],
"mapped",
[
31150
]
],
[
[
63927,
63927
],
"mapped",
[
37300
]
],
[
[
63928,
63928
],
"mapped",
[
38584
]
],
[
[
63929,
63929
],
"mapped",
[
24801
]
],
[
[
63930,
63930
],
"mapped",
[
20102
]
],
[
[
63931,
63931
],
"mapped",
[
20698
]
],
[
[
63932,
63932
],
"mapped",
[
23534
]
],
[
[
63933,
63933
],
"mapped",
[
23615
]
],
[
[
63934,
63934
],
"mapped",
[
26009
]
],
[
[
63935,
63935
],
"mapped",
[
27138
]
],
[
[
63936,
63936
],
"mapped",
[
29134
]
],
[
[
63937,
63937
],
"mapped",
[
30274
]
],
[
[
63938,
63938
],
"mapped",
[
34044
]
],
[
[
63939,
63939
],
"mapped",
[
36988
]
],
[
[
63940,
63940
],
"mapped",
[
40845
]
],
[
[
63941,
63941
],
"mapped",
[
26248
]
],
[
[
63942,
63942
],
"mapped",
[
38446
]
],
[
[
63943,
63943
],
"mapped",
[
21129
]
],
[
[
63944,
63944
],
"mapped",
[
26491
]
],
[
[
63945,
63945
],
"mapped",
[
26611
]
],
[
[
63946,
63946
],
"mapped",
[
27969
]
],
[
[
63947,
63947
],
"mapped",
[
28316
]
],
[
[
63948,
63948
],
"mapped",
[
29705
]
],
[
[
63949,
63949
],
"mapped",
[
30041
]
],
[
[
63950,
63950
],
"mapped",
[
30827
]
],
[
[
63951,
63951
],
"mapped",
[
32016
]
],
[
[
63952,
63952
],
"mapped",
[
39006
]
],
[
[
63953,
63953
],
"mapped",
[
20845
]
],
[
[
63954,
63954
],
"mapped",
[
25134
]
],
[
[
63955,
63955
],
"mapped",
[
38520
]
],
[
[
63956,
63956
],
"mapped",
[
20523
]
],
[
[
63957,
63957
],
"mapped",
[
23833
]
],
[
[
63958,
63958
],
"mapped",
[
28138
]
],
[
[
63959,
63959
],
"mapped",
[
36650
]
],
[
[
63960,
63960
],
"mapped",
[
24459
]
],
[
[
63961,
63961
],
"mapped",
[
24900
]
],
[
[
63962,
63962
],
"mapped",
[
26647
]
],
[
[
63963,
63963
],
"mapped",
[
29575
]
],
[
[
63964,
63964
],
"mapped",
[
38534
]
],
[
[
63965,
63965
],
"mapped",
[
21033
]
],
[
[
63966,
63966
],
"mapped",
[
21519
]
],
[
[
63967,
63967
],
"mapped",
[
23653
]
],
[
[
63968,
63968
],
"mapped",
[
26131
]
],
[
[
63969,
63969
],
"mapped",
[
26446
]
],
[
[
63970,
63970
],
"mapped",
[
26792
]
],
[
[
63971,
63971
],
"mapped",
[
27877
]
],
[
[
63972,
63972
],
"mapped",
[
29702
]
],
[
[
63973,
63973
],
"mapped",
[
30178
]
],
[
[
63974,
63974
],
"mapped",
[
32633
]
],
[
[
63975,
63975
],
"mapped",
[
35023
]
],
[
[
63976,
63976
],
"mapped",
[
35041
]
],
[
[
63977,
63977
],
"mapped",
[
37324
]
],
[
[
63978,
63978
],
"mapped",
[
38626
]
],
[
[
63979,
63979
],
"mapped",
[
21311
]
],
[
[
63980,
63980
],
"mapped",
[
28346
]
],
[
[
63981,
63981
],
"mapped",
[
21533
]
],
[
[
63982,
63982
],
"mapped",
[
29136
]
],
[
[
63983,
63983
],
"mapped",
[
29848
]
],
[
[
63984,
63984
],
"mapped",
[
34298
]
],
[
[
63985,
63985
],
"mapped",
[
38563
]
],
[
[
63986,
63986
],
"mapped",
[
40023
]
],
[
[
63987,
63987
],
"mapped",
[
40607
]
],
[
[
63988,
63988
],
"mapped",
[
26519
]
],
[
[
63989,
63989
],
"mapped",
[
28107
]
],
[
[
63990,
63990
],
"mapped",
[
33256
]
],
[
[
63991,
63991
],
"mapped",
[
31435
]
],
[
[
63992,
63992
],
"mapped",
[
31520
]
],
[
[
63993,
63993
],
"mapped",
[
31890
]
],
[
[
63994,
63994
],
"mapped",
[
29376
]
],
[
[
63995,
63995
],
"mapped",
[
28825
]
],
[
[
63996,
63996
],
"mapped",
[
35672
]
],
[
[
63997,
63997
],
"mapped",
[
20160
]
],
[
[
63998,
63998
],
"mapped",
[
33590
]
],
[
[
63999,
63999
],
"mapped",
[
21050
]
],
[
[
64000,
64000
],
"mapped",
[
20999
]
],
[
[
64001,
64001
],
"mapped",
[
24230
]
],
[
[
64002,
64002
],
"mapped",
[
25299
]
],
[
[
64003,
64003
],
"mapped",
[
31958
]
],
[
[
64004,
64004
],
"mapped",
[
23429
]
],
[
[
64005,
64005
],
"mapped",
[
27934
]
],
[
[
64006,
64006
],
"mapped",
[
26292
]
],
[
[
64007,
64007
],
"mapped",
[
36667
]
],
[
[
64008,
64008
],
"mapped",
[
34892
]
],
[
[
64009,
64009
],
"mapped",
[
38477
]
],
[
[
64010,
64010
],
"mapped",
[
35211
]
],
[
[
64011,
64011
],
"mapped",
[
24275
]
],
[
[
64012,
64012
],
"mapped",
[
20800
]
],
[
[
64013,
64013
],
"mapped",
[
21952
]
],
[
[
64014,
64015
],
"valid"
],
[
[
64016,
64016
],
"mapped",
[
22618
]
],
[
[
64017,
64017
],
"valid"
],
[
[
64018,
64018
],
"mapped",
[
26228
]
],
[
[
64019,
64020
],
"valid"
],
[
[
64021,
64021
],
"mapped",
[
20958
]
],
[
[
64022,
64022
],
"mapped",
[
29482
]
],
[
[
64023,
64023
],
"mapped",
[
30410
]
],
[
[
64024,
64024
],
"mapped",
[
31036
]
],
[
[
64025,
64025
],
"mapped",
[
31070
]
],
[
[
64026,
64026
],
"mapped",
[
31077
]
],
[
[
64027,
64027
],
"mapped",
[
31119
]
],
[
[
64028,
64028
],
"mapped",
[
38742
]
],
[
[
64029,
64029
],
"mapped",
[
31934
]
],
[
[
64030,
64030
],
"mapped",
[
32701
]
],
[
[
64031,
64031
],
"valid"
],
[
[
64032,
64032
],
"mapped",
[
34322
]
],
[
[
64033,
64033
],
"valid"
],
[
[
64034,
64034
],
"mapped",
[
35576
]
],
[
[
64035,
64036
],
"valid"
],
[
[
64037,
64037
],
"mapped",
[
36920
]
],
[
[
64038,
64038
],
"mapped",
[
37117
]
],
[
[
64039,
64041
],
"valid"
],
[
[
64042,
64042
],
"mapped",
[
39151
]
],
[
[
64043,
64043
],
"mapped",
[
39164
]
],
[
[
64044,
64044
],
"mapped",
[
39208
]
],
[
[
64045,
64045
],
"mapped",
[
40372
]
],
[
[
64046,
64046
],
"mapped",
[
37086
]
],
[
[
64047,
64047
],
"mapped",
[
38583
]
],
[
[
64048,
64048
],
"mapped",
[
20398
]
],
[
[
64049,
64049
],
"mapped",
[
20711
]
],
[
[
64050,
64050
],
"mapped",
[
20813
]
],
[
[
64051,
64051
],
"mapped",
[
21193
]
],
[
[
64052,
64052
],
"mapped",
[
21220
]
],
[
[
64053,
64053
],
"mapped",
[
21329
]
],
[
[
64054,
64054
],
"mapped",
[
21917
]
],
[
[
64055,
64055
],
"mapped",
[
22022
]
],
[
[
64056,
64056
],
"mapped",
[
22120
]
],
[
[
64057,
64057
],
"mapped",
[
22592
]
],
[
[
64058,
64058
],
"mapped",
[
22696
]
],
[
[
64059,
64059
],
"mapped",
[
23652
]
],
[
[
64060,
64060
],
"mapped",
[
23662
]
],
[
[
64061,
64061
],
"mapped",
[
24724
]
],
[
[
64062,
64062
],
"mapped",
[
24936
]
],
[
[
64063,
64063
],
"mapped",
[
24974
]
],
[
[
64064,
64064
],
"mapped",
[
25074
]
],
[
[
64065,
64065
],
"mapped",
[
25935
]
],
[
[
64066,
64066
],
"mapped",
[
26082
]
],
[
[
64067,
64067
],
"mapped",
[
26257
]
],
[
[
64068,
64068
],
"mapped",
[
26757
]
],
[
[
64069,
64069
],
"mapped",
[
28023
]
],
[
[
64070,
64070
],
"mapped",
[
28186
]
],
[
[
64071,
64071
],
"mapped",
[
28450
]
],
[
[
64072,
64072
],
"mapped",
[
29038
]
],
[
[
64073,
64073
],
"mapped",
[
29227
]
],
[
[
64074,
64074
],
"mapped",
[
29730
]
],
[
[
64075,
64075
],
"mapped",
[
30865
]
],
[
[
64076,
64076
],
"mapped",
[
31038
]
],
[
[
64077,
64077
],
"mapped",
[
31049
]
],
[
[
64078,
64078
],
"mapped",
[
31048
]
],
[
[
64079,
64079
],
"mapped",
[
31056
]
],
[
[
64080,
64080
],
"mapped",
[
31062
]
],
[
[
64081,
64081
],
"mapped",
[
31069
]
],
[
[
64082,
64082
],
"mapped",
[
31117
]
],
[
[
64083,
64083
],
"mapped",
[
31118
]
],
[
[
64084,
64084
],
"mapped",
[
31296
]
],
[
[
64085,
64085
],
"mapped",
[
31361
]
],
[
[
64086,
64086
],
"mapped",
[
31680
]
],
[
[
64087,
64087
],
"mapped",
[
32244
]
],
[
[
64088,
64088
],
"mapped",
[
32265
]
],
[
[
64089,
64089
],
"mapped",
[
32321
]
],
[
[
64090,
64090
],
"mapped",
[
32626
]
],
[
[
64091,
64091
],
"mapped",
[
32773
]
],
[
[
64092,
64092
],
"mapped",
[
33261
]
],
[
[
64093,
64094
],
"mapped",
[
33401
]
],
[
[
64095,
64095
],
"mapped",
[
33879
]
],
[
[
64096,
64096
],
"mapped",
[
35088
]
],
[
[
64097,
64097
],
"mapped",
[
35222
]
],
[
[
64098,
64098
],
"mapped",
[
35585
]
],
[
[
64099,
64099
],
"mapped",
[
35641
]
],
[
[
64100,
64100
],
"mapped",
[
36051
]
],
[
[
64101,
64101
],
"mapped",
[
36104
]
],
[
[
64102,
64102
],
"mapped",
[
36790
]
],
[
[
64103,
64103
],
"mapped",
[
36920
]
],
[
[
64104,
64104
],
"mapped",
[
38627
]
],
[
[
64105,
64105
],
"mapped",
[
38911
]
],
[
[
64106,
64106
],
"mapped",
[
38971
]
],
[
[
64107,
64107
],
"mapped",
[
24693
]
],
[
[
64108,
64108
],
"mapped",
[
148206
]
],
[
[
64109,
64109
],
"mapped",
[
33304
]
],
[
[
64110,
64111
],
"disallowed"
],
[
[
64112,
64112
],
"mapped",
[
20006
]
],
[
[
64113,
64113
],
"mapped",
[
20917
]
],
[
[
64114,
64114
],
"mapped",
[
20840
]
],
[
[
64115,
64115
],
"mapped",
[
20352
]
],
[
[
64116,
64116
],
"mapped",
[
20805
]
],
[
[
64117,
64117
],
"mapped",
[
20864
]
],
[
[
64118,
64118
],
"mapped",
[
21191
]
],
[
[
64119,
64119
],
"mapped",
[
21242
]
],
[
[
64120,
64120
],
"mapped",
[
21917
]
],
[
[
64121,
64121
],
"mapped",
[
21845
]
],
[
[
64122,
64122
],
"mapped",
[
21913
]
],
[
[
64123,
64123
],
"mapped",
[
21986
]
],
[
[
64124,
64124
],
"mapped",
[
22618
]
],
[
[
64125,
64125
],
"mapped",
[
22707
]
],
[
[
64126,
64126
],
"mapped",
[
22852
]
],
[
[
64127,
64127
],
"mapped",
[
22868
]
],
[
[
64128,
64128
],
"mapped",
[
23138
]
],
[
[
64129,
64129
],
"mapped",
[
23336
]
],
[
[
64130,
64130
],
"mapped",
[
24274
]
],
[
[
64131,
64131
],
"mapped",
[
24281
]
],
[
[
64132,
64132
],
"mapped",
[
24425
]
],
[
[
64133,
64133
],
"mapped",
[
24493
]
],
[
[
64134,
64134
],
"mapped",
[
24792
]
],
[
[
64135,
64135
],
"mapped",
[
24910
]
],
[
[
64136,
64136
],
"mapped",
[
24840
]
],
[
[
64137,
64137
],
"mapped",
[
24974
]
],
[
[
64138,
64138
],
"mapped",
[
24928
]
],
[
[
64139,
64139
],
"mapped",
[
25074
]
],
[
[
64140,
64140
],
"mapped",
[
25140
]
],
[
[
64141,
64141
],
"mapped",
[
25540
]
],
[
[
64142,
64142
],
"mapped",
[
25628
]
],
[
[
64143,
64143
],
"mapped",
[
25682
]
],
[
[
64144,
64144
],
"mapped",
[
25942
]
],
[
[
64145,
64145
],
"mapped",
[
26228
]
],
[
[
64146,
64146
],
"mapped",
[
26391
]
],
[
[
64147,
64147
],
"mapped",
[
26395
]
],
[
[
64148,
64148
],
"mapped",
[
26454
]
],
[
[
64149,
64149
],
"mapped",
[
27513
]
],
[
[
64150,
64150
],
"mapped",
[
27578
]
],
[
[
64151,
64151
],
"mapped",
[
27969
]
],
[
[
64152,
64152
],
"mapped",
[
28379
]
],
[
[
64153,
64153
],
"mapped",
[
28363
]
],
[
[
64154,
64154
],
"mapped",
[
28450
]
],
[
[
64155,
64155
],
"mapped",
[
28702
]
],
[
[
64156,
64156
],
"mapped",
[
29038
]
],
[
[
64157,
64157
],
"mapped",
[
30631
]
],
[
[
64158,
64158
],
"mapped",
[
29237
]
],
[
[
64159,
64159
],
"mapped",
[
29359
]
],
[
[
64160,
64160
],
"mapped",
[
29482
]
],
[
[
64161,
64161
],
"mapped",
[
29809
]
],
[
[
64162,
64162
],
"mapped",
[
29958
]
],
[
[
64163,
64163
],
"mapped",
[
30011
]
],
[
[
64164,
64164
],
"mapped",
[
30237
]
],
[
[
64165,
64165
],
"mapped",
[
30239
]
],
[
[
64166,
64166
],
"mapped",
[
30410
]
],
[
[
64167,
64167
],
"mapped",
[
30427
]
],
[
[
64168,
64168
],
"mapped",
[
30452
]
],
[
[
64169,
64169
],
"mapped",
[
30538
]
],
[
[
64170,
64170
],
"mapped",
[
30528
]
],
[
[
64171,
64171
],
"mapped",
[
30924
]
],
[
[
64172,
64172
],
"mapped",
[
31409
]
],
[
[
64173,
64173
],
"mapped",
[
31680
]
],
[
[
64174,
64174
],
"mapped",
[
31867
]
],
[
[
64175,
64175
],
"mapped",
[
32091
]
],
[
[
64176,
64176
],
"mapped",
[
32244
]
],
[
[
64177,
64177
],
"mapped",
[
32574
]
],
[
[
64178,
64178
],
"mapped",
[
32773
]
],
[
[
64179,
64179
],
"mapped",
[
33618
]
],
[
[
64180,
64180
],
"mapped",
[
33775
]
],
[
[
64181,
64181
],
"mapped",
[
34681
]
],
[
[
64182,
64182
],
"mapped",
[
35137
]
],
[
[
64183,
64183
],
"mapped",
[
35206
]
],
[
[
64184,
64184
],
"mapped",
[
35222
]
],
[
[
64185,
64185
],
"mapped",
[
35519
]
],
[
[
64186,
64186
],
"mapped",
[
35576
]
],
[
[
64187,
64187
],
"mapped",
[
35531
]
],
[
[
64188,
64188
],
"mapped",
[
35585
]
],
[
[
64189,
64189
],
"mapped",
[
35582
]
],
[
[
64190,
64190
],
"mapped",
[
35565
]
],
[
[
64191,
64191
],
"mapped",
[
35641
]
],
[
[
64192,
64192
],
"mapped",
[
35722
]
],
[
[
64193,
64193
],
"mapped",
[
36104
]
],
[
[
64194,
64194
],
"mapped",
[
36664
]
],
[
[
64195,
64195
],
"mapped",
[
36978
]
],
[
[
64196,
64196
],
"mapped",
[
37273
]
],
[
[
64197,
64197
],
"mapped",
[
37494
]
],
[
[
64198,
64198
],
"mapped",
[
38524
]
],
[
[
64199,
64199
],
"mapped",
[
38627
]
],
[
[
64200,
64200
],
"mapped",
[
38742
]
],
[
[
64201,
64201
],
"mapped",
[
38875
]
],
[
[
64202,
64202
],
"mapped",
[
38911
]
],
[
[
64203,
64203
],
"mapped",
[
38923
]
],
[
[
64204,
64204
],
"mapped",
[
38971
]
],
[
[
64205,
64205
],
"mapped",
[
39698
]
],
[
[
64206,
64206
],
"mapped",
[
40860
]
],
[
[
64207,
64207
],
"mapped",
[
141386
]
],
[
[
64208,
64208
],
"mapped",
[
141380
]
],
[
[
64209,
64209
],
"mapped",
[
144341
]
],
[
[
64210,
64210
],
"mapped",
[
15261
]
],
[
[
64211,
64211
],
"mapped",
[
16408
]
],
[
[
64212,
64212
],
"mapped",
[
16441
]
],
[
[
64213,
64213
],
"mapped",
[
152137
]
],
[
[
64214,
64214
],
"mapped",
[
154832
]
],
[
[
64215,
64215
],
"mapped",
[
163539
]
],
[
[
64216,
64216
],
"mapped",
[
40771
]
],
[
[
64217,
64217
],
"mapped",
[
40846
]
],
[
[
64218,
64255
],
"disallowed"
],
[
[
64256,
64256
],
"mapped",
[
102,
102
]
],
[
[
64257,
64257
],
"mapped",
[
102,
105
]
],
[
[
64258,
64258
],
"mapped",
[
102,
108
]
],
[
[
64259,
64259
],
"mapped",
[
102,
102,
105
]
],
[
[
64260,
64260
],
"mapped",
[
102,
102,
108
]
],
[
[
64261,
64262
],
"mapped",
[
115,
116
]
],
[
[
64263,
64274
],
"disallowed"
],
[
[
64275,
64275
],
"mapped",
[
1396,
1398
]
],
[
[
64276,
64276
],
"mapped",
[
1396,
1381
]
],
[
[
64277,
64277
],
"mapped",
[
1396,
1387
]
],
[
[
64278,
64278
],
"mapped",
[
1406,
1398
]
],
[
[
64279,
64279
],
"mapped",
[
1396,
1389
]
],
[
[
64280,
64284
],
"disallowed"
],
[
[
64285,
64285
],
"mapped",
[
1497,
1460
]
],
[
[
64286,
64286
],
"valid"
],
[
[
64287,
64287
],
"mapped",
[
1522,
1463
]
],
[
[
64288,
64288
],
"mapped",
[
1506
]
],
[
[
64289,
64289
],
"mapped",
[
1488
]
],
[
[
64290,
64290
],
"mapped",
[
1491
]
],
[
[
64291,
64291
],
"mapped",
[
1492
]
],
[
[
64292,
64292
],
"mapped",
[
1499
]
],
[
[
64293,
64293
],
"mapped",
[
1500
]
],
[
[
64294,
64294
],
"mapped",
[
1501
]
],
[
[
64295,
64295
],
"mapped",
[
1512
]
],
[
[
64296,
64296
],
"mapped",
[
1514
]
],
[
[
64297,
64297
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
64298,
64298
],
"mapped",
[
1513,
1473
]
],
[
[
64299,
64299
],
"mapped",
[
1513,
1474
]
],
[
[
64300,
64300
],
"mapped",
[
1513,
1468,
1473
]
],
[
[
64301,
64301
],
"mapped",
[
1513,
1468,
1474
]
],
[
[
64302,
64302
],
"mapped",
[
1488,
1463
]
],
[
[
64303,
64303
],
"mapped",
[
1488,
1464
]
],
[
[
64304,
64304
],
"mapped",
[
1488,
1468
]
],
[
[
64305,
64305
],
"mapped",
[
1489,
1468
]
],
[
[
64306,
64306
],
"mapped",
[
1490,
1468
]
],
[
[
64307,
64307
],
"mapped",
[
1491,
1468
]
],
[
[
64308,
64308
],
"mapped",
[
1492,
1468
]
],
[
[
64309,
64309
],
"mapped",
[
1493,
1468
]
],
[
[
64310,
64310
],
"mapped",
[
1494,
1468
]
],
[
[
64311,
64311
],
"disallowed"
],
[
[
64312,
64312
],
"mapped",
[
1496,
1468
]
],
[
[
64313,
64313
],
"mapped",
[
1497,
1468
]
],
[
[
64314,
64314
],
"mapped",
[
1498,
1468
]
],
[
[
64315,
64315
],
"mapped",
[
1499,
1468
]
],
[
[
64316,
64316
],
"mapped",
[
1500,
1468
]
],
[
[
64317,
64317
],
"disallowed"
],
[
[
64318,
64318
],
"mapped",
[
1502,
1468
]
],
[
[
64319,
64319
],
"disallowed"
],
[
[
64320,
64320
],
"mapped",
[
1504,
1468
]
],
[
[
64321,
64321
],
"mapped",
[
1505,
1468
]
],
[
[
64322,
64322
],
"disallowed"
],
[
[
64323,
64323
],
"mapped",
[
1507,
1468
]
],
[
[
64324,
64324
],
"mapped",
[
1508,
1468
]
],
[
[
64325,
64325
],
"disallowed"
],
[
[
64326,
64326
],
"mapped",
[
1510,
1468
]
],
[
[
64327,
64327
],
"mapped",
[
1511,
1468
]
],
[
[
64328,
64328
],
"mapped",
[
1512,
1468
]
],
[
[
64329,
64329
],
"mapped",
[
1513,
1468
]
],
[
[
64330,
64330
],
"mapped",
[
1514,
1468
]
],
[
[
64331,
64331
],
"mapped",
[
1493,
1465
]
],
[
[
64332,
64332
],
"mapped",
[
1489,
1471
]
],
[
[
64333,
64333
],
"mapped",
[
1499,
1471
]
],
[
[
64334,
64334
],
"mapped",
[
1508,
1471
]
],
[
[
64335,
64335
],
"mapped",
[
1488,
1500
]
],
[
[
64336,
64337
],
"mapped",
[
1649
]
],
[
[
64338,
64341
],
"mapped",
[
1659
]
],
[
[
64342,
64345
],
"mapped",
[
1662
]
],
[
[
64346,
64349
],
"mapped",
[
1664
]
],
[
[
64350,
64353
],
"mapped",
[
1658
]
],
[
[
64354,
64357
],
"mapped",
[
1663
]
],
[
[
64358,
64361
],
"mapped",
[
1657
]
],
[
[
64362,
64365
],
"mapped",
[
1700
]
],
[
[
64366,
64369
],
"mapped",
[
1702
]
],
[
[
64370,
64373
],
"mapped",
[
1668
]
],
[
[
64374,
64377
],
"mapped",
[
1667
]
],
[
[
64378,
64381
],
"mapped",
[
1670
]
],
[
[
64382,
64385
],
"mapped",
[
1671
]
],
[
[
64386,
64387
],
"mapped",
[
1677
]
],
[
[
64388,
64389
],
"mapped",
[
1676
]
],
[
[
64390,
64391
],
"mapped",
[
1678
]
],
[
[
64392,
64393
],
"mapped",
[
1672
]
],
[
[
64394,
64395
],
"mapped",
[
1688
]
],
[
[
64396,
64397
],
"mapped",
[
1681
]
],
[
[
64398,
64401
],
"mapped",
[
1705
]
],
[
[
64402,
64405
],
"mapped",
[
1711
]
],
[
[
64406,
64409
],
"mapped",
[
1715
]
],
[
[
64410,
64413
],
"mapped",
[
1713
]
],
[
[
64414,
64415
],
"mapped",
[
1722
]
],
[
[
64416,
64419
],
"mapped",
[
1723
]
],
[
[
64420,
64421
],
"mapped",
[
1728
]
],
[
[
64422,
64425
],
"mapped",
[
1729
]
],
[
[
64426,
64429
],
"mapped",
[
1726
]
],
[
[
64430,
64431
],
"mapped",
[
1746
]
],
[
[
64432,
64433
],
"mapped",
[
1747
]
],
[
[
64434,
64449
],
"valid",
[
],
"NV8"
],
[
[
64450,
64466
],
"disallowed"
],
[
[
64467,
64470
],
"mapped",
[
1709
]
],
[
[
64471,
64472
],
"mapped",
[
1735
]
],
[
[
64473,
64474
],
"mapped",
[
1734
]
],
[
[
64475,
64476
],
"mapped",
[
1736
]
],
[
[
64477,
64477
],
"mapped",
[
1735,
1652
]
],
[
[
64478,
64479
],
"mapped",
[
1739
]
],
[
[
64480,
64481
],
"mapped",
[
1733
]
],
[
[
64482,
64483
],
"mapped",
[
1737
]
],
[
[
64484,
64487
],
"mapped",
[
1744
]
],
[
[
64488,
64489
],
"mapped",
[
1609
]
],
[
[
64490,
64491
],
"mapped",
[
1574,
1575
]
],
[
[
64492,
64493
],
"mapped",
[
1574,
1749
]
],
[
[
64494,
64495
],
"mapped",
[
1574,
1608
]
],
[
[
64496,
64497
],
"mapped",
[
1574,
1735
]
],
[
[
64498,
64499
],
"mapped",
[
1574,
1734
]
],
[
[
64500,
64501
],
"mapped",
[
1574,
1736
]
],
[
[
64502,
64504
],
"mapped",
[
1574,
1744
]
],
[
[
64505,
64507
],
"mapped",
[
1574,
1609
]
],
[
[
64508,
64511
],
"mapped",
[
1740
]
],
[
[
64512,
64512
],
"mapped",
[
1574,
1580
]
],
[
[
64513,
64513
],
"mapped",
[
1574,
1581
]
],
[
[
64514,
64514
],
"mapped",
[
1574,
1605
]
],
[
[
64515,
64515
],
"mapped",
[
1574,
1609
]
],
[
[
64516,
64516
],
"mapped",
[
1574,
1610
]
],
[
[
64517,
64517
],
"mapped",
[
1576,
1580
]
],
[
[
64518,
64518
],
"mapped",
[
1576,
1581
]
],
[
[
64519,
64519
],
"mapped",
[
1576,
1582
]
],
[
[
64520,
64520
],
"mapped",
[
1576,
1605
]
],
[
[
64521,
64521
],
"mapped",
[
1576,
1609
]
],
[
[
64522,
64522
],
"mapped",
[
1576,
1610
]
],
[
[
64523,
64523
],
"mapped",
[
1578,
1580
]
],
[
[
64524,
64524
],
"mapped",
[
1578,
1581
]
],
[
[
64525,
64525
],
"mapped",
[
1578,
1582
]
],
[
[
64526,
64526
],
"mapped",
[
1578,
1605
]
],
[
[
64527,
64527
],
"mapped",
[
1578,
1609
]
],
[
[
64528,
64528
],
"mapped",
[
1578,
1610
]
],
[
[
64529,
64529
],
"mapped",
[
1579,
1580
]
],
[
[
64530,
64530
],
"mapped",
[
1579,
1605
]
],
[
[
64531,
64531
],
"mapped",
[
1579,
1609
]
],
[
[
64532,
64532
],
"mapped",
[
1579,
1610
]
],
[
[
64533,
64533
],
"mapped",
[
1580,
1581
]
],
[
[
64534,
64534
],
"mapped",
[
1580,
1605
]
],
[
[
64535,
64535
],
"mapped",
[
1581,
1580
]
],
[
[
64536,
64536
],
"mapped",
[
1581,
1605
]
],
[
[
64537,
64537
],
"mapped",
[
1582,
1580
]
],
[
[
64538,
64538
],
"mapped",
[
1582,
1581
]
],
[
[
64539,
64539
],
"mapped",
[
1582,
1605
]
],
[
[
64540,
64540
],
"mapped",
[
1587,
1580
]
],
[
[
64541,
64541
],
"mapped",
[
1587,
1581
]
],
[
[
64542,
64542
],
"mapped",
[
1587,
1582
]
],
[
[
64543,
64543
],
"mapped",
[
1587,
1605
]
],
[
[
64544,
64544
],
"mapped",
[
1589,
1581
]
],
[
[
64545,
64545
],
"mapped",
[
1589,
1605
]
],
[
[
64546,
64546
],
"mapped",
[
1590,
1580
]
],
[
[
64547,
64547
],
"mapped",
[
1590,
1581
]
],
[
[
64548,
64548
],
"mapped",
[
1590,
1582
]
],
[
[
64549,
64549
],
"mapped",
[
1590,
1605
]
],
[
[
64550,
64550
],
"mapped",
[
1591,
1581
]
],
[
[
64551,
64551
],
"mapped",
[
1591,
1605
]
],
[
[
64552,
64552
],
"mapped",
[
1592,
1605
]
],
[
[
64553,
64553
],
"mapped",
[
1593,
1580
]
],
[
[
64554,
64554
],
"mapped",
[
1593,
1605
]
],
[
[
64555,
64555
],
"mapped",
[
1594,
1580
]
],
[
[
64556,
64556
],
"mapped",
[
1594,
1605
]
],
[
[
64557,
64557
],
"mapped",
[
1601,
1580
]
],
[
[
64558,
64558
],
"mapped",
[
1601,
1581
]
],
[
[
64559,
64559
],
"mapped",
[
1601,
1582
]
],
[
[
64560,
64560
],
"mapped",
[
1601,
1605
]
],
[
[
64561,
64561
],
"mapped",
[
1601,
1609
]
],
[
[
64562,
64562
],
"mapped",
[
1601,
1610
]
],
[
[
64563,
64563
],
"mapped",
[
1602,
1581
]
],
[
[
64564,
64564
],
"mapped",
[
1602,
1605
]
],
[
[
64565,
64565
],
"mapped",
[
1602,
1609
]
],
[
[
64566,
64566
],
"mapped",
[
1602,
1610
]
],
[
[
64567,
64567
],
"mapped",
[
1603,
1575
]
],
[
[
64568,
64568
],
"mapped",
[
1603,
1580
]
],
[
[
64569,
64569
],
"mapped",
[
1603,
1581
]
],
[
[
64570,
64570
],
"mapped",
[
1603,
1582
]
],
[
[
64571,
64571
],
"mapped",
[
1603,
1604
]
],
[
[
64572,
64572
],
"mapped",
[
1603,
1605
]
],
[
[
64573,
64573
],
"mapped",
[
1603,
1609
]
],
[
[
64574,
64574
],
"mapped",
[
1603,
1610
]
],
[
[
64575,
64575
],
"mapped",
[
1604,
1580
]
],
[
[
64576,
64576
],
"mapped",
[
1604,
1581
]
],
[
[
64577,
64577
],
"mapped",
[
1604,
1582
]
],
[
[
64578,
64578
],
"mapped",
[
1604,
1605
]
],
[
[
64579,
64579
],
"mapped",
[
1604,
1609
]
],
[
[
64580,
64580
],
"mapped",
[
1604,
1610
]
],
[
[
64581,
64581
],
"mapped",
[
1605,
1580
]
],
[
[
64582,
64582
],
"mapped",
[
1605,
1581
]
],
[
[
64583,
64583
],
"mapped",
[
1605,
1582
]
],
[
[
64584,
64584
],
"mapped",
[
1605,
1605
]
],
[
[
64585,
64585
],
"mapped",
[
1605,
1609
]
],
[
[
64586,
64586
],
"mapped",
[
1605,
1610
]
],
[
[
64587,
64587
],
"mapped",
[
1606,
1580
]
],
[
[
64588,
64588
],
"mapped",
[
1606,
1581
]
],
[
[
64589,
64589
],
"mapped",
[
1606,
1582
]
],
[
[
64590,
64590
],
"mapped",
[
1606,
1605
]
],
[
[
64591,
64591
],
"mapped",
[
1606,
1609
]
],
[
[
64592,
64592
],
"mapped",
[
1606,
1610
]
],
[
[
64593,
64593
],
"mapped",
[
1607,
1580
]
],
[
[
64594,
64594
],
"mapped",
[
1607,
1605
]
],
[
[
64595,
64595
],
"mapped",
[
1607,
1609
]
],
[
[
64596,
64596
],
"mapped",
[
1607,
1610
]
],
[
[
64597,
64597
],
"mapped",
[
1610,
1580
]
],
[
[
64598,
64598
],
"mapped",
[
1610,
1581
]
],
[
[
64599,
64599
],
"mapped",
[
1610,
1582
]
],
[
[
64600,
64600
],
"mapped",
[
1610,
1605
]
],
[
[
64601,
64601
],
"mapped",
[
1610,
1609
]
],
[
[
64602,
64602
],
"mapped",
[
1610,
1610
]
],
[
[
64603,
64603
],
"mapped",
[
1584,
1648
]
],
[
[
64604,
64604
],
"mapped",
[
1585,
1648
]
],
[
[
64605,
64605
],
"mapped",
[
1609,
1648
]
],
[
[
64606,
64606
],
"disallowed_STD3_mapped",
[
32,
1612,
1617
]
],
[
[
64607,
64607
],
"disallowed_STD3_mapped",
[
32,
1613,
1617
]
],
[
[
64608,
64608
],
"disallowed_STD3_mapped",
[
32,
1614,
1617
]
],
[
[
64609,
64609
],
"disallowed_STD3_mapped",
[
32,
1615,
1617
]
],
[
[
64610,
64610
],
"disallowed_STD3_mapped",
[
32,
1616,
1617
]
],
[
[
64611,
64611
],
"disallowed_STD3_mapped",
[
32,
1617,
1648
]
],
[
[
64612,
64612
],
"mapped",
[
1574,
1585
]
],
[
[
64613,
64613
],
"mapped",
[
1574,
1586
]
],
[
[
64614,
64614
],
"mapped",
[
1574,
1605
]
],
[
[
64615,
64615
],
"mapped",
[
1574,
1606
]
],
[
[
64616,
64616
],
"mapped",
[
1574,
1609
]
],
[
[
64617,
64617
],
"mapped",
[
1574,
1610
]
],
[
[
64618,
64618
],
"mapped",
[
1576,
1585
]
],
[
[
64619,
64619
],
"mapped",
[
1576,
1586
]
],
[
[
64620,
64620
],
"mapped",
[
1576,
1605
]
],
[
[
64621,
64621
],
"mapped",
[
1576,
1606
]
],
[
[
64622,
64622
],
"mapped",
[
1576,
1609
]
],
[
[
64623,
64623
],
"mapped",
[
1576,
1610
]
],
[
[
64624,
64624
],
"mapped",
[
1578,
1585
]
],
[
[
64625,
64625
],
"mapped",
[
1578,
1586
]
],
[
[
64626,
64626
],
"mapped",
[
1578,
1605
]
],
[
[
64627,
64627
],
"mapped",
[
1578,
1606
]
],
[
[
64628,
64628
],
"mapped",
[
1578,
1609
]
],
[
[
64629,
64629
],
"mapped",
[
1578,
1610
]
],
[
[
64630,
64630
],
"mapped",
[
1579,
1585
]
],
[
[
64631,
64631
],
"mapped",
[
1579,
1586
]
],
[
[
64632,
64632
],
"mapped",
[
1579,
1605
]
],
[
[
64633,
64633
],
"mapped",
[
1579,
1606
]
],
[
[
64634,
64634
],
"mapped",
[
1579,
1609
]
],
[
[
64635,
64635
],
"mapped",
[
1579,
1610
]
],
[
[
64636,
64636
],
"mapped",
[
1601,
1609
]
],
[
[
64637,
64637
],
"mapped",
[
1601,
1610
]
],
[
[
64638,
64638
],
"mapped",
[
1602,
1609
]
],
[
[
64639,
64639
],
"mapped",
[
1602,
1610
]
],
[
[
64640,
64640
],
"mapped",
[
1603,
1575
]
],
[
[
64641,
64641
],
"mapped",
[
1603,
1604
]
],
[
[
64642,
64642
],
"mapped",
[
1603,
1605
]
],
[
[
64643,
64643
],
"mapped",
[
1603,
1609
]
],
[
[
64644,
64644
],
"mapped",
[
1603,
1610
]
],
[
[
64645,
64645
],
"mapped",
[
1604,
1605
]
],
[
[
64646,
64646
],
"mapped",
[
1604,
1609
]
],
[
[
64647,
64647
],
"mapped",
[
1604,
1610
]
],
[
[
64648,
64648
],
"mapped",
[
1605,
1575
]
],
[
[
64649,
64649
],
"mapped",
[
1605,
1605
]
],
[
[
64650,
64650
],
"mapped",
[
1606,
1585
]
],
[
[
64651,
64651
],
"mapped",
[
1606,
1586
]
],
[
[
64652,
64652
],
"mapped",
[
1606,
1605
]
],
[
[
64653,
64653
],
"mapped",
[
1606,
1606
]
],
[
[
64654,
64654
],
"mapped",
[
1606,
1609
]
],
[
[
64655,
64655
],
"mapped",
[
1606,
1610
]
],
[
[
64656,
64656
],
"mapped",
[
1609,
1648
]
],
[
[
64657,
64657
],
"mapped",
[
1610,
1585
]
],
[
[
64658,
64658
],
"mapped",
[
1610,
1586
]
],
[
[
64659,
64659
],
"mapped",
[
1610,
1605
]
],
[
[
64660,
64660
],
"mapped",
[
1610,
1606
]
],
[
[
64661,
64661
],
"mapped",
[
1610,
1609
]
],
[
[
64662,
64662
],
"mapped",
[
1610,
1610
]
],
[
[
64663,
64663
],
"mapped",
[
1574,
1580
]
],
[
[
64664,
64664
],
"mapped",
[
1574,
1581
]
],
[
[
64665,
64665
],
"mapped",
[
1574,
1582
]
],
[
[
64666,
64666
],
"mapped",
[
1574,
1605
]
],
[
[
64667,
64667
],
"mapped",
[
1574,
1607
]
],
[
[
64668,
64668
],
"mapped",
[
1576,
1580
]
],
[
[
64669,
64669
],
"mapped",
[
1576,
1581
]
],
[
[
64670,
64670
],
"mapped",
[
1576,
1582
]
],
[
[
64671,
64671
],
"mapped",
[
1576,
1605
]
],
[
[
64672,
64672
],
"mapped",
[
1576,
1607
]
],
[
[
64673,
64673
],
"mapped",
[
1578,
1580
]
],
[
[
64674,
64674
],
"mapped",
[
1578,
1581
]
],
[
[
64675,
64675
],
"mapped",
[
1578,
1582
]
],
[
[
64676,
64676
],
"mapped",
[
1578,
1605
]
],
[
[
64677,
64677
],
"mapped",
[
1578,
1607
]
],
[
[
64678,
64678
],
"mapped",
[
1579,
1605
]
],
[
[
64679,
64679
],
"mapped",
[
1580,
1581
]
],
[
[
64680,
64680
],
"mapped",
[
1580,
1605
]
],
[
[
64681,
64681
],
"mapped",
[
1581,
1580
]
],
[
[
64682,
64682
],
"mapped",
[
1581,
1605
]
],
[
[
64683,
64683
],
"mapped",
[
1582,
1580
]
],
[
[
64684,
64684
],
"mapped",
[
1582,
1605
]
],
[
[
64685,
64685
],
"mapped",
[
1587,
1580
]
],
[
[
64686,
64686
],
"mapped",
[
1587,
1581
]
],
[
[
64687,
64687
],
"mapped",
[
1587,
1582
]
],
[
[
64688,
64688
],
"mapped",
[
1587,
1605
]
],
[
[
64689,
64689
],
"mapped",
[
1589,
1581
]
],
[
[
64690,
64690
],
"mapped",
[
1589,
1582
]
],
[
[
64691,
64691
],
"mapped",
[
1589,
1605
]
],
[
[
64692,
64692
],
"mapped",
[
1590,
1580
]
],
[
[
64693,
64693
],
"mapped",
[
1590,
1581
]
],
[
[
64694,
64694
],
"mapped",
[
1590,
1582
]
],
[
[
64695,
64695
],
"mapped",
[
1590,
1605
]
],
[
[
64696,
64696
],
"mapped",
[
1591,
1581
]
],
[
[
64697,
64697
],
"mapped",
[
1592,
1605
]
],
[
[
64698,
64698
],
"mapped",
[
1593,
1580
]
],
[
[
64699,
64699
],
"mapped",
[
1593,
1605
]
],
[
[
64700,
64700
],
"mapped",
[
1594,
1580
]
],
[
[
64701,
64701
],
"mapped",
[
1594,
1605
]
],
[
[
64702,
64702
],
"mapped",
[
1601,
1580
]
],
[
[
64703,
64703
],
"mapped",
[
1601,
1581
]
],
[
[
64704,
64704
],
"mapped",
[
1601,
1582
]
],
[
[
64705,
64705
],
"mapped",
[
1601,
1605
]
],
[
[
64706,
64706
],
"mapped",
[
1602,
1581
]
],
[
[
64707,
64707
],
"mapped",
[
1602,
1605
]
],
[
[
64708,
64708
],
"mapped",
[
1603,
1580
]
],
[
[
64709,
64709
],
"mapped",
[
1603,
1581
]
],
[
[
64710,
64710
],
"mapped",
[
1603,
1582
]
],
[
[
64711,
64711
],
"mapped",
[
1603,
1604
]
],
[
[
64712,
64712
],
"mapped",
[
1603,
1605
]
],
[
[
64713,
64713
],
"mapped",
[
1604,
1580
]
],
[
[
64714,
64714
],
"mapped",
[
1604,
1581
]
],
[
[
64715,
64715
],
"mapped",
[
1604,
1582
]
],
[
[
64716,
64716
],
"mapped",
[
1604,
1605
]
],
[
[
64717,
64717
],
"mapped",
[
1604,
1607
]
],
[
[
64718,
64718
],
"mapped",
[
1605,
1580
]
],
[
[
64719,
64719
],
"mapped",
[
1605,
1581
]
],
[
[
64720,
64720
],
"mapped",
[
1605,
1582
]
],
[
[
64721,
64721
],
"mapped",
[
1605,
1605
]
],
[
[
64722,
64722
],
"mapped",
[
1606,
1580
]
],
[
[
64723,
64723
],
"mapped",
[
1606,
1581
]
],
[
[
64724,
64724
],
"mapped",
[
1606,
1582
]
],
[
[
64725,
64725
],
"mapped",
[
1606,
1605
]
],
[
[
64726,
64726
],
"mapped",
[
1606,
1607
]
],
[
[
64727,
64727
],
"mapped",
[
1607,
1580
]
],
[
[
64728,
64728
],
"mapped",
[
1607,
1605
]
],
[
[
64729,
64729
],
"mapped",
[
1607,
1648
]
],
[
[
64730,
64730
],
"mapped",
[
1610,
1580
]
],
[
[
64731,
64731
],
"mapped",
[
1610,
1581
]
],
[
[
64732,
64732
],
"mapped",
[
1610,
1582
]
],
[
[
64733,
64733
],
"mapped",
[
1610,
1605
]
],
[
[
64734,
64734
],
"mapped",
[
1610,
1607
]
],
[
[
64735,
64735
],
"mapped",
[
1574,
1605
]
],
[
[
64736,
64736
],
"mapped",
[
1574,
1607
]
],
[
[
64737,
64737
],
"mapped",
[
1576,
1605
]
],
[
[
64738,
64738
],
"mapped",
[
1576,
1607
]
],
[
[
64739,
64739
],
"mapped",
[
1578,
1605
]
],
[
[
64740,
64740
],
"mapped",
[
1578,
1607
]
],
[
[
64741,
64741
],
"mapped",
[
1579,
1605
]
],
[
[
64742,
64742
],
"mapped",
[
1579,
1607
]
],
[
[
64743,
64743
],
"mapped",
[
1587,
1605
]
],
[
[
64744,
64744
],
"mapped",
[
1587,
1607
]
],
[
[
64745,
64745
],
"mapped",
[
1588,
1605
]
],
[
[
64746,
64746
],
"mapped",
[
1588,
1607
]
],
[
[
64747,
64747
],
"mapped",
[
1603,
1604
]
],
[
[
64748,
64748
],
"mapped",
[
1603,
1605
]
],
[
[
64749,
64749
],
"mapped",
[
1604,
1605
]
],
[
[
64750,
64750
],
"mapped",
[
1606,
1605
]
],
[
[
64751,
64751
],
"mapped",
[
1606,
1607
]
],
[
[
64752,
64752
],
"mapped",
[
1610,
1605
]
],
[
[
64753,
64753
],
"mapped",
[
1610,
1607
]
],
[
[
64754,
64754
],
"mapped",
[
1600,
1614,
1617
]
],
[
[
64755,
64755
],
"mapped",
[
1600,
1615,
1617
]
],
[
[
64756,
64756
],
"mapped",
[
1600,
1616,
1617
]
],
[
[
64757,
64757
],
"mapped",
[
1591,
1609
]
],
[
[
64758,
64758
],
"mapped",
[
1591,
1610
]
],
[
[
64759,
64759
],
"mapped",
[
1593,
1609
]
],
[
[
64760,
64760
],
"mapped",
[
1593,
1610
]
],
[
[
64761,
64761
],
"mapped",
[
1594,
1609
]
],
[
[
64762,
64762
],
"mapped",
[
1594,
1610
]
],
[
[
64763,
64763
],
"mapped",
[
1587,
1609
]
],
[
[
64764,
64764
],
"mapped",
[
1587,
1610
]
],
[
[
64765,
64765
],
"mapped",
[
1588,
1609
]
],
[
[
64766,
64766
],
"mapped",
[
1588,
1610
]
],
[
[
64767,
64767
],
"mapped",
[
1581,
1609
]
],
[
[
64768,
64768
],
"mapped",
[
1581,
1610
]
],
[
[
64769,
64769
],
"mapped",
[
1580,
1609
]
],
[
[
64770,
64770
],
"mapped",
[
1580,
1610
]
],
[
[
64771,
64771
],
"mapped",
[
1582,
1609
]
],
[
[
64772,
64772
],
"mapped",
[
1582,
1610
]
],
[
[
64773,
64773
],
"mapped",
[
1589,
1609
]
],
[
[
64774,
64774
],
"mapped",
[
1589,
1610
]
],
[
[
64775,
64775
],
"mapped",
[
1590,
1609
]
],
[
[
64776,
64776
],
"mapped",
[
1590,
1610
]
],
[
[
64777,
64777
],
"mapped",
[
1588,
1580
]
],
[
[
64778,
64778
],
"mapped",
[
1588,
1581
]
],
[
[
64779,
64779
],
"mapped",
[
1588,
1582
]
],
[
[
64780,
64780
],
"mapped",
[
1588,
1605
]
],
[
[
64781,
64781
],
"mapped",
[
1588,
1585
]
],
[
[
64782,
64782
],
"mapped",
[
1587,
1585
]
],
[
[
64783,
64783
],
"mapped",
[
1589,
1585
]
],
[
[
64784,
64784
],
"mapped",
[
1590,
1585
]
],
[
[
64785,
64785
],
"mapped",
[
1591,
1609
]
],
[
[
64786,
64786
],
"mapped",
[
1591,
1610
]
],
[
[
64787,
64787
],
"mapped",
[
1593,
1609
]
],
[
[
64788,
64788
],
"mapped",
[
1593,
1610
]
],
[
[
64789,
64789
],
"mapped",
[
1594,
1609
]
],
[
[
64790,
64790
],
"mapped",
[
1594,
1610
]
],
[
[
64791,
64791
],
"mapped",
[
1587,
1609
]
],
[
[
64792,
64792
],
"mapped",
[
1587,
1610
]
],
[
[
64793,
64793
],
"mapped",
[
1588,
1609
]
],
[
[
64794,
64794
],
"mapped",
[
1588,
1610
]
],
[
[
64795,
64795
],
"mapped",
[
1581,
1609
]
],
[
[
64796,
64796
],
"mapped",
[
1581,
1610
]
],
[
[
64797,
64797
],
"mapped",
[
1580,
1609
]
],
[
[
64798,
64798
],
"mapped",
[
1580,
1610
]
],
[
[
64799,
64799
],
"mapped",
[
1582,
1609
]
],
[
[
64800,
64800
],
"mapped",
[
1582,
1610
]
],
[
[
64801,
64801
],
"mapped",
[
1589,
1609
]
],
[
[
64802,
64802
],
"mapped",
[
1589,
1610
]
],
[
[
64803,
64803
],
"mapped",
[
1590,
1609
]
],
[
[
64804,
64804
],
"mapped",
[
1590,
1610
]
],
[
[
64805,
64805
],
"mapped",
[
1588,
1580
]
],
[
[
64806,
64806
],
"mapped",
[
1588,
1581
]
],
[
[
64807,
64807
],
"mapped",
[
1588,
1582
]
],
[
[
64808,
64808
],
"mapped",
[
1588,
1605
]
],
[
[
64809,
64809
],
"mapped",
[
1588,
1585
]
],
[
[
64810,
64810
],
"mapped",
[
1587,
1585
]
],
[
[
64811,
64811
],
"mapped",
[
1589,
1585
]
],
[
[
64812,
64812
],
"mapped",
[
1590,
1585
]
],
[
[
64813,
64813
],
"mapped",
[
1588,
1580
]
],
[
[
64814,
64814
],
"mapped",
[
1588,
1581
]
],
[
[
64815,
64815
],
"mapped",
[
1588,
1582
]
],
[
[
64816,
64816
],
"mapped",
[
1588,
1605
]
],
[
[
64817,
64817
],
"mapped",
[
1587,
1607
]
],
[
[
64818,
64818
],
"mapped",
[
1588,
1607
]
],
[
[
64819,
64819
],
"mapped",
[
1591,
1605
]
],
[
[
64820,
64820
],
"mapped",
[
1587,
1580
]
],
[
[
64821,
64821
],
"mapped",
[
1587,
1581
]
],
[
[
64822,
64822
],
"mapped",
[
1587,
1582
]
],
[
[
64823,
64823
],
"mapped",
[
1588,
1580
]
],
[
[
64824,
64824
],
"mapped",
[
1588,
1581
]
],
[
[
64825,
64825
],
"mapped",
[
1588,
1582
]
],
[
[
64826,
64826
],
"mapped",
[
1591,
1605
]
],
[
[
64827,
64827
],
"mapped",
[
1592,
1605
]
],
[
[
64828,
64829
],
"mapped",
[
1575,
1611
]
],
[
[
64830,
64831
],
"valid",
[
],
"NV8"
],
[
[
64832,
64847
],
"disallowed"
],
[
[
64848,
64848
],
"mapped",
[
1578,
1580,
1605
]
],
[
[
64849,
64850
],
"mapped",
[
1578,
1581,
1580
]
],
[
[
64851,
64851
],
"mapped",
[
1578,
1581,
1605
]
],
[
[
64852,
64852
],
"mapped",
[
1578,
1582,
1605
]
],
[
[
64853,
64853
],
"mapped",
[
1578,
1605,
1580
]
],
[
[
64854,
64854
],
"mapped",
[
1578,
1605,
1581
]
],
[
[
64855,
64855
],
"mapped",
[
1578,
1605,
1582
]
],
[
[
64856,
64857
],
"mapped",
[
1580,
1605,
1581
]
],
[
[
64858,
64858
],
"mapped",
[
1581,
1605,
1610
]
],
[
[
64859,
64859
],
"mapped",
[
1581,
1605,
1609
]
],
[
[
64860,
64860
],
"mapped",
[
1587,
1581,
1580
]
],
[
[
64861,
64861
],
"mapped",
[
1587,
1580,
1581
]
],
[
[
64862,
64862
],
"mapped",
[
1587,
1580,
1609
]
],
[
[
64863,
64864
],
"mapped",
[
1587,
1605,
1581
]
],
[
[
64865,
64865
],
"mapped",
[
1587,
1605,
1580
]
],
[
[
64866,
64867
],
"mapped",
[
1587,
1605,
1605
]
],
[
[
64868,
64869
],
"mapped",
[
1589,
1581,
1581
]
],
[
[
64870,
64870
],
"mapped",
[
1589,
1605,
1605
]
],
[
[
64871,
64872
],
"mapped",
[
1588,
1581,
1605
]
],
[
[
64873,
64873
],
"mapped",
[
1588,
1580,
1610
]
],
[
[
64874,
64875
],
"mapped",
[
1588,
1605,
1582
]
],
[
[
64876,
64877
],
"mapped",
[
1588,
1605,
1605
]
],
[
[
64878,
64878
],
"mapped",
[
1590,
1581,
1609
]
],
[
[
64879,
64880
],
"mapped",
[
1590,
1582,
1605
]
],
[
[
64881,
64882
],
"mapped",
[
1591,
1605,
1581
]
],
[
[
64883,
64883
],
"mapped",
[
1591,
1605,
1605
]
],
[
[
64884,
64884
],
"mapped",
[
1591,
1605,
1610
]
],
[
[
64885,
64885
],
"mapped",
[
1593,
1580,
1605
]
],
[
[
64886,
64887
],
"mapped",
[
1593,
1605,
1605
]
],
[
[
64888,
64888
],
"mapped",
[
1593,
1605,
1609
]
],
[
[
64889,
64889
],
"mapped",
[
1594,
1605,
1605
]
],
[
[
64890,
64890
],
"mapped",
[
1594,
1605,
1610
]
],
[
[
64891,
64891
],
"mapped",
[
1594,
1605,
1609
]
],
[
[
64892,
64893
],
"mapped",
[
1601,
1582,
1605
]
],
[
[
64894,
64894
],
"mapped",
[
1602,
1605,
1581
]
],
[
[
64895,
64895
],
"mapped",
[
1602,
1605,
1605
]
],
[
[
64896,
64896
],
"mapped",
[
1604,
1581,
1605
]
],
[
[
64897,
64897
],
"mapped",
[
1604,
1581,
1610
]
],
[
[
64898,
64898
],
"mapped",
[
1604,
1581,
1609
]
],
[
[
64899,
64900
],
"mapped",
[
1604,
1580,
1580
]
],
[
[
64901,
64902
],
"mapped",
[
1604,
1582,
1605
]
],
[
[
64903,
64904
],
"mapped",
[
1604,
1605,
1581
]
],
[
[
64905,
64905
],
"mapped",
[
1605,
1581,
1580
]
],
[
[
64906,
64906
],
"mapped",
[
1605,
1581,
1605
]
],
[
[
64907,
64907
],
"mapped",
[
1605,
1581,
1610
]
],
[
[
64908,
64908
],
"mapped",
[
1605,
1580,
1581
]
],
[
[
64909,
64909
],
"mapped",
[
1605,
1580,
1605
]
],
[
[
64910,
64910
],
"mapped",
[
1605,
1582,
1580
]
],
[
[
64911,
64911
],
"mapped",
[
1605,
1582,
1605
]
],
[
[
64912,
64913
],
"disallowed"
],
[
[
64914,
64914
],
"mapped",
[
1605,
1580,
1582
]
],
[
[
64915,
64915
],
"mapped",
[
1607,
1605,
1580
]
],
[
[
64916,
64916
],
"mapped",
[
1607,
1605,
1605
]
],
[
[
64917,
64917
],
"mapped",
[
1606,
1581,
1605
]
],
[
[
64918,
64918
],
"mapped",
[
1606,
1581,
1609
]
],
[
[
64919,
64920
],
"mapped",
[
1606,
1580,
1605
]
],
[
[
64921,
64921
],
"mapped",
[
1606,
1580,
1609
]
],
[
[
64922,
64922
],
"mapped",
[
1606,
1605,
1610
]
],
[
[
64923,
64923
],
"mapped",
[
1606,
1605,
1609
]
],
[
[
64924,
64925
],
"mapped",
[
1610,
1605,
1605
]
],
[
[
64926,
64926
],
"mapped",
[
1576,
1582,
1610
]
],
[
[
64927,
64927
],
"mapped",
[
1578,
1580,
1610
]
],
[
[
64928,
64928
],
"mapped",
[
1578,
1580,
1609
]
],
[
[
64929,
64929
],
"mapped",
[
1578,
1582,
1610
]
],
[
[
64930,
64930
],
"mapped",
[
1578,
1582,
1609
]
],
[
[
64931,
64931
],
"mapped",
[
1578,
1605,
1610
]
],
[
[
64932,
64932
],
"mapped",
[
1578,
1605,
1609
]
],
[
[
64933,
64933
],
"mapped",
[
1580,
1605,
1610
]
],
[
[
64934,
64934
],
"mapped",
[
1580,
1581,
1609
]
],
[
[
64935,
64935
],
"mapped",
[
1580,
1605,
1609
]
],
[
[
64936,
64936
],
"mapped",
[
1587,
1582,
1609
]
],
[
[
64937,
64937
],
"mapped",
[
1589,
1581,
1610
]
],
[
[
64938,
64938
],
"mapped",
[
1588,
1581,
1610
]
],
[
[
64939,
64939
],
"mapped",
[
1590,
1581,
1610
]
],
[
[
64940,
64940
],
"mapped",
[
1604,
1580,
1610
]
],
[
[
64941,
64941
],
"mapped",
[
1604,
1605,
1610
]
],
[
[
64942,
64942
],
"mapped",
[
1610,
1581,
1610
]
],
[
[
64943,
64943
],
"mapped",
[
1610,
1580,
1610
]
],
[
[
64944,
64944
],
"mapped",
[
1610,
1605,
1610
]
],
[
[
64945,
64945
],
"mapped",
[
1605,
1605,
1610
]
],
[
[
64946,
64946
],
"mapped",
[
1602,
1605,
1610
]
],
[
[
64947,
64947
],
"mapped",
[
1606,
1581,
1610
]
],
[
[
64948,
64948
],
"mapped",
[
1602,
1605,
1581
]
],
[
[
64949,
64949
],
"mapped",
[
1604,
1581,
1605
]
],
[
[
64950,
64950
],
"mapped",
[
1593,
1605,
1610
]
],
[
[
64951,
64951
],
"mapped",
[
1603,
1605,
1610
]
],
[
[
64952,
64952
],
"mapped",
[
1606,
1580,
1581
]
],
[
[
64953,
64953
],
"mapped",
[
1605,
1582,
1610
]
],
[
[
64954,
64954
],
"mapped",
[
1604,
1580,
1605
]
],
[
[
64955,
64955
],
"mapped",
[
1603,
1605,
1605
]
],
[
[
64956,
64956
],
"mapped",
[
1604,
1580,
1605
]
],
[
[
64957,
64957
],
"mapped",
[
1606,
1580,
1581
]
],
[
[
64958,
64958
],
"mapped",
[
1580,
1581,
1610
]
],
[
[
64959,
64959
],
"mapped",
[
1581,
1580,
1610
]
],
[
[
64960,
64960
],
"mapped",
[
1605,
1580,
1610
]
],
[
[
64961,
64961
],
"mapped",
[
1601,
1605,
1610
]
],
[
[
64962,
64962
],
"mapped",
[
1576,
1581,
1610
]
],
[
[
64963,
64963
],
"mapped",
[
1603,
1605,
1605
]
],
[
[
64964,
64964
],
"mapped",
[
1593,
1580,
1605
]
],
[
[
64965,
64965
],
"mapped",
[
1589,
1605,
1605
]
],
[
[
64966,
64966
],
"mapped",
[
1587,
1582,
1610
]
],
[
[
64967,
64967
],
"mapped",
[
1606,
1580,
1610
]
],
[
[
64968,
64975
],
"disallowed"
],
[
[
64976,
65007
],
"disallowed"
],
[
[
65008,
65008
],
"mapped",
[
1589,
1604,
1746
]
],
[
[
65009,
65009
],
"mapped",
[
1602,
1604,
1746
]
],
[
[
65010,
65010
],
"mapped",
[
1575,
1604,
1604,
1607
]
],
[
[
65011,
65011
],
"mapped",
[
1575,
1603,
1576,
1585
]
],
[
[
65012,
65012
],
"mapped",
[
1605,
1581,
1605,
1583
]
],
[
[
65013,
65013
],
"mapped",
[
1589,
1604,
1593,
1605
]
],
[
[
65014,
65014
],
"mapped",
[
1585,
1587,
1608,
1604
]
],
[
[
65015,
65015
],
"mapped",
[
1593,
1604,
1610,
1607
]
],
[
[
65016,
65016
],
"mapped",
[
1608,
1587,
1604,
1605
]
],
[
[
65017,
65017
],
"mapped",
[
1589,
1604,
1609
]
],
[
[
65018,
65018
],
"disallowed_STD3_mapped",
[
1589,
1604,
1609,
32,
1575,
1604,
1604,
1607,
32,
1593,
1604,
1610,
1607,
32,
1608,
1587,
1604,
1605
]
],
[
[
65019,
65019
],
"disallowed_STD3_mapped",
[
1580,
1604,
32,
1580,
1604,
1575,
1604,
1607
]
],
[
[
65020,
65020
],
"mapped",
[
1585,
1740,
1575,
1604
]
],
[
[
65021,
65021
],
"valid",
[
],
"NV8"
],
[
[
65022,
65023
],
"disallowed"
],
[
[
65024,
65039
],
"ignored"
],
[
[
65040,
65040
],
"disallowed_STD3_mapped",
[
44
]
],
[
[
65041,
65041
],
"mapped",
[
12289
]
],
[
[
65042,
65042
],
"disallowed"
],
[
[
65043,
65043
],
"disallowed_STD3_mapped",
[
58
]
],
[
[
65044,
65044
],
"disallowed_STD3_mapped",
[
59
]
],
[
[
65045,
65045
],
"disallowed_STD3_mapped",
[
33
]
],
[
[
65046,
65046
],
"disallowed_STD3_mapped",
[
63
]
],
[
[
65047,
65047
],
"mapped",
[
12310
]
],
[
[
65048,
65048
],
"mapped",
[
12311
]
],
[
[
65049,
65049
],
"disallowed"
],
[
[
65050,
65055
],
"disallowed"
],
[
[
65056,
65059
],
"valid"
],
[
[
65060,
65062
],
"valid"
],
[
[
65063,
65069
],
"valid"
],
[
[
65070,
65071
],
"valid"
],
[
[
65072,
65072
],
"disallowed"
],
[
[
65073,
65073
],
"mapped",
[
8212
]
],
[
[
65074,
65074
],
"mapped",
[
8211
]
],
[
[
65075,
65076
],
"disallowed_STD3_mapped",
[
95
]
],
[
[
65077,
65077
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
65078,
65078
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
65079,
65079
],
"disallowed_STD3_mapped",
[
123
]
],
[
[
65080,
65080
],
"disallowed_STD3_mapped",
[
125
]
],
[
[
65081,
65081
],
"mapped",
[
12308
]
],
[
[
65082,
65082
],
"mapped",
[
12309
]
],
[
[
65083,
65083
],
"mapped",
[
12304
]
],
[
[
65084,
65084
],
"mapped",
[
12305
]
],
[
[
65085,
65085
],
"mapped",
[
12298
]
],
[
[
65086,
65086
],
"mapped",
[
12299
]
],
[
[
65087,
65087
],
"mapped",
[
12296
]
],
[
[
65088,
65088
],
"mapped",
[
12297
]
],
[
[
65089,
65089
],
"mapped",
[
12300
]
],
[
[
65090,
65090
],
"mapped",
[
12301
]
],
[
[
65091,
65091
],
"mapped",
[
12302
]
],
[
[
65092,
65092
],
"mapped",
[
12303
]
],
[
[
65093,
65094
],
"valid",
[
],
"NV8"
],
[
[
65095,
65095
],
"disallowed_STD3_mapped",
[
91
]
],
[
[
65096,
65096
],
"disallowed_STD3_mapped",
[
93
]
],
[
[
65097,
65100
],
"disallowed_STD3_mapped",
[
32,
773
]
],
[
[
65101,
65103
],
"disallowed_STD3_mapped",
[
95
]
],
[
[
65104,
65104
],
"disallowed_STD3_mapped",
[
44
]
],
[
[
65105,
65105
],
"mapped",
[
12289
]
],
[
[
65106,
65106
],
"disallowed"
],
[
[
65107,
65107
],
"disallowed"
],
[
[
65108,
65108
],
"disallowed_STD3_mapped",
[
59
]
],
[
[
65109,
65109
],
"disallowed_STD3_mapped",
[
58
]
],
[
[
65110,
65110
],
"disallowed_STD3_mapped",
[
63
]
],
[
[
65111,
65111
],
"disallowed_STD3_mapped",
[
33
]
],
[
[
65112,
65112
],
"mapped",
[
8212
]
],
[
[
65113,
65113
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
65114,
65114
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
65115,
65115
],
"disallowed_STD3_mapped",
[
123
]
],
[
[
65116,
65116
],
"disallowed_STD3_mapped",
[
125
]
],
[
[
65117,
65117
],
"mapped",
[
12308
]
],
[
[
65118,
65118
],
"mapped",
[
12309
]
],
[
[
65119,
65119
],
"disallowed_STD3_mapped",
[
35
]
],
[
[
65120,
65120
],
"disallowed_STD3_mapped",
[
38
]
],
[
[
65121,
65121
],
"disallowed_STD3_mapped",
[
42
]
],
[
[
65122,
65122
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
65123,
65123
],
"mapped",
[
45
]
],
[
[
65124,
65124
],
"disallowed_STD3_mapped",
[
60
]
],
[
[
65125,
65125
],
"disallowed_STD3_mapped",
[
62
]
],
[
[
65126,
65126
],
"disallowed_STD3_mapped",
[
61
]
],
[
[
65127,
65127
],
"disallowed"
],
[
[
65128,
65128
],
"disallowed_STD3_mapped",
[
92
]
],
[
[
65129,
65129
],
"disallowed_STD3_mapped",
[
36
]
],
[
[
65130,
65130
],
"disallowed_STD3_mapped",
[
37
]
],
[
[
65131,
65131
],
"disallowed_STD3_mapped",
[
64
]
],
[
[
65132,
65135
],
"disallowed"
],
[
[
65136,
65136
],
"disallowed_STD3_mapped",
[
32,
1611
]
],
[
[
65137,
65137
],
"mapped",
[
1600,
1611
]
],
[
[
65138,
65138
],
"disallowed_STD3_mapped",
[
32,
1612
]
],
[
[
65139,
65139
],
"valid"
],
[
[
65140,
65140
],
"disallowed_STD3_mapped",
[
32,
1613
]
],
[
[
65141,
65141
],
"disallowed"
],
[
[
65142,
65142
],
"disallowed_STD3_mapped",
[
32,
1614
]
],
[
[
65143,
65143
],
"mapped",
[
1600,
1614
]
],
[
[
65144,
65144
],
"disallowed_STD3_mapped",
[
32,
1615
]
],
[
[
65145,
65145
],
"mapped",
[
1600,
1615
]
],
[
[
65146,
65146
],
"disallowed_STD3_mapped",
[
32,
1616
]
],
[
[
65147,
65147
],
"mapped",
[
1600,
1616
]
],
[
[
65148,
65148
],
"disallowed_STD3_mapped",
[
32,
1617
]
],
[
[
65149,
65149
],
"mapped",
[
1600,
1617
]
],
[
[
65150,
65150
],
"disallowed_STD3_mapped",
[
32,
1618
]
],
[
[
65151,
65151
],
"mapped",
[
1600,
1618
]
],
[
[
65152,
65152
],
"mapped",
[
1569
]
],
[
[
65153,
65154
],
"mapped",
[
1570
]
],
[
[
65155,
65156
],
"mapped",
[
1571
]
],
[
[
65157,
65158
],
"mapped",
[
1572
]
],
[
[
65159,
65160
],
"mapped",
[
1573
]
],
[
[
65161,
65164
],
"mapped",
[
1574
]
],
[
[
65165,
65166
],
"mapped",
[
1575
]
],
[
[
65167,
65170
],
"mapped",
[
1576
]
],
[
[
65171,
65172
],
"mapped",
[
1577
]
],
[
[
65173,
65176
],
"mapped",
[
1578
]
],
[
[
65177,
65180
],
"mapped",
[
1579
]
],
[
[
65181,
65184
],
"mapped",
[
1580
]
],
[
[
65185,
65188
],
"mapped",
[
1581
]
],
[
[
65189,
65192
],
"mapped",
[
1582
]
],
[
[
65193,
65194
],
"mapped",
[
1583
]
],
[
[
65195,
65196
],
"mapped",
[
1584
]
],
[
[
65197,
65198
],
"mapped",
[
1585
]
],
[
[
65199,
65200
],
"mapped",
[
1586
]
],
[
[
65201,
65204
],
"mapped",
[
1587
]
],
[
[
65205,
65208
],
"mapped",
[
1588
]
],
[
[
65209,
65212
],
"mapped",
[
1589
]
],
[
[
65213,
65216
],
"mapped",
[
1590
]
],
[
[
65217,
65220
],
"mapped",
[
1591
]
],
[
[
65221,
65224
],
"mapped",
[
1592
]
],
[
[
65225,
65228
],
"mapped",
[
1593
]
],
[
[
65229,
65232
],
"mapped",
[
1594
]
],
[
[
65233,
65236
],
"mapped",
[
1601
]
],
[
[
65237,
65240
],
"mapped",
[
1602
]
],
[
[
65241,
65244
],
"mapped",
[
1603
]
],
[
[
65245,
65248
],
"mapped",
[
1604
]
],
[
[
65249,
65252
],
"mapped",
[
1605
]
],
[
[
65253,
65256
],
"mapped",
[
1606
]
],
[
[
65257,
65260
],
"mapped",
[
1607
]
],
[
[
65261,
65262
],
"mapped",
[
1608
]
],
[
[
65263,
65264
],
"mapped",
[
1609
]
],
[
[
65265,
65268
],
"mapped",
[
1610
]
],
[
[
65269,
65270
],
"mapped",
[
1604,
1570
]
],
[
[
65271,
65272
],
"mapped",
[
1604,
1571
]
],
[
[
65273,
65274
],
"mapped",
[
1604,
1573
]
],
[
[
65275,
65276
],
"mapped",
[
1604,
1575
]
],
[
[
65277,
65278
],
"disallowed"
],
[
[
65279,
65279
],
"ignored"
],
[
[
65280,
65280
],
"disallowed"
],
[
[
65281,
65281
],
"disallowed_STD3_mapped",
[
33
]
],
[
[
65282,
65282
],
"disallowed_STD3_mapped",
[
34
]
],
[
[
65283,
65283
],
"disallowed_STD3_mapped",
[
35
]
],
[
[
65284,
65284
],
"disallowed_STD3_mapped",
[
36
]
],
[
[
65285,
65285
],
"disallowed_STD3_mapped",
[
37
]
],
[
[
65286,
65286
],
"disallowed_STD3_mapped",
[
38
]
],
[
[
65287,
65287
],
"disallowed_STD3_mapped",
[
39
]
],
[
[
65288,
65288
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
65289,
65289
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
65290,
65290
],
"disallowed_STD3_mapped",
[
42
]
],
[
[
65291,
65291
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
65292,
65292
],
"disallowed_STD3_mapped",
[
44
]
],
[
[
65293,
65293
],
"mapped",
[
45
]
],
[
[
65294,
65294
],
"mapped",
[
46
]
],
[
[
65295,
65295
],
"disallowed_STD3_mapped",
[
47
]
],
[
[
65296,
65296
],
"mapped",
[
48
]
],
[
[
65297,
65297
],
"mapped",
[
49
]
],
[
[
65298,
65298
],
"mapped",
[
50
]
],
[
[
65299,
65299
],
"mapped",
[
51
]
],
[
[
65300,
65300
],
"mapped",
[
52
]
],
[
[
65301,
65301
],
"mapped",
[
53
]
],
[
[
65302,
65302
],
"mapped",
[
54
]
],
[
[
65303,
65303
],
"mapped",
[
55
]
],
[
[
65304,
65304
],
"mapped",
[
56
]
],
[
[
65305,
65305
],
"mapped",
[
57
]
],
[
[
65306,
65306
],
"disallowed_STD3_mapped",
[
58
]
],
[
[
65307,
65307
],
"disallowed_STD3_mapped",
[
59
]
],
[
[
65308,
65308
],
"disallowed_STD3_mapped",
[
60
]
],
[
[
65309,
65309
],
"disallowed_STD3_mapped",
[
61
]
],
[
[
65310,
65310
],
"disallowed_STD3_mapped",
[
62
]
],
[
[
65311,
65311
],
"disallowed_STD3_mapped",
[
63
]
],
[
[
65312,
65312
],
"disallowed_STD3_mapped",
[
64
]
],
[
[
65313,
65313
],
"mapped",
[
97
]
],
[
[
65314,
65314
],
"mapped",
[
98
]
],
[
[
65315,
65315
],
"mapped",
[
99
]
],
[
[
65316,
65316
],
"mapped",
[
100
]
],
[
[
65317,
65317
],
"mapped",
[
101
]
],
[
[
65318,
65318
],
"mapped",
[
102
]
],
[
[
65319,
65319
],
"mapped",
[
103
]
],
[
[
65320,
65320
],
"mapped",
[
104
]
],
[
[
65321,
65321
],
"mapped",
[
105
]
],
[
[
65322,
65322
],
"mapped",
[
106
]
],
[
[
65323,
65323
],
"mapped",
[
107
]
],
[
[
65324,
65324
],
"mapped",
[
108
]
],
[
[
65325,
65325
],
"mapped",
[
109
]
],
[
[
65326,
65326
],
"mapped",
[
110
]
],
[
[
65327,
65327
],
"mapped",
[
111
]
],
[
[
65328,
65328
],
"mapped",
[
112
]
],
[
[
65329,
65329
],
"mapped",
[
113
]
],
[
[
65330,
65330
],
"mapped",
[
114
]
],
[
[
65331,
65331
],
"mapped",
[
115
]
],
[
[
65332,
65332
],
"mapped",
[
116
]
],
[
[
65333,
65333
],
"mapped",
[
117
]
],
[
[
65334,
65334
],
"mapped",
[
118
]
],
[
[
65335,
65335
],
"mapped",
[
119
]
],
[
[
65336,
65336
],
"mapped",
[
120
]
],
[
[
65337,
65337
],
"mapped",
[
121
]
],
[
[
65338,
65338
],
"mapped",
[
122
]
],
[
[
65339,
65339
],
"disallowed_STD3_mapped",
[
91
]
],
[
[
65340,
65340
],
"disallowed_STD3_mapped",
[
92
]
],
[
[
65341,
65341
],
"disallowed_STD3_mapped",
[
93
]
],
[
[
65342,
65342
],
"disallowed_STD3_mapped",
[
94
]
],
[
[
65343,
65343
],
"disallowed_STD3_mapped",
[
95
]
],
[
[
65344,
65344
],
"disallowed_STD3_mapped",
[
96
]
],
[
[
65345,
65345
],
"mapped",
[
97
]
],
[
[
65346,
65346
],
"mapped",
[
98
]
],
[
[
65347,
65347
],
"mapped",
[
99
]
],
[
[
65348,
65348
],
"mapped",
[
100
]
],
[
[
65349,
65349
],
"mapped",
[
101
]
],
[
[
65350,
65350
],
"mapped",
[
102
]
],
[
[
65351,
65351
],
"mapped",
[
103
]
],
[
[
65352,
65352
],
"mapped",
[
104
]
],
[
[
65353,
65353
],
"mapped",
[
105
]
],
[
[
65354,
65354
],
"mapped",
[
106
]
],
[
[
65355,
65355
],
"mapped",
[
107
]
],
[
[
65356,
65356
],
"mapped",
[
108
]
],
[
[
65357,
65357
],
"mapped",
[
109
]
],
[
[
65358,
65358
],
"mapped",
[
110
]
],
[
[
65359,
65359
],
"mapped",
[
111
]
],
[
[
65360,
65360
],
"mapped",
[
112
]
],
[
[
65361,
65361
],
"mapped",
[
113
]
],
[
[
65362,
65362
],
"mapped",
[
114
]
],
[
[
65363,
65363
],
"mapped",
[
115
]
],
[
[
65364,
65364
],
"mapped",
[
116
]
],
[
[
65365,
65365
],
"mapped",
[
117
]
],
[
[
65366,
65366
],
"mapped",
[
118
]
],
[
[
65367,
65367
],
"mapped",
[
119
]
],
[
[
65368,
65368
],
"mapped",
[
120
]
],
[
[
65369,
65369
],
"mapped",
[
121
]
],
[
[
65370,
65370
],
"mapped",
[
122
]
],
[
[
65371,
65371
],
"disallowed_STD3_mapped",
[
123
]
],
[
[
65372,
65372
],
"disallowed_STD3_mapped",
[
124
]
],
[
[
65373,
65373
],
"disallowed_STD3_mapped",
[
125
]
],
[
[
65374,
65374
],
"disallowed_STD3_mapped",
[
126
]
],
[
[
65375,
65375
],
"mapped",
[
10629
]
],
[
[
65376,
65376
],
"mapped",
[
10630
]
],
[
[
65377,
65377
],
"mapped",
[
46
]
],
[
[
65378,
65378
],
"mapped",
[
12300
]
],
[
[
65379,
65379
],
"mapped",
[
12301
]
],
[
[
65380,
65380
],
"mapped",
[
12289
]
],
[
[
65381,
65381
],
"mapped",
[
12539
]
],
[
[
65382,
65382
],
"mapped",
[
12530
]
],
[
[
65383,
65383
],
"mapped",
[
12449
]
],
[
[
65384,
65384
],
"mapped",
[
12451
]
],
[
[
65385,
65385
],
"mapped",
[
12453
]
],
[
[
65386,
65386
],
"mapped",
[
12455
]
],
[
[
65387,
65387
],
"mapped",
[
12457
]
],
[
[
65388,
65388
],
"mapped",
[
12515
]
],
[
[
65389,
65389
],
"mapped",
[
12517
]
],
[
[
65390,
65390
],
"mapped",
[
12519
]
],
[
[
65391,
65391
],
"mapped",
[
12483
]
],
[
[
65392,
65392
],
"mapped",
[
12540
]
],
[
[
65393,
65393
],
"mapped",
[
12450
]
],
[
[
65394,
65394
],
"mapped",
[
12452
]
],
[
[
65395,
65395
],
"mapped",
[
12454
]
],
[
[
65396,
65396
],
"mapped",
[
12456
]
],
[
[
65397,
65397
],
"mapped",
[
12458
]
],
[
[
65398,
65398
],
"mapped",
[
12459
]
],
[
[
65399,
65399
],
"mapped",
[
12461
]
],
[
[
65400,
65400
],
"mapped",
[
12463
]
],
[
[
65401,
65401
],
"mapped",
[
12465
]
],
[
[
65402,
65402
],
"mapped",
[
12467
]
],
[
[
65403,
65403
],
"mapped",
[
12469
]
],
[
[
65404,
65404
],
"mapped",
[
12471
]
],
[
[
65405,
65405
],
"mapped",
[
12473
]
],
[
[
65406,
65406
],
"mapped",
[
12475
]
],
[
[
65407,
65407
],
"mapped",
[
12477
]
],
[
[
65408,
65408
],
"mapped",
[
12479
]
],
[
[
65409,
65409
],
"mapped",
[
12481
]
],
[
[
65410,
65410
],
"mapped",
[
12484
]
],
[
[
65411,
65411
],
"mapped",
[
12486
]
],
[
[
65412,
65412
],
"mapped",
[
12488
]
],
[
[
65413,
65413
],
"mapped",
[
12490
]
],
[
[
65414,
65414
],
"mapped",
[
12491
]
],
[
[
65415,
65415
],
"mapped",
[
12492
]
],
[
[
65416,
65416
],
"mapped",
[
12493
]
],
[
[
65417,
65417
],
"mapped",
[
12494
]
],
[
[
65418,
65418
],
"mapped",
[
12495
]
],
[
[
65419,
65419
],
"mapped",
[
12498
]
],
[
[
65420,
65420
],
"mapped",
[
12501
]
],
[
[
65421,
65421
],
"mapped",
[
12504
]
],
[
[
65422,
65422
],
"mapped",
[
12507
]
],
[
[
65423,
65423
],
"mapped",
[
12510
]
],
[
[
65424,
65424
],
"mapped",
[
12511
]
],
[
[
65425,
65425
],
"mapped",
[
12512
]
],
[
[
65426,
65426
],
"mapped",
[
12513
]
],
[
[
65427,
65427
],
"mapped",
[
12514
]
],
[
[
65428,
65428
],
"mapped",
[
12516
]
],
[
[
65429,
65429
],
"mapped",
[
12518
]
],
[
[
65430,
65430
],
"mapped",
[
12520
]
],
[
[
65431,
65431
],
"mapped",
[
12521
]
],
[
[
65432,
65432
],
"mapped",
[
12522
]
],
[
[
65433,
65433
],
"mapped",
[
12523
]
],
[
[
65434,
65434
],
"mapped",
[
12524
]
],
[
[
65435,
65435
],
"mapped",
[
12525
]
],
[
[
65436,
65436
],
"mapped",
[
12527
]
],
[
[
65437,
65437
],
"mapped",
[
12531
]
],
[
[
65438,
65438
],
"mapped",
[
12441
]
],
[
[
65439,
65439
],
"mapped",
[
12442
]
],
[
[
65440,
65440
],
"disallowed"
],
[
[
65441,
65441
],
"mapped",
[
4352
]
],
[
[
65442,
65442
],
"mapped",
[
4353
]
],
[
[
65443,
65443
],
"mapped",
[
4522
]
],
[
[
65444,
65444
],
"mapped",
[
4354
]
],
[
[
65445,
65445
],
"mapped",
[
4524
]
],
[
[
65446,
65446
],
"mapped",
[
4525
]
],
[
[
65447,
65447
],
"mapped",
[
4355
]
],
[
[
65448,
65448
],
"mapped",
[
4356
]
],
[
[
65449,
65449
],
"mapped",
[
4357
]
],
[
[
65450,
65450
],
"mapped",
[
4528
]
],
[
[
65451,
65451
],
"mapped",
[
4529
]
],
[
[
65452,
65452
],
"mapped",
[
4530
]
],
[
[
65453,
65453
],
"mapped",
[
4531
]
],
[
[
65454,
65454
],
"mapped",
[
4532
]
],
[
[
65455,
65455
],
"mapped",
[
4533
]
],
[
[
65456,
65456
],
"mapped",
[
4378
]
],
[
[
65457,
65457
],
"mapped",
[
4358
]
],
[
[
65458,
65458
],
"mapped",
[
4359
]
],
[
[
65459,
65459
],
"mapped",
[
4360
]
],
[
[
65460,
65460
],
"mapped",
[
4385
]
],
[
[
65461,
65461
],
"mapped",
[
4361
]
],
[
[
65462,
65462
],
"mapped",
[
4362
]
],
[
[
65463,
65463
],
"mapped",
[
4363
]
],
[
[
65464,
65464
],
"mapped",
[
4364
]
],
[
[
65465,
65465
],
"mapped",
[
4365
]
],
[
[
65466,
65466
],
"mapped",
[
4366
]
],
[
[
65467,
65467
],
"mapped",
[
4367
]
],
[
[
65468,
65468
],
"mapped",
[
4368
]
],
[
[
65469,
65469
],
"mapped",
[
4369
]
],
[
[
65470,
65470
],
"mapped",
[
4370
]
],
[
[
65471,
65473
],
"disallowed"
],
[
[
65474,
65474
],
"mapped",
[
4449
]
],
[
[
65475,
65475
],
"mapped",
[
4450
]
],
[
[
65476,
65476
],
"mapped",
[
4451
]
],
[
[
65477,
65477
],
"mapped",
[
4452
]
],
[
[
65478,
65478
],
"mapped",
[
4453
]
],
[
[
65479,
65479
],
"mapped",
[
4454
]
],
[
[
65480,
65481
],
"disallowed"
],
[
[
65482,
65482
],
"mapped",
[
4455
]
],
[
[
65483,
65483
],
"mapped",
[
4456
]
],
[
[
65484,
65484
],
"mapped",
[
4457
]
],
[
[
65485,
65485
],
"mapped",
[
4458
]
],
[
[
65486,
65486
],
"mapped",
[
4459
]
],
[
[
65487,
65487
],
"mapped",
[
4460
]
],
[
[
65488,
65489
],
"disallowed"
],
[
[
65490,
65490
],
"mapped",
[
4461
]
],
[
[
65491,
65491
],
"mapped",
[
4462
]
],
[
[
65492,
65492
],
"mapped",
[
4463
]
],
[
[
65493,
65493
],
"mapped",
[
4464
]
],
[
[
65494,
65494
],
"mapped",
[
4465
]
],
[
[
65495,
65495
],
"mapped",
[
4466
]
],
[
[
65496,
65497
],
"disallowed"
],
[
[
65498,
65498
],
"mapped",
[
4467
]
],
[
[
65499,
65499
],
"mapped",
[
4468
]
],
[
[
65500,
65500
],
"mapped",
[
4469
]
],
[
[
65501,
65503
],
"disallowed"
],
[
[
65504,
65504
],
"mapped",
[
162
]
],
[
[
65505,
65505
],
"mapped",
[
163
]
],
[
[
65506,
65506
],
"mapped",
[
172
]
],
[
[
65507,
65507
],
"disallowed_STD3_mapped",
[
32,
772
]
],
[
[
65508,
65508
],
"mapped",
[
166
]
],
[
[
65509,
65509
],
"mapped",
[
165
]
],
[
[
65510,
65510
],
"mapped",
[
8361
]
],
[
[
65511,
65511
],
"disallowed"
],
[
[
65512,
65512
],
"mapped",
[
9474
]
],
[
[
65513,
65513
],
"mapped",
[
8592
]
],
[
[
65514,
65514
],
"mapped",
[
8593
]
],
[
[
65515,
65515
],
"mapped",
[
8594
]
],
[
[
65516,
65516
],
"mapped",
[
8595
]
],
[
[
65517,
65517
],
"mapped",
[
9632
]
],
[
[
65518,
65518
],
"mapped",
[
9675
]
],
[
[
65519,
65528
],
"disallowed"
],
[
[
65529,
65531
],
"disallowed"
],
[
[
65532,
65532
],
"disallowed"
],
[
[
65533,
65533
],
"disallowed"
],
[
[
65534,
65535
],
"disallowed"
],
[
[
65536,
65547
],
"valid"
],
[
[
65548,
65548
],
"disallowed"
],
[
[
65549,
65574
],
"valid"
],
[
[
65575,
65575
],
"disallowed"
],
[
[
65576,
65594
],
"valid"
],
[
[
65595,
65595
],
"disallowed"
],
[
[
65596,
65597
],
"valid"
],
[
[
65598,
65598
],
"disallowed"
],
[
[
65599,
65613
],
"valid"
],
[
[
65614,
65615
],
"disallowed"
],
[
[
65616,
65629
],
"valid"
],
[
[
65630,
65663
],
"disallowed"
],
[
[
65664,
65786
],
"valid"
],
[
[
65787,
65791
],
"disallowed"
],
[
[
65792,
65794
],
"valid",
[
],
"NV8"
],
[
[
65795,
65798
],
"disallowed"
],
[
[
65799,
65843
],
"valid",
[
],
"NV8"
],
[
[
65844,
65846
],
"disallowed"
],
[
[
65847,
65855
],
"valid",
[
],
"NV8"
],
[
[
65856,
65930
],
"valid",
[
],
"NV8"
],
[
[
65931,
65932
],
"valid",
[
],
"NV8"
],
[
[
65933,
65935
],
"disallowed"
],
[
[
65936,
65947
],
"valid",
[
],
"NV8"
],
[
[
65948,
65951
],
"disallowed"
],
[
[
65952,
65952
],
"valid",
[
],
"NV8"
],
[
[
65953,
65999
],
"disallowed"
],
[
[
66000,
66044
],
"valid",
[
],
"NV8"
],
[
[
66045,
66045
],
"valid"
],
[
[
66046,
66175
],
"disallowed"
],
[
[
66176,
66204
],
"valid"
],
[
[
66205,
66207
],
"disallowed"
],
[
[
66208,
66256
],
"valid"
],
[
[
66257,
66271
],
"disallowed"
],
[
[
66272,
66272
],
"valid"
],
[
[
66273,
66299
],
"valid",
[
],
"NV8"
],
[
[
66300,
66303
],
"disallowed"
],
[
[
66304,
66334
],
"valid"
],
[
[
66335,
66335
],
"valid"
],
[
[
66336,
66339
],
"valid",
[
],
"NV8"
],
[
[
66340,
66351
],
"disallowed"
],
[
[
66352,
66368
],
"valid"
],
[
[
66369,
66369
],
"valid",
[
],
"NV8"
],
[
[
66370,
66377
],
"valid"
],
[
[
66378,
66378
],
"valid",
[
],
"NV8"
],
[
[
66379,
66383
],
"disallowed"
],
[
[
66384,
66426
],
"valid"
],
[
[
66427,
66431
],
"disallowed"
],
[
[
66432,
66461
],
"valid"
],
[
[
66462,
66462
],
"disallowed"
],
[
[
66463,
66463
],
"valid",
[
],
"NV8"
],
[
[
66464,
66499
],
"valid"
],
[
[
66500,
66503
],
"disallowed"
],
[
[
66504,
66511
],
"valid"
],
[
[
66512,
66517
],
"valid",
[
],
"NV8"
],
[
[
66518,
66559
],
"disallowed"
],
[
[
66560,
66560
],
"mapped",
[
66600
]
],
[
[
66561,
66561
],
"mapped",
[
66601
]
],
[
[
66562,
66562
],
"mapped",
[
66602
]
],
[
[
66563,
66563
],
"mapped",
[
66603
]
],
[
[
66564,
66564
],
"mapped",
[
66604
]
],
[
[
66565,
66565
],
"mapped",
[
66605
]
],
[
[
66566,
66566
],
"mapped",
[
66606
]
],
[
[
66567,
66567
],
"mapped",
[
66607
]
],
[
[
66568,
66568
],
"mapped",
[
66608
]
],
[
[
66569,
66569
],
"mapped",
[
66609
]
],
[
[
66570,
66570
],
"mapped",
[
66610
]
],
[
[
66571,
66571
],
"mapped",
[
66611
]
],
[
[
66572,
66572
],
"mapped",
[
66612
]
],
[
[
66573,
66573
],
"mapped",
[
66613
]
],
[
[
66574,
66574
],
"mapped",
[
66614
]
],
[
[
66575,
66575
],
"mapped",
[
66615
]
],
[
[
66576,
66576
],
"mapped",
[
66616
]
],
[
[
66577,
66577
],
"mapped",
[
66617
]
],
[
[
66578,
66578
],
"mapped",
[
66618
]
],
[
[
66579,
66579
],
"mapped",
[
66619
]
],
[
[
66580,
66580
],
"mapped",
[
66620
]
],
[
[
66581,
66581
],
"mapped",
[
66621
]
],
[
[
66582,
66582
],
"mapped",
[
66622
]
],
[
[
66583,
66583
],
"mapped",
[
66623
]
],
[
[
66584,
66584
],
"mapped",
[
66624
]
],
[
[
66585,
66585
],
"mapped",
[
66625
]
],
[
[
66586,
66586
],
"mapped",
[
66626
]
],
[
[
66587,
66587
],
"mapped",
[
66627
]
],
[
[
66588,
66588
],
"mapped",
[
66628
]
],
[
[
66589,
66589
],
"mapped",
[
66629
]
],
[
[
66590,
66590
],
"mapped",
[
66630
]
],
[
[
66591,
66591
],
"mapped",
[
66631
]
],
[
[
66592,
66592
],
"mapped",
[
66632
]
],
[
[
66593,
66593
],
"mapped",
[
66633
]
],
[
[
66594,
66594
],
"mapped",
[
66634
]
],
[
[
66595,
66595
],
"mapped",
[
66635
]
],
[
[
66596,
66596
],
"mapped",
[
66636
]
],
[
[
66597,
66597
],
"mapped",
[
66637
]
],
[
[
66598,
66598
],
"mapped",
[
66638
]
],
[
[
66599,
66599
],
"mapped",
[
66639
]
],
[
[
66600,
66637
],
"valid"
],
[
[
66638,
66717
],
"valid"
],
[
[
66718,
66719
],
"disallowed"
],
[
[
66720,
66729
],
"valid"
],
[
[
66730,
66815
],
"disallowed"
],
[
[
66816,
66855
],
"valid"
],
[
[
66856,
66863
],
"disallowed"
],
[
[
66864,
66915
],
"valid"
],
[
[
66916,
66926
],
"disallowed"
],
[
[
66927,
66927
],
"valid",
[
],
"NV8"
],
[
[
66928,
67071
],
"disallowed"
],
[
[
67072,
67382
],
"valid"
],
[
[
67383,
67391
],
"disallowed"
],
[
[
67392,
67413
],
"valid"
],
[
[
67414,
67423
],
"disallowed"
],
[
[
67424,
67431
],
"valid"
],
[
[
67432,
67583
],
"disallowed"
],
[
[
67584,
67589
],
"valid"
],
[
[
67590,
67591
],
"disallowed"
],
[
[
67592,
67592
],
"valid"
],
[
[
67593,
67593
],
"disallowed"
],
[
[
67594,
67637
],
"valid"
],
[
[
67638,
67638
],
"disallowed"
],
[
[
67639,
67640
],
"valid"
],
[
[
67641,
67643
],
"disallowed"
],
[
[
67644,
67644
],
"valid"
],
[
[
67645,
67646
],
"disallowed"
],
[
[
67647,
67647
],
"valid"
],
[
[
67648,
67669
],
"valid"
],
[
[
67670,
67670
],
"disallowed"
],
[
[
67671,
67679
],
"valid",
[
],
"NV8"
],
[
[
67680,
67702
],
"valid"
],
[
[
67703,
67711
],
"valid",
[
],
"NV8"
],
[
[
67712,
67742
],
"valid"
],
[
[
67743,
67750
],
"disallowed"
],
[
[
67751,
67759
],
"valid",
[
],
"NV8"
],
[
[
67760,
67807
],
"disallowed"
],
[
[
67808,
67826
],
"valid"
],
[
[
67827,
67827
],
"disallowed"
],
[
[
67828,
67829
],
"valid"
],
[
[
67830,
67834
],
"disallowed"
],
[
[
67835,
67839
],
"valid",
[
],
"NV8"
],
[
[
67840,
67861
],
"valid"
],
[
[
67862,
67865
],
"valid",
[
],
"NV8"
],
[
[
67866,
67867
],
"valid",
[
],
"NV8"
],
[
[
67868,
67870
],
"disallowed"
],
[
[
67871,
67871
],
"valid",
[
],
"NV8"
],
[
[
67872,
67897
],
"valid"
],
[
[
67898,
67902
],
"disallowed"
],
[
[
67903,
67903
],
"valid",
[
],
"NV8"
],
[
[
67904,
67967
],
"disallowed"
],
[
[
67968,
68023
],
"valid"
],
[
[
68024,
68027
],
"disallowed"
],
[
[
68028,
68029
],
"valid",
[
],
"NV8"
],
[
[
68030,
68031
],
"valid"
],
[
[
68032,
68047
],
"valid",
[
],
"NV8"
],
[
[
68048,
68049
],
"disallowed"
],
[
[
68050,
68095
],
"valid",
[
],
"NV8"
],
[
[
68096,
68099
],
"valid"
],
[
[
68100,
68100
],
"disallowed"
],
[
[
68101,
68102
],
"valid"
],
[
[
68103,
68107
],
"disallowed"
],
[
[
68108,
68115
],
"valid"
],
[
[
68116,
68116
],
"disallowed"
],
[
[
68117,
68119
],
"valid"
],
[
[
68120,
68120
],
"disallowed"
],
[
[
68121,
68147
],
"valid"
],
[
[
68148,
68151
],
"disallowed"
],
[
[
68152,
68154
],
"valid"
],
[
[
68155,
68158
],
"disallowed"
],
[
[
68159,
68159
],
"valid"
],
[
[
68160,
68167
],
"valid",
[
],
"NV8"
],
[
[
68168,
68175
],
"disallowed"
],
[
[
68176,
68184
],
"valid",
[
],
"NV8"
],
[
[
68185,
68191
],
"disallowed"
],
[
[
68192,
68220
],
"valid"
],
[
[
68221,
68223
],
"valid",
[
],
"NV8"
],
[
[
68224,
68252
],
"valid"
],
[
[
68253,
68255
],
"valid",
[
],
"NV8"
],
[
[
68256,
68287
],
"disallowed"
],
[
[
68288,
68295
],
"valid"
],
[
[
68296,
68296
],
"valid",
[
],
"NV8"
],
[
[
68297,
68326
],
"valid"
],
[
[
68327,
68330
],
"disallowed"
],
[
[
68331,
68342
],
"valid",
[
],
"NV8"
],
[
[
68343,
68351
],
"disallowed"
],
[
[
68352,
68405
],
"valid"
],
[
[
68406,
68408
],
"disallowed"
],
[
[
68409,
68415
],
"valid",
[
],
"NV8"
],
[
[
68416,
68437
],
"valid"
],
[
[
68438,
68439
],
"disallowed"
],
[
[
68440,
68447
],
"valid",
[
],
"NV8"
],
[
[
68448,
68466
],
"valid"
],
[
[
68467,
68471
],
"disallowed"
],
[
[
68472,
68479
],
"valid",
[
],
"NV8"
],
[
[
68480,
68497
],
"valid"
],
[
[
68498,
68504
],
"disallowed"
],
[
[
68505,
68508
],
"valid",
[
],
"NV8"
],
[
[
68509,
68520
],
"disallowed"
],
[
[
68521,
68527
],
"valid",
[
],
"NV8"
],
[
[
68528,
68607
],
"disallowed"
],
[
[
68608,
68680
],
"valid"
],
[
[
68681,
68735
],
"disallowed"
],
[
[
68736,
68736
],
"mapped",
[
68800
]
],
[
[
68737,
68737
],
"mapped",
[
68801
]
],
[
[
68738,
68738
],
"mapped",
[
68802
]
],
[
[
68739,
68739
],
"mapped",
[
68803
]
],
[
[
68740,
68740
],
"mapped",
[
68804
]
],
[
[
68741,
68741
],
"mapped",
[
68805
]
],
[
[
68742,
68742
],
"mapped",
[
68806
]
],
[
[
68743,
68743
],
"mapped",
[
68807
]
],
[
[
68744,
68744
],
"mapped",
[
68808
]
],
[
[
68745,
68745
],
"mapped",
[
68809
]
],
[
[
68746,
68746
],
"mapped",
[
68810
]
],
[
[
68747,
68747
],
"mapped",
[
68811
]
],
[
[
68748,
68748
],
"mapped",
[
68812
]
],
[
[
68749,
68749
],
"mapped",
[
68813
]
],
[
[
68750,
68750
],
"mapped",
[
68814
]
],
[
[
68751,
68751
],
"mapped",
[
68815
]
],
[
[
68752,
68752
],
"mapped",
[
68816
]
],
[
[
68753,
68753
],
"mapped",
[
68817
]
],
[
[
68754,
68754
],
"mapped",
[
68818
]
],
[
[
68755,
68755
],
"mapped",
[
68819
]
],
[
[
68756,
68756
],
"mapped",
[
68820
]
],
[
[
68757,
68757
],
"mapped",
[
68821
]
],
[
[
68758,
68758
],
"mapped",
[
68822
]
],
[
[
68759,
68759
],
"mapped",
[
68823
]
],
[
[
68760,
68760
],
"mapped",
[
68824
]
],
[
[
68761,
68761
],
"mapped",
[
68825
]
],
[
[
68762,
68762
],
"mapped",
[
68826
]
],
[
[
68763,
68763
],
"mapped",
[
68827
]
],
[
[
68764,
68764
],
"mapped",
[
68828
]
],
[
[
68765,
68765
],
"mapped",
[
68829
]
],
[
[
68766,
68766
],
"mapped",
[
68830
]
],
[
[
68767,
68767
],
"mapped",
[
68831
]
],
[
[
68768,
68768
],
"mapped",
[
68832
]
],
[
[
68769,
68769
],
"mapped",
[
68833
]
],
[
[
68770,
68770
],
"mapped",
[
68834
]
],
[
[
68771,
68771
],
"mapped",
[
68835
]
],
[
[
68772,
68772
],
"mapped",
[
68836
]
],
[
[
68773,
68773
],
"mapped",
[
68837
]
],
[
[
68774,
68774
],
"mapped",
[
68838
]
],
[
[
68775,
68775
],
"mapped",
[
68839
]
],
[
[
68776,
68776
],
"mapped",
[
68840
]
],
[
[
68777,
68777
],
"mapped",
[
68841
]
],
[
[
68778,
68778
],
"mapped",
[
68842
]
],
[
[
68779,
68779
],
"mapped",
[
68843
]
],
[
[
68780,
68780
],
"mapped",
[
68844
]
],
[
[
68781,
68781
],
"mapped",
[
68845
]
],
[
[
68782,
68782
],
"mapped",
[
68846
]
],
[
[
68783,
68783
],
"mapped",
[
68847
]
],
[
[
68784,
68784
],
"mapped",
[
68848
]
],
[
[
68785,
68785
],
"mapped",
[
68849
]
],
[
[
68786,
68786
],
"mapped",
[
68850
]
],
[
[
68787,
68799
],
"disallowed"
],
[
[
68800,
68850
],
"valid"
],
[
[
68851,
68857
],
"disallowed"
],
[
[
68858,
68863
],
"valid",
[
],
"NV8"
],
[
[
68864,
69215
],
"disallowed"
],
[
[
69216,
69246
],
"valid",
[
],
"NV8"
],
[
[
69247,
69631
],
"disallowed"
],
[
[
69632,
69702
],
"valid"
],
[
[
69703,
69709
],
"valid",
[
],
"NV8"
],
[
[
69710,
69713
],
"disallowed"
],
[
[
69714,
69733
],
"valid",
[
],
"NV8"
],
[
[
69734,
69743
],
"valid"
],
[
[
69744,
69758
],
"disallowed"
],
[
[
69759,
69759
],
"valid"
],
[
[
69760,
69818
],
"valid"
],
[
[
69819,
69820
],
"valid",
[
],
"NV8"
],
[
[
69821,
69821
],
"disallowed"
],
[
[
69822,
69825
],
"valid",
[
],
"NV8"
],
[
[
69826,
69839
],
"disallowed"
],
[
[
69840,
69864
],
"valid"
],
[
[
69865,
69871
],
"disallowed"
],
[
[
69872,
69881
],
"valid"
],
[
[
69882,
69887
],
"disallowed"
],
[
[
69888,
69940
],
"valid"
],
[
[
69941,
69941
],
"disallowed"
],
[
[
69942,
69951
],
"valid"
],
[
[
69952,
69955
],
"valid",
[
],
"NV8"
],
[
[
69956,
69967
],
"disallowed"
],
[
[
69968,
70003
],
"valid"
],
[
[
70004,
70005
],
"valid",
[
],
"NV8"
],
[
[
70006,
70006
],
"valid"
],
[
[
70007,
70015
],
"disallowed"
],
[
[
70016,
70084
],
"valid"
],
[
[
70085,
70088
],
"valid",
[
],
"NV8"
],
[
[
70089,
70089
],
"valid",
[
],
"NV8"
],
[
[
70090,
70092
],
"valid"
],
[
[
70093,
70093
],
"valid",
[
],
"NV8"
],
[
[
70094,
70095
],
"disallowed"
],
[
[
70096,
70105
],
"valid"
],
[
[
70106,
70106
],
"valid"
],
[
[
70107,
70107
],
"valid",
[
],
"NV8"
],
[
[
70108,
70108
],
"valid"
],
[
[
70109,
70111
],
"valid",
[
],
"NV8"
],
[
[
70112,
70112
],
"disallowed"
],
[
[
70113,
70132
],
"valid",
[
],
"NV8"
],
[
[
70133,
70143
],
"disallowed"
],
[
[
70144,
70161
],
"valid"
],
[
[
70162,
70162
],
"disallowed"
],
[
[
70163,
70199
],
"valid"
],
[
[
70200,
70205
],
"valid",
[
],
"NV8"
],
[
[
70206,
70271
],
"disallowed"
],
[
[
70272,
70278
],
"valid"
],
[
[
70279,
70279
],
"disallowed"
],
[
[
70280,
70280
],
"valid"
],
[
[
70281,
70281
],
"disallowed"
],
[
[
70282,
70285
],
"valid"
],
[
[
70286,
70286
],
"disallowed"
],
[
[
70287,
70301
],
"valid"
],
[
[
70302,
70302
],
"disallowed"
],
[
[
70303,
70312
],
"valid"
],
[
[
70313,
70313
],
"valid",
[
],
"NV8"
],
[
[
70314,
70319
],
"disallowed"
],
[
[
70320,
70378
],
"valid"
],
[
[
70379,
70383
],
"disallowed"
],
[
[
70384,
70393
],
"valid"
],
[
[
70394,
70399
],
"disallowed"
],
[
[
70400,
70400
],
"valid"
],
[
[
70401,
70403
],
"valid"
],
[
[
70404,
70404
],
"disallowed"
],
[
[
70405,
70412
],
"valid"
],
[
[
70413,
70414
],
"disallowed"
],
[
[
70415,
70416
],
"valid"
],
[
[
70417,
70418
],
"disallowed"
],
[
[
70419,
70440
],
"valid"
],
[
[
70441,
70441
],
"disallowed"
],
[
[
70442,
70448
],
"valid"
],
[
[
70449,
70449
],
"disallowed"
],
[
[
70450,
70451
],
"valid"
],
[
[
70452,
70452
],
"disallowed"
],
[
[
70453,
70457
],
"valid"
],
[
[
70458,
70459
],
"disallowed"
],
[
[
70460,
70468
],
"valid"
],
[
[
70469,
70470
],
"disallowed"
],
[
[
70471,
70472
],
"valid"
],
[
[
70473,
70474
],
"disallowed"
],
[
[
70475,
70477
],
"valid"
],
[
[
70478,
70479
],
"disallowed"
],
[
[
70480,
70480
],
"valid"
],
[
[
70481,
70486
],
"disallowed"
],
[
[
70487,
70487
],
"valid"
],
[
[
70488,
70492
],
"disallowed"
],
[
[
70493,
70499
],
"valid"
],
[
[
70500,
70501
],
"disallowed"
],
[
[
70502,
70508
],
"valid"
],
[
[
70509,
70511
],
"disallowed"
],
[
[
70512,
70516
],
"valid"
],
[
[
70517,
70783
],
"disallowed"
],
[
[
70784,
70853
],
"valid"
],
[
[
70854,
70854
],
"valid",
[
],
"NV8"
],
[
[
70855,
70855
],
"valid"
],
[
[
70856,
70863
],
"disallowed"
],
[
[
70864,
70873
],
"valid"
],
[
[
70874,
71039
],
"disallowed"
],
[
[
71040,
71093
],
"valid"
],
[
[
71094,
71095
],
"disallowed"
],
[
[
71096,
71104
],
"valid"
],
[
[
71105,
71113
],
"valid",
[
],
"NV8"
],
[
[
71114,
71127
],
"valid",
[
],
"NV8"
],
[
[
71128,
71133
],
"valid"
],
[
[
71134,
71167
],
"disallowed"
],
[
[
71168,
71232
],
"valid"
],
[
[
71233,
71235
],
"valid",
[
],
"NV8"
],
[
[
71236,
71236
],
"valid"
],
[
[
71237,
71247
],
"disallowed"
],
[
[
71248,
71257
],
"valid"
],
[
[
71258,
71295
],
"disallowed"
],
[
[
71296,
71351
],
"valid"
],
[
[
71352,
71359
],
"disallowed"
],
[
[
71360,
71369
],
"valid"
],
[
[
71370,
71423
],
"disallowed"
],
[
[
71424,
71449
],
"valid"
],
[
[
71450,
71452
],
"disallowed"
],
[
[
71453,
71467
],
"valid"
],
[
[
71468,
71471
],
"disallowed"
],
[
[
71472,
71481
],
"valid"
],
[
[
71482,
71487
],
"valid",
[
],
"NV8"
],
[
[
71488,
71839
],
"disallowed"
],
[
[
71840,
71840
],
"mapped",
[
71872
]
],
[
[
71841,
71841
],
"mapped",
[
71873
]
],
[
[
71842,
71842
],
"mapped",
[
71874
]
],
[
[
71843,
71843
],
"mapped",
[
71875
]
],
[
[
71844,
71844
],
"mapped",
[
71876
]
],
[
[
71845,
71845
],
"mapped",
[
71877
]
],
[
[
71846,
71846
],
"mapped",
[
71878
]
],
[
[
71847,
71847
],
"mapped",
[
71879
]
],
[
[
71848,
71848
],
"mapped",
[
71880
]
],
[
[
71849,
71849
],
"mapped",
[
71881
]
],
[
[
71850,
71850
],
"mapped",
[
71882
]
],
[
[
71851,
71851
],
"mapped",
[
71883
]
],
[
[
71852,
71852
],
"mapped",
[
71884
]
],
[
[
71853,
71853
],
"mapped",
[
71885
]
],
[
[
71854,
71854
],
"mapped",
[
71886
]
],
[
[
71855,
71855
],
"mapped",
[
71887
]
],
[
[
71856,
71856
],
"mapped",
[
71888
]
],
[
[
71857,
71857
],
"mapped",
[
71889
]
],
[
[
71858,
71858
],
"mapped",
[
71890
]
],
[
[
71859,
71859
],
"mapped",
[
71891
]
],
[
[
71860,
71860
],
"mapped",
[
71892
]
],
[
[
71861,
71861
],
"mapped",
[
71893
]
],
[
[
71862,
71862
],
"mapped",
[
71894
]
],
[
[
71863,
71863
],
"mapped",
[
71895
]
],
[
[
71864,
71864
],
"mapped",
[
71896
]
],
[
[
71865,
71865
],
"mapped",
[
71897
]
],
[
[
71866,
71866
],
"mapped",
[
71898
]
],
[
[
71867,
71867
],
"mapped",
[
71899
]
],
[
[
71868,
71868
],
"mapped",
[
71900
]
],
[
[
71869,
71869
],
"mapped",
[
71901
]
],
[
[
71870,
71870
],
"mapped",
[
71902
]
],
[
[
71871,
71871
],
"mapped",
[
71903
]
],
[
[
71872,
71913
],
"valid"
],
[
[
71914,
71922
],
"valid",
[
],
"NV8"
],
[
[
71923,
71934
],
"disallowed"
],
[
[
71935,
71935
],
"valid"
],
[
[
71936,
72383
],
"disallowed"
],
[
[
72384,
72440
],
"valid"
],
[
[
72441,
73727
],
"disallowed"
],
[
[
73728,
74606
],
"valid"
],
[
[
74607,
74648
],
"valid"
],
[
[
74649,
74649
],
"valid"
],
[
[
74650,
74751
],
"disallowed"
],
[
[
74752,
74850
],
"valid",
[
],
"NV8"
],
[
[
74851,
74862
],
"valid",
[
],
"NV8"
],
[
[
74863,
74863
],
"disallowed"
],
[
[
74864,
74867
],
"valid",
[
],
"NV8"
],
[
[
74868,
74868
],
"valid",
[
],
"NV8"
],
[
[
74869,
74879
],
"disallowed"
],
[
[
74880,
75075
],
"valid"
],
[
[
75076,
77823
],
"disallowed"
],
[
[
77824,
78894
],
"valid"
],
[
[
78895,
82943
],
"disallowed"
],
[
[
82944,
83526
],
"valid"
],
[
[
83527,
92159
],
"disallowed"
],
[
[
92160,
92728
],
"valid"
],
[
[
92729,
92735
],
"disallowed"
],
[
[
92736,
92766
],
"valid"
],
[
[
92767,
92767
],
"disallowed"
],
[
[
92768,
92777
],
"valid"
],
[
[
92778,
92781
],
"disallowed"
],
[
[
92782,
92783
],
"valid",
[
],
"NV8"
],
[
[
92784,
92879
],
"disallowed"
],
[
[
92880,
92909
],
"valid"
],
[
[
92910,
92911
],
"disallowed"
],
[
[
92912,
92916
],
"valid"
],
[
[
92917,
92917
],
"valid",
[
],
"NV8"
],
[
[
92918,
92927
],
"disallowed"
],
[
[
92928,
92982
],
"valid"
],
[
[
92983,
92991
],
"valid",
[
],
"NV8"
],
[
[
92992,
92995
],
"valid"
],
[
[
92996,
92997
],
"valid",
[
],
"NV8"
],
[
[
92998,
93007
],
"disallowed"
],
[
[
93008,
93017
],
"valid"
],
[
[
93018,
93018
],
"disallowed"
],
[
[
93019,
93025
],
"valid",
[
],
"NV8"
],
[
[
93026,
93026
],
"disallowed"
],
[
[
93027,
93047
],
"valid"
],
[
[
93048,
93052
],
"disallowed"
],
[
[
93053,
93071
],
"valid"
],
[
[
93072,
93951
],
"disallowed"
],
[
[
93952,
94020
],
"valid"
],
[
[
94021,
94031
],
"disallowed"
],
[
[
94032,
94078
],
"valid"
],
[
[
94079,
94094
],
"disallowed"
],
[
[
94095,
94111
],
"valid"
],
[
[
94112,
110591
],
"disallowed"
],
[
[
110592,
110593
],
"valid"
],
[
[
110594,
113663
],
"disallowed"
],
[
[
113664,
113770
],
"valid"
],
[
[
113771,
113775
],
"disallowed"
],
[
[
113776,
113788
],
"valid"
],
[
[
113789,
113791
],
"disallowed"
],
[
[
113792,
113800
],
"valid"
],
[
[
113801,
113807
],
"disallowed"
],
[
[
113808,
113817
],
"valid"
],
[
[
113818,
113819
],
"disallowed"
],
[
[
113820,
113820
],
"valid",
[
],
"NV8"
],
[
[
113821,
113822
],
"valid"
],
[
[
113823,
113823
],
"valid",
[
],
"NV8"
],
[
[
113824,
113827
],
"ignored"
],
[
[
113828,
118783
],
"disallowed"
],
[
[
118784,
119029
],
"valid",
[
],
"NV8"
],
[
[
119030,
119039
],
"disallowed"
],
[
[
119040,
119078
],
"valid",
[
],
"NV8"
],
[
[
119079,
119080
],
"disallowed"
],
[
[
119081,
119081
],
"valid",
[
],
"NV8"
],
[
[
119082,
119133
],
"valid",
[
],
"NV8"
],
[
[
119134,
119134
],
"mapped",
[
119127,
119141
]
],
[
[
119135,
119135
],
"mapped",
[
119128,
119141
]
],
[
[
119136,
119136
],
"mapped",
[
119128,
119141,
119150
]
],
[
[
119137,
119137
],
"mapped",
[
119128,
119141,
119151
]
],
[
[
119138,
119138
],
"mapped",
[
119128,
119141,
119152
]
],
[
[
119139,
119139
],
"mapped",
[
119128,
119141,
119153
]
],
[
[
119140,
119140
],
"mapped",
[
119128,
119141,
119154
]
],
[
[
119141,
119154
],
"valid",
[
],
"NV8"
],
[
[
119155,
119162
],
"disallowed"
],
[
[
119163,
119226
],
"valid",
[
],
"NV8"
],
[
[
119227,
119227
],
"mapped",
[
119225,
119141
]
],
[
[
119228,
119228
],
"mapped",
[
119226,
119141
]
],
[
[
119229,
119229
],
"mapped",
[
119225,
119141,
119150
]
],
[
[
119230,
119230
],
"mapped",
[
119226,
119141,
119150
]
],
[
[
119231,
119231
],
"mapped",
[
119225,
119141,
119151
]
],
[
[
119232,
119232
],
"mapped",
[
119226,
119141,
119151
]
],
[
[
119233,
119261
],
"valid",
[
],
"NV8"
],
[
[
119262,
119272
],
"valid",
[
],
"NV8"
],
[
[
119273,
119295
],
"disallowed"
],
[
[
119296,
119365
],
"valid",
[
],
"NV8"
],
[
[
119366,
119551
],
"disallowed"
],
[
[
119552,
119638
],
"valid",
[
],
"NV8"
],
[
[
119639,
119647
],
"disallowed"
],
[
[
119648,
119665
],
"valid",
[
],
"NV8"
],
[
[
119666,
119807
],
"disallowed"
],
[
[
119808,
119808
],
"mapped",
[
97
]
],
[
[
119809,
119809
],
"mapped",
[
98
]
],
[
[
119810,
119810
],
"mapped",
[
99
]
],
[
[
119811,
119811
],
"mapped",
[
100
]
],
[
[
119812,
119812
],
"mapped",
[
101
]
],
[
[
119813,
119813
],
"mapped",
[
102
]
],
[
[
119814,
119814
],
"mapped",
[
103
]
],
[
[
119815,
119815
],
"mapped",
[
104
]
],
[
[
119816,
119816
],
"mapped",
[
105
]
],
[
[
119817,
119817
],
"mapped",
[
106
]
],
[
[
119818,
119818
],
"mapped",
[
107
]
],
[
[
119819,
119819
],
"mapped",
[
108
]
],
[
[
119820,
119820
],
"mapped",
[
109
]
],
[
[
119821,
119821
],
"mapped",
[
110
]
],
[
[
119822,
119822
],
"mapped",
[
111
]
],
[
[
119823,
119823
],
"mapped",
[
112
]
],
[
[
119824,
119824
],
"mapped",
[
113
]
],
[
[
119825,
119825
],
"mapped",
[
114
]
],
[
[
119826,
119826
],
"mapped",
[
115
]
],
[
[
119827,
119827
],
"mapped",
[
116
]
],
[
[
119828,
119828
],
"mapped",
[
117
]
],
[
[
119829,
119829
],
"mapped",
[
118
]
],
[
[
119830,
119830
],
"mapped",
[
119
]
],
[
[
119831,
119831
],
"mapped",
[
120
]
],
[
[
119832,
119832
],
"mapped",
[
121
]
],
[
[
119833,
119833
],
"mapped",
[
122
]
],
[
[
119834,
119834
],
"mapped",
[
97
]
],
[
[
119835,
119835
],
"mapped",
[
98
]
],
[
[
119836,
119836
],
"mapped",
[
99
]
],
[
[
119837,
119837
],
"mapped",
[
100
]
],
[
[
119838,
119838
],
"mapped",
[
101
]
],
[
[
119839,
119839
],
"mapped",
[
102
]
],
[
[
119840,
119840
],
"mapped",
[
103
]
],
[
[
119841,
119841
],
"mapped",
[
104
]
],
[
[
119842,
119842
],
"mapped",
[
105
]
],
[
[
119843,
119843
],
"mapped",
[
106
]
],
[
[
119844,
119844
],
"mapped",
[
107
]
],
[
[
119845,
119845
],
"mapped",
[
108
]
],
[
[
119846,
119846
],
"mapped",
[
109
]
],
[
[
119847,
119847
],
"mapped",
[
110
]
],
[
[
119848,
119848
],
"mapped",
[
111
]
],
[
[
119849,
119849
],
"mapped",
[
112
]
],
[
[
119850,
119850
],
"mapped",
[
113
]
],
[
[
119851,
119851
],
"mapped",
[
114
]
],
[
[
119852,
119852
],
"mapped",
[
115
]
],
[
[
119853,
119853
],
"mapped",
[
116
]
],
[
[
119854,
119854
],
"mapped",
[
117
]
],
[
[
119855,
119855
],
"mapped",
[
118
]
],
[
[
119856,
119856
],
"mapped",
[
119
]
],
[
[
119857,
119857
],
"mapped",
[
120
]
],
[
[
119858,
119858
],
"mapped",
[
121
]
],
[
[
119859,
119859
],
"mapped",
[
122
]
],
[
[
119860,
119860
],
"mapped",
[
97
]
],
[
[
119861,
119861
],
"mapped",
[
98
]
],
[
[
119862,
119862
],
"mapped",
[
99
]
],
[
[
119863,
119863
],
"mapped",
[
100
]
],
[
[
119864,
119864
],
"mapped",
[
101
]
],
[
[
119865,
119865
],
"mapped",
[
102
]
],
[
[
119866,
119866
],
"mapped",
[
103
]
],
[
[
119867,
119867
],
"mapped",
[
104
]
],
[
[
119868,
119868
],
"mapped",
[
105
]
],
[
[
119869,
119869
],
"mapped",
[
106
]
],
[
[
119870,
119870
],
"mapped",
[
107
]
],
[
[
119871,
119871
],
"mapped",
[
108
]
],
[
[
119872,
119872
],
"mapped",
[
109
]
],
[
[
119873,
119873
],
"mapped",
[
110
]
],
[
[
119874,
119874
],
"mapped",
[
111
]
],
[
[
119875,
119875
],
"mapped",
[
112
]
],
[
[
119876,
119876
],
"mapped",
[
113
]
],
[
[
119877,
119877
],
"mapped",
[
114
]
],
[
[
119878,
119878
],
"mapped",
[
115
]
],
[
[
119879,
119879
],
"mapped",
[
116
]
],
[
[
119880,
119880
],
"mapped",
[
117
]
],
[
[
119881,
119881
],
"mapped",
[
118
]
],
[
[
119882,
119882
],
"mapped",
[
119
]
],
[
[
119883,
119883
],
"mapped",
[
120
]
],
[
[
119884,
119884
],
"mapped",
[
121
]
],
[
[
119885,
119885
],
"mapped",
[
122
]
],
[
[
119886,
119886
],
"mapped",
[
97
]
],
[
[
119887,
119887
],
"mapped",
[
98
]
],
[
[
119888,
119888
],
"mapped",
[
99
]
],
[
[
119889,
119889
],
"mapped",
[
100
]
],
[
[
119890,
119890
],
"mapped",
[
101
]
],
[
[
119891,
119891
],
"mapped",
[
102
]
],
[
[
119892,
119892
],
"mapped",
[
103
]
],
[
[
119893,
119893
],
"disallowed"
],
[
[
119894,
119894
],
"mapped",
[
105
]
],
[
[
119895,
119895
],
"mapped",
[
106
]
],
[
[
119896,
119896
],
"mapped",
[
107
]
],
[
[
119897,
119897
],
"mapped",
[
108
]
],
[
[
119898,
119898
],
"mapped",
[
109
]
],
[
[
119899,
119899
],
"mapped",
[
110
]
],
[
[
119900,
119900
],
"mapped",
[
111
]
],
[
[
119901,
119901
],
"mapped",
[
112
]
],
[
[
119902,
119902
],
"mapped",
[
113
]
],
[
[
119903,
119903
],
"mapped",
[
114
]
],
[
[
119904,
119904
],
"mapped",
[
115
]
],
[
[
119905,
119905
],
"mapped",
[
116
]
],
[
[
119906,
119906
],
"mapped",
[
117
]
],
[
[
119907,
119907
],
"mapped",
[
118
]
],
[
[
119908,
119908
],
"mapped",
[
119
]
],
[
[
119909,
119909
],
"mapped",
[
120
]
],
[
[
119910,
119910
],
"mapped",
[
121
]
],
[
[
119911,
119911
],
"mapped",
[
122
]
],
[
[
119912,
119912
],
"mapped",
[
97
]
],
[
[
119913,
119913
],
"mapped",
[
98
]
],
[
[
119914,
119914
],
"mapped",
[
99
]
],
[
[
119915,
119915
],
"mapped",
[
100
]
],
[
[
119916,
119916
],
"mapped",
[
101
]
],
[
[
119917,
119917
],
"mapped",
[
102
]
],
[
[
119918,
119918
],
"mapped",
[
103
]
],
[
[
119919,
119919
],
"mapped",
[
104
]
],
[
[
119920,
119920
],
"mapped",
[
105
]
],
[
[
119921,
119921
],
"mapped",
[
106
]
],
[
[
119922,
119922
],
"mapped",
[
107
]
],
[
[
119923,
119923
],
"mapped",
[
108
]
],
[
[
119924,
119924
],
"mapped",
[
109
]
],
[
[
119925,
119925
],
"mapped",
[
110
]
],
[
[
119926,
119926
],
"mapped",
[
111
]
],
[
[
119927,
119927
],
"mapped",
[
112
]
],
[
[
119928,
119928
],
"mapped",
[
113
]
],
[
[
119929,
119929
],
"mapped",
[
114
]
],
[
[
119930,
119930
],
"mapped",
[
115
]
],
[
[
119931,
119931
],
"mapped",
[
116
]
],
[
[
119932,
119932
],
"mapped",
[
117
]
],
[
[
119933,
119933
],
"mapped",
[
118
]
],
[
[
119934,
119934
],
"mapped",
[
119
]
],
[
[
119935,
119935
],
"mapped",
[
120
]
],
[
[
119936,
119936
],
"mapped",
[
121
]
],
[
[
119937,
119937
],
"mapped",
[
122
]
],
[
[
119938,
119938
],
"mapped",
[
97
]
],
[
[
119939,
119939
],
"mapped",
[
98
]
],
[
[
119940,
119940
],
"mapped",
[
99
]
],
[
[
119941,
119941
],
"mapped",
[
100
]
],
[
[
119942,
119942
],
"mapped",
[
101
]
],
[
[
119943,
119943
],
"mapped",
[
102
]
],
[
[
119944,
119944
],
"mapped",
[
103
]
],
[
[
119945,
119945
],
"mapped",
[
104
]
],
[
[
119946,
119946
],
"mapped",
[
105
]
],
[
[
119947,
119947
],
"mapped",
[
106
]
],
[
[
119948,
119948
],
"mapped",
[
107
]
],
[
[
119949,
119949
],
"mapped",
[
108
]
],
[
[
119950,
119950
],
"mapped",
[
109
]
],
[
[
119951,
119951
],
"mapped",
[
110
]
],
[
[
119952,
119952
],
"mapped",
[
111
]
],
[
[
119953,
119953
],
"mapped",
[
112
]
],
[
[
119954,
119954
],
"mapped",
[
113
]
],
[
[
119955,
119955
],
"mapped",
[
114
]
],
[
[
119956,
119956
],
"mapped",
[
115
]
],
[
[
119957,
119957
],
"mapped",
[
116
]
],
[
[
119958,
119958
],
"mapped",
[
117
]
],
[
[
119959,
119959
],
"mapped",
[
118
]
],
[
[
119960,
119960
],
"mapped",
[
119
]
],
[
[
119961,
119961
],
"mapped",
[
120
]
],
[
[
119962,
119962
],
"mapped",
[
121
]
],
[
[
119963,
119963
],
"mapped",
[
122
]
],
[
[
119964,
119964
],
"mapped",
[
97
]
],
[
[
119965,
119965
],
"disallowed"
],
[
[
119966,
119966
],
"mapped",
[
99
]
],
[
[
119967,
119967
],
"mapped",
[
100
]
],
[
[
119968,
119969
],
"disallowed"
],
[
[
119970,
119970
],
"mapped",
[
103
]
],
[
[
119971,
119972
],
"disallowed"
],
[
[
119973,
119973
],
"mapped",
[
106
]
],
[
[
119974,
119974
],
"mapped",
[
107
]
],
[
[
119975,
119976
],
"disallowed"
],
[
[
119977,
119977
],
"mapped",
[
110
]
],
[
[
119978,
119978
],
"mapped",
[
111
]
],
[
[
119979,
119979
],
"mapped",
[
112
]
],
[
[
119980,
119980
],
"mapped",
[
113
]
],
[
[
119981,
119981
],
"disallowed"
],
[
[
119982,
119982
],
"mapped",
[
115
]
],
[
[
119983,
119983
],
"mapped",
[
116
]
],
[
[
119984,
119984
],
"mapped",
[
117
]
],
[
[
119985,
119985
],
"mapped",
[
118
]
],
[
[
119986,
119986
],
"mapped",
[
119
]
],
[
[
119987,
119987
],
"mapped",
[
120
]
],
[
[
119988,
119988
],
"mapped",
[
121
]
],
[
[
119989,
119989
],
"mapped",
[
122
]
],
[
[
119990,
119990
],
"mapped",
[
97
]
],
[
[
119991,
119991
],
"mapped",
[
98
]
],
[
[
119992,
119992
],
"mapped",
[
99
]
],
[
[
119993,
119993
],
"mapped",
[
100
]
],
[
[
119994,
119994
],
"disallowed"
],
[
[
119995,
119995
],
"mapped",
[
102
]
],
[
[
119996,
119996
],
"disallowed"
],
[
[
119997,
119997
],
"mapped",
[
104
]
],
[
[
119998,
119998
],
"mapped",
[
105
]
],
[
[
119999,
119999
],
"mapped",
[
106
]
],
[
[
120000,
120000
],
"mapped",
[
107
]
],
[
[
120001,
120001
],
"mapped",
[
108
]
],
[
[
120002,
120002
],
"mapped",
[
109
]
],
[
[
120003,
120003
],
"mapped",
[
110
]
],
[
[
120004,
120004
],
"disallowed"
],
[
[
120005,
120005
],
"mapped",
[
112
]
],
[
[
120006,
120006
],
"mapped",
[
113
]
],
[
[
120007,
120007
],
"mapped",
[
114
]
],
[
[
120008,
120008
],
"mapped",
[
115
]
],
[
[
120009,
120009
],
"mapped",
[
116
]
],
[
[
120010,
120010
],
"mapped",
[
117
]
],
[
[
120011,
120011
],
"mapped",
[
118
]
],
[
[
120012,
120012
],
"mapped",
[
119
]
],
[
[
120013,
120013
],
"mapped",
[
120
]
],
[
[
120014,
120014
],
"mapped",
[
121
]
],
[
[
120015,
120015
],
"mapped",
[
122
]
],
[
[
120016,
120016
],
"mapped",
[
97
]
],
[
[
120017,
120017
],
"mapped",
[
98
]
],
[
[
120018,
120018
],
"mapped",
[
99
]
],
[
[
120019,
120019
],
"mapped",
[
100
]
],
[
[
120020,
120020
],
"mapped",
[
101
]
],
[
[
120021,
120021
],
"mapped",
[
102
]
],
[
[
120022,
120022
],
"mapped",
[
103
]
],
[
[
120023,
120023
],
"mapped",
[
104
]
],
[
[
120024,
120024
],
"mapped",
[
105
]
],
[
[
120025,
120025
],
"mapped",
[
106
]
],
[
[
120026,
120026
],
"mapped",
[
107
]
],
[
[
120027,
120027
],
"mapped",
[
108
]
],
[
[
120028,
120028
],
"mapped",
[
109
]
],
[
[
120029,
120029
],
"mapped",
[
110
]
],
[
[
120030,
120030
],
"mapped",
[
111
]
],
[
[
120031,
120031
],
"mapped",
[
112
]
],
[
[
120032,
120032
],
"mapped",
[
113
]
],
[
[
120033,
120033
],
"mapped",
[
114
]
],
[
[
120034,
120034
],
"mapped",
[
115
]
],
[
[
120035,
120035
],
"mapped",
[
116
]
],
[
[
120036,
120036
],
"mapped",
[
117
]
],
[
[
120037,
120037
],
"mapped",
[
118
]
],
[
[
120038,
120038
],
"mapped",
[
119
]
],
[
[
120039,
120039
],
"mapped",
[
120
]
],
[
[
120040,
120040
],
"mapped",
[
121
]
],
[
[
120041,
120041
],
"mapped",
[
122
]
],
[
[
120042,
120042
],
"mapped",
[
97
]
],
[
[
120043,
120043
],
"mapped",
[
98
]
],
[
[
120044,
120044
],
"mapped",
[
99
]
],
[
[
120045,
120045
],
"mapped",
[
100
]
],
[
[
120046,
120046
],
"mapped",
[
101
]
],
[
[
120047,
120047
],
"mapped",
[
102
]
],
[
[
120048,
120048
],
"mapped",
[
103
]
],
[
[
120049,
120049
],
"mapped",
[
104
]
],
[
[
120050,
120050
],
"mapped",
[
105
]
],
[
[
120051,
120051
],
"mapped",
[
106
]
],
[
[
120052,
120052
],
"mapped",
[
107
]
],
[
[
120053,
120053
],
"mapped",
[
108
]
],
[
[
120054,
120054
],
"mapped",
[
109
]
],
[
[
120055,
120055
],
"mapped",
[
110
]
],
[
[
120056,
120056
],
"mapped",
[
111
]
],
[
[
120057,
120057
],
"mapped",
[
112
]
],
[
[
120058,
120058
],
"mapped",
[
113
]
],
[
[
120059,
120059
],
"mapped",
[
114
]
],
[
[
120060,
120060
],
"mapped",
[
115
]
],
[
[
120061,
120061
],
"mapped",
[
116
]
],
[
[
120062,
120062
],
"mapped",
[
117
]
],
[
[
120063,
120063
],
"mapped",
[
118
]
],
[
[
120064,
120064
],
"mapped",
[
119
]
],
[
[
120065,
120065
],
"mapped",
[
120
]
],
[
[
120066,
120066
],
"mapped",
[
121
]
],
[
[
120067,
120067
],
"mapped",
[
122
]
],
[
[
120068,
120068
],
"mapped",
[
97
]
],
[
[
120069,
120069
],
"mapped",
[
98
]
],
[
[
120070,
120070
],
"disallowed"
],
[
[
120071,
120071
],
"mapped",
[
100
]
],
[
[
120072,
120072
],
"mapped",
[
101
]
],
[
[
120073,
120073
],
"mapped",
[
102
]
],
[
[
120074,
120074
],
"mapped",
[
103
]
],
[
[
120075,
120076
],
"disallowed"
],
[
[
120077,
120077
],
"mapped",
[
106
]
],
[
[
120078,
120078
],
"mapped",
[
107
]
],
[
[
120079,
120079
],
"mapped",
[
108
]
],
[
[
120080,
120080
],
"mapped",
[
109
]
],
[
[
120081,
120081
],
"mapped",
[
110
]
],
[
[
120082,
120082
],
"mapped",
[
111
]
],
[
[
120083,
120083
],
"mapped",
[
112
]
],
[
[
120084,
120084
],
"mapped",
[
113
]
],
[
[
120085,
120085
],
"disallowed"
],
[
[
120086,
120086
],
"mapped",
[
115
]
],
[
[
120087,
120087
],
"mapped",
[
116
]
],
[
[
120088,
120088
],
"mapped",
[
117
]
],
[
[
120089,
120089
],
"mapped",
[
118
]
],
[
[
120090,
120090
],
"mapped",
[
119
]
],
[
[
120091,
120091
],
"mapped",
[
120
]
],
[
[
120092,
120092
],
"mapped",
[
121
]
],
[
[
120093,
120093
],
"disallowed"
],
[
[
120094,
120094
],
"mapped",
[
97
]
],
[
[
120095,
120095
],
"mapped",
[
98
]
],
[
[
120096,
120096
],
"mapped",
[
99
]
],
[
[
120097,
120097
],
"mapped",
[
100
]
],
[
[
120098,
120098
],
"mapped",
[
101
]
],
[
[
120099,
120099
],
"mapped",
[
102
]
],
[
[
120100,
120100
],
"mapped",
[
103
]
],
[
[
120101,
120101
],
"mapped",
[
104
]
],
[
[
120102,
120102
],
"mapped",
[
105
]
],
[
[
120103,
120103
],
"mapped",
[
106
]
],
[
[
120104,
120104
],
"mapped",
[
107
]
],
[
[
120105,
120105
],
"mapped",
[
108
]
],
[
[
120106,
120106
],
"mapped",
[
109
]
],
[
[
120107,
120107
],
"mapped",
[
110
]
],
[
[
120108,
120108
],
"mapped",
[
111
]
],
[
[
120109,
120109
],
"mapped",
[
112
]
],
[
[
120110,
120110
],
"mapped",
[
113
]
],
[
[
120111,
120111
],
"mapped",
[
114
]
],
[
[
120112,
120112
],
"mapped",
[
115
]
],
[
[
120113,
120113
],
"mapped",
[
116
]
],
[
[
120114,
120114
],
"mapped",
[
117
]
],
[
[
120115,
120115
],
"mapped",
[
118
]
],
[
[
120116,
120116
],
"mapped",
[
119
]
],
[
[
120117,
120117
],
"mapped",
[
120
]
],
[
[
120118,
120118
],
"mapped",
[
121
]
],
[
[
120119,
120119
],
"mapped",
[
122
]
],
[
[
120120,
120120
],
"mapped",
[
97
]
],
[
[
120121,
120121
],
"mapped",
[
98
]
],
[
[
120122,
120122
],
"disallowed"
],
[
[
120123,
120123
],
"mapped",
[
100
]
],
[
[
120124,
120124
],
"mapped",
[
101
]
],
[
[
120125,
120125
],
"mapped",
[
102
]
],
[
[
120126,
120126
],
"mapped",
[
103
]
],
[
[
120127,
120127
],
"disallowed"
],
[
[
120128,
120128
],
"mapped",
[
105
]
],
[
[
120129,
120129
],
"mapped",
[
106
]
],
[
[
120130,
120130
],
"mapped",
[
107
]
],
[
[
120131,
120131
],
"mapped",
[
108
]
],
[
[
120132,
120132
],
"mapped",
[
109
]
],
[
[
120133,
120133
],
"disallowed"
],
[
[
120134,
120134
],
"mapped",
[
111
]
],
[
[
120135,
120137
],
"disallowed"
],
[
[
120138,
120138
],
"mapped",
[
115
]
],
[
[
120139,
120139
],
"mapped",
[
116
]
],
[
[
120140,
120140
],
"mapped",
[
117
]
],
[
[
120141,
120141
],
"mapped",
[
118
]
],
[
[
120142,
120142
],
"mapped",
[
119
]
],
[
[
120143,
120143
],
"mapped",
[
120
]
],
[
[
120144,
120144
],
"mapped",
[
121
]
],
[
[
120145,
120145
],
"disallowed"
],
[
[
120146,
120146
],
"mapped",
[
97
]
],
[
[
120147,
120147
],
"mapped",
[
98
]
],
[
[
120148,
120148
],
"mapped",
[
99
]
],
[
[
120149,
120149
],
"mapped",
[
100
]
],
[
[
120150,
120150
],
"mapped",
[
101
]
],
[
[
120151,
120151
],
"mapped",
[
102
]
],
[
[
120152,
120152
],
"mapped",
[
103
]
],
[
[
120153,
120153
],
"mapped",
[
104
]
],
[
[
120154,
120154
],
"mapped",
[
105
]
],
[
[
120155,
120155
],
"mapped",
[
106
]
],
[
[
120156,
120156
],
"mapped",
[
107
]
],
[
[
120157,
120157
],
"mapped",
[
108
]
],
[
[
120158,
120158
],
"mapped",
[
109
]
],
[
[
120159,
120159
],
"mapped",
[
110
]
],
[
[
120160,
120160
],
"mapped",
[
111
]
],
[
[
120161,
120161
],
"mapped",
[
112
]
],
[
[
120162,
120162
],
"mapped",
[
113
]
],
[
[
120163,
120163
],
"mapped",
[
114
]
],
[
[
120164,
120164
],
"mapped",
[
115
]
],
[
[
120165,
120165
],
"mapped",
[
116
]
],
[
[
120166,
120166
],
"mapped",
[
117
]
],
[
[
120167,
120167
],
"mapped",
[
118
]
],
[
[
120168,
120168
],
"mapped",
[
119
]
],
[
[
120169,
120169
],
"mapped",
[
120
]
],
[
[
120170,
120170
],
"mapped",
[
121
]
],
[
[
120171,
120171
],
"mapped",
[
122
]
],
[
[
120172,
120172
],
"mapped",
[
97
]
],
[
[
120173,
120173
],
"mapped",
[
98
]
],
[
[
120174,
120174
],
"mapped",
[
99
]
],
[
[
120175,
120175
],
"mapped",
[
100
]
],
[
[
120176,
120176
],
"mapped",
[
101
]
],
[
[
120177,
120177
],
"mapped",
[
102
]
],
[
[
120178,
120178
],
"mapped",
[
103
]
],
[
[
120179,
120179
],
"mapped",
[
104
]
],
[
[
120180,
120180
],
"mapped",
[
105
]
],
[
[
120181,
120181
],
"mapped",
[
106
]
],
[
[
120182,
120182
],
"mapped",
[
107
]
],
[
[
120183,
120183
],
"mapped",
[
108
]
],
[
[
120184,
120184
],
"mapped",
[
109
]
],
[
[
120185,
120185
],
"mapped",
[
110
]
],
[
[
120186,
120186
],
"mapped",
[
111
]
],
[
[
120187,
120187
],
"mapped",
[
112
]
],
[
[
120188,
120188
],
"mapped",
[
113
]
],
[
[
120189,
120189
],
"mapped",
[
114
]
],
[
[
120190,
120190
],
"mapped",
[
115
]
],
[
[
120191,
120191
],
"mapped",
[
116
]
],
[
[
120192,
120192
],
"mapped",
[
117
]
],
[
[
120193,
120193
],
"mapped",
[
118
]
],
[
[
120194,
120194
],
"mapped",
[
119
]
],
[
[
120195,
120195
],
"mapped",
[
120
]
],
[
[
120196,
120196
],
"mapped",
[
121
]
],
[
[
120197,
120197
],
"mapped",
[
122
]
],
[
[
120198,
120198
],
"mapped",
[
97
]
],
[
[
120199,
120199
],
"mapped",
[
98
]
],
[
[
120200,
120200
],
"mapped",
[
99
]
],
[
[
120201,
120201
],
"mapped",
[
100
]
],
[
[
120202,
120202
],
"mapped",
[
101
]
],
[
[
120203,
120203
],
"mapped",
[
102
]
],
[
[
120204,
120204
],
"mapped",
[
103
]
],
[
[
120205,
120205
],
"mapped",
[
104
]
],
[
[
120206,
120206
],
"mapped",
[
105
]
],
[
[
120207,
120207
],
"mapped",
[
106
]
],
[
[
120208,
120208
],
"mapped",
[
107
]
],
[
[
120209,
120209
],
"mapped",
[
108
]
],
[
[
120210,
120210
],
"mapped",
[
109
]
],
[
[
120211,
120211
],
"mapped",
[
110
]
],
[
[
120212,
120212
],
"mapped",
[
111
]
],
[
[
120213,
120213
],
"mapped",
[
112
]
],
[
[
120214,
120214
],
"mapped",
[
113
]
],
[
[
120215,
120215
],
"mapped",
[
114
]
],
[
[
120216,
120216
],
"mapped",
[
115
]
],
[
[
120217,
120217
],
"mapped",
[
116
]
],
[
[
120218,
120218
],
"mapped",
[
117
]
],
[
[
120219,
120219
],
"mapped",
[
118
]
],
[
[
120220,
120220
],
"mapped",
[
119
]
],
[
[
120221,
120221
],
"mapped",
[
120
]
],
[
[
120222,
120222
],
"mapped",
[
121
]
],
[
[
120223,
120223
],
"mapped",
[
122
]
],
[
[
120224,
120224
],
"mapped",
[
97
]
],
[
[
120225,
120225
],
"mapped",
[
98
]
],
[
[
120226,
120226
],
"mapped",
[
99
]
],
[
[
120227,
120227
],
"mapped",
[
100
]
],
[
[
120228,
120228
],
"mapped",
[
101
]
],
[
[
120229,
120229
],
"mapped",
[
102
]
],
[
[
120230,
120230
],
"mapped",
[
103
]
],
[
[
120231,
120231
],
"mapped",
[
104
]
],
[
[
120232,
120232
],
"mapped",
[
105
]
],
[
[
120233,
120233
],
"mapped",
[
106
]
],
[
[
120234,
120234
],
"mapped",
[
107
]
],
[
[
120235,
120235
],
"mapped",
[
108
]
],
[
[
120236,
120236
],
"mapped",
[
109
]
],
[
[
120237,
120237
],
"mapped",
[
110
]
],
[
[
120238,
120238
],
"mapped",
[
111
]
],
[
[
120239,
120239
],
"mapped",
[
112
]
],
[
[
120240,
120240
],
"mapped",
[
113
]
],
[
[
120241,
120241
],
"mapped",
[
114
]
],
[
[
120242,
120242
],
"mapped",
[
115
]
],
[
[
120243,
120243
],
"mapped",
[
116
]
],
[
[
120244,
120244
],
"mapped",
[
117
]
],
[
[
120245,
120245
],
"mapped",
[
118
]
],
[
[
120246,
120246
],
"mapped",
[
119
]
],
[
[
120247,
120247
],
"mapped",
[
120
]
],
[
[
120248,
120248
],
"mapped",
[
121
]
],
[
[
120249,
120249
],
"mapped",
[
122
]
],
[
[
120250,
120250
],
"mapped",
[
97
]
],
[
[
120251,
120251
],
"mapped",
[
98
]
],
[
[
120252,
120252
],
"mapped",
[
99
]
],
[
[
120253,
120253
],
"mapped",
[
100
]
],
[
[
120254,
120254
],
"mapped",
[
101
]
],
[
[
120255,
120255
],
"mapped",
[
102
]
],
[
[
120256,
120256
],
"mapped",
[
103
]
],
[
[
120257,
120257
],
"mapped",
[
104
]
],
[
[
120258,
120258
],
"mapped",
[
105
]
],
[
[
120259,
120259
],
"mapped",
[
106
]
],
[
[
120260,
120260
],
"mapped",
[
107
]
],
[
[
120261,
120261
],
"mapped",
[
108
]
],
[
[
120262,
120262
],
"mapped",
[
109
]
],
[
[
120263,
120263
],
"mapped",
[
110
]
],
[
[
120264,
120264
],
"mapped",
[
111
]
],
[
[
120265,
120265
],
"mapped",
[
112
]
],
[
[
120266,
120266
],
"mapped",
[
113
]
],
[
[
120267,
120267
],
"mapped",
[
114
]
],
[
[
120268,
120268
],
"mapped",
[
115
]
],
[
[
120269,
120269
],
"mapped",
[
116
]
],
[
[
120270,
120270
],
"mapped",
[
117
]
],
[
[
120271,
120271
],
"mapped",
[
118
]
],
[
[
120272,
120272
],
"mapped",
[
119
]
],
[
[
120273,
120273
],
"mapped",
[
120
]
],
[
[
120274,
120274
],
"mapped",
[
121
]
],
[
[
120275,
120275
],
"mapped",
[
122
]
],
[
[
120276,
120276
],
"mapped",
[
97
]
],
[
[
120277,
120277
],
"mapped",
[
98
]
],
[
[
120278,
120278
],
"mapped",
[
99
]
],
[
[
120279,
120279
],
"mapped",
[
100
]
],
[
[
120280,
120280
],
"mapped",
[
101
]
],
[
[
120281,
120281
],
"mapped",
[
102
]
],
[
[
120282,
120282
],
"mapped",
[
103
]
],
[
[
120283,
120283
],
"mapped",
[
104
]
],
[
[
120284,
120284
],
"mapped",
[
105
]
],
[
[
120285,
120285
],
"mapped",
[
106
]
],
[
[
120286,
120286
],
"mapped",
[
107
]
],
[
[
120287,
120287
],
"mapped",
[
108
]
],
[
[
120288,
120288
],
"mapped",
[
109
]
],
[
[
120289,
120289
],
"mapped",
[
110
]
],
[
[
120290,
120290
],
"mapped",
[
111
]
],
[
[
120291,
120291
],
"mapped",
[
112
]
],
[
[
120292,
120292
],
"mapped",
[
113
]
],
[
[
120293,
120293
],
"mapped",
[
114
]
],
[
[
120294,
120294
],
"mapped",
[
115
]
],
[
[
120295,
120295
],
"mapped",
[
116
]
],
[
[
120296,
120296
],
"mapped",
[
117
]
],
[
[
120297,
120297
],
"mapped",
[
118
]
],
[
[
120298,
120298
],
"mapped",
[
119
]
],
[
[
120299,
120299
],
"mapped",
[
120
]
],
[
[
120300,
120300
],
"mapped",
[
121
]
],
[
[
120301,
120301
],
"mapped",
[
122
]
],
[
[
120302,
120302
],
"mapped",
[
97
]
],
[
[
120303,
120303
],
"mapped",
[
98
]
],
[
[
120304,
120304
],
"mapped",
[
99
]
],
[
[
120305,
120305
],
"mapped",
[
100
]
],
[
[
120306,
120306
],
"mapped",
[
101
]
],
[
[
120307,
120307
],
"mapped",
[
102
]
],
[
[
120308,
120308
],
"mapped",
[
103
]
],
[
[
120309,
120309
],
"mapped",
[
104
]
],
[
[
120310,
120310
],
"mapped",
[
105
]
],
[
[
120311,
120311
],
"mapped",
[
106
]
],
[
[
120312,
120312
],
"mapped",
[
107
]
],
[
[
120313,
120313
],
"mapped",
[
108
]
],
[
[
120314,
120314
],
"mapped",
[
109
]
],
[
[
120315,
120315
],
"mapped",
[
110
]
],
[
[
120316,
120316
],
"mapped",
[
111
]
],
[
[
120317,
120317
],
"mapped",
[
112
]
],
[
[
120318,
120318
],
"mapped",
[
113
]
],
[
[
120319,
120319
],
"mapped",
[
114
]
],
[
[
120320,
120320
],
"mapped",
[
115
]
],
[
[
120321,
120321
],
"mapped",
[
116
]
],
[
[
120322,
120322
],
"mapped",
[
117
]
],
[
[
120323,
120323
],
"mapped",
[
118
]
],
[
[
120324,
120324
],
"mapped",
[
119
]
],
[
[
120325,
120325
],
"mapped",
[
120
]
],
[
[
120326,
120326
],
"mapped",
[
121
]
],
[
[
120327,
120327
],
"mapped",
[
122
]
],
[
[
120328,
120328
],
"mapped",
[
97
]
],
[
[
120329,
120329
],
"mapped",
[
98
]
],
[
[
120330,
120330
],
"mapped",
[
99
]
],
[
[
120331,
120331
],
"mapped",
[
100
]
],
[
[
120332,
120332
],
"mapped",
[
101
]
],
[
[
120333,
120333
],
"mapped",
[
102
]
],
[
[
120334,
120334
],
"mapped",
[
103
]
],
[
[
120335,
120335
],
"mapped",
[
104
]
],
[
[
120336,
120336
],
"mapped",
[
105
]
],
[
[
120337,
120337
],
"mapped",
[
106
]
],
[
[
120338,
120338
],
"mapped",
[
107
]
],
[
[
120339,
120339
],
"mapped",
[
108
]
],
[
[
120340,
120340
],
"mapped",
[
109
]
],
[
[
120341,
120341
],
"mapped",
[
110
]
],
[
[
120342,
120342
],
"mapped",
[
111
]
],
[
[
120343,
120343
],
"mapped",
[
112
]
],
[
[
120344,
120344
],
"mapped",
[
113
]
],
[
[
120345,
120345
],
"mapped",
[
114
]
],
[
[
120346,
120346
],
"mapped",
[
115
]
],
[
[
120347,
120347
],
"mapped",
[
116
]
],
[
[
120348,
120348
],
"mapped",
[
117
]
],
[
[
120349,
120349
],
"mapped",
[
118
]
],
[
[
120350,
120350
],
"mapped",
[
119
]
],
[
[
120351,
120351
],
"mapped",
[
120
]
],
[
[
120352,
120352
],
"mapped",
[
121
]
],
[
[
120353,
120353
],
"mapped",
[
122
]
],
[
[
120354,
120354
],
"mapped",
[
97
]
],
[
[
120355,
120355
],
"mapped",
[
98
]
],
[
[
120356,
120356
],
"mapped",
[
99
]
],
[
[
120357,
120357
],
"mapped",
[
100
]
],
[
[
120358,
120358
],
"mapped",
[
101
]
],
[
[
120359,
120359
],
"mapped",
[
102
]
],
[
[
120360,
120360
],
"mapped",
[
103
]
],
[
[
120361,
120361
],
"mapped",
[
104
]
],
[
[
120362,
120362
],
"mapped",
[
105
]
],
[
[
120363,
120363
],
"mapped",
[
106
]
],
[
[
120364,
120364
],
"mapped",
[
107
]
],
[
[
120365,
120365
],
"mapped",
[
108
]
],
[
[
120366,
120366
],
"mapped",
[
109
]
],
[
[
120367,
120367
],
"mapped",
[
110
]
],
[
[
120368,
120368
],
"mapped",
[
111
]
],
[
[
120369,
120369
],
"mapped",
[
112
]
],
[
[
120370,
120370
],
"mapped",
[
113
]
],
[
[
120371,
120371
],
"mapped",
[
114
]
],
[
[
120372,
120372
],
"mapped",
[
115
]
],
[
[
120373,
120373
],
"mapped",
[
116
]
],
[
[
120374,
120374
],
"mapped",
[
117
]
],
[
[
120375,
120375
],
"mapped",
[
118
]
],
[
[
120376,
120376
],
"mapped",
[
119
]
],
[
[
120377,
120377
],
"mapped",
[
120
]
],
[
[
120378,
120378
],
"mapped",
[
121
]
],
[
[
120379,
120379
],
"mapped",
[
122
]
],
[
[
120380,
120380
],
"mapped",
[
97
]
],
[
[
120381,
120381
],
"mapped",
[
98
]
],
[
[
120382,
120382
],
"mapped",
[
99
]
],
[
[
120383,
120383
],
"mapped",
[
100
]
],
[
[
120384,
120384
],
"mapped",
[
101
]
],
[
[
120385,
120385
],
"mapped",
[
102
]
],
[
[
120386,
120386
],
"mapped",
[
103
]
],
[
[
120387,
120387
],
"mapped",
[
104
]
],
[
[
120388,
120388
],
"mapped",
[
105
]
],
[
[
120389,
120389
],
"mapped",
[
106
]
],
[
[
120390,
120390
],
"mapped",
[
107
]
],
[
[
120391,
120391
],
"mapped",
[
108
]
],
[
[
120392,
120392
],
"mapped",
[
109
]
],
[
[
120393,
120393
],
"mapped",
[
110
]
],
[
[
120394,
120394
],
"mapped",
[
111
]
],
[
[
120395,
120395
],
"mapped",
[
112
]
],
[
[
120396,
120396
],
"mapped",
[
113
]
],
[
[
120397,
120397
],
"mapped",
[
114
]
],
[
[
120398,
120398
],
"mapped",
[
115
]
],
[
[
120399,
120399
],
"mapped",
[
116
]
],
[
[
120400,
120400
],
"mapped",
[
117
]
],
[
[
120401,
120401
],
"mapped",
[
118
]
],
[
[
120402,
120402
],
"mapped",
[
119
]
],
[
[
120403,
120403
],
"mapped",
[
120
]
],
[
[
120404,
120404
],
"mapped",
[
121
]
],
[
[
120405,
120405
],
"mapped",
[
122
]
],
[
[
120406,
120406
],
"mapped",
[
97
]
],
[
[
120407,
120407
],
"mapped",
[
98
]
],
[
[
120408,
120408
],
"mapped",
[
99
]
],
[
[
120409,
120409
],
"mapped",
[
100
]
],
[
[
120410,
120410
],
"mapped",
[
101
]
],
[
[
120411,
120411
],
"mapped",
[
102
]
],
[
[
120412,
120412
],
"mapped",
[
103
]
],
[
[
120413,
120413
],
"mapped",
[
104
]
],
[
[
120414,
120414
],
"mapped",
[
105
]
],
[
[
120415,
120415
],
"mapped",
[
106
]
],
[
[
120416,
120416
],
"mapped",
[
107
]
],
[
[
120417,
120417
],
"mapped",
[
108
]
],
[
[
120418,
120418
],
"mapped",
[
109
]
],
[
[
120419,
120419
],
"mapped",
[
110
]
],
[
[
120420,
120420
],
"mapped",
[
111
]
],
[
[
120421,
120421
],
"mapped",
[
112
]
],
[
[
120422,
120422
],
"mapped",
[
113
]
],
[
[
120423,
120423
],
"mapped",
[
114
]
],
[
[
120424,
120424
],
"mapped",
[
115
]
],
[
[
120425,
120425
],
"mapped",
[
116
]
],
[
[
120426,
120426
],
"mapped",
[
117
]
],
[
[
120427,
120427
],
"mapped",
[
118
]
],
[
[
120428,
120428
],
"mapped",
[
119
]
],
[
[
120429,
120429
],
"mapped",
[
120
]
],
[
[
120430,
120430
],
"mapped",
[
121
]
],
[
[
120431,
120431
],
"mapped",
[
122
]
],
[
[
120432,
120432
],
"mapped",
[
97
]
],
[
[
120433,
120433
],
"mapped",
[
98
]
],
[
[
120434,
120434
],
"mapped",
[
99
]
],
[
[
120435,
120435
],
"mapped",
[
100
]
],
[
[
120436,
120436
],
"mapped",
[
101
]
],
[
[
120437,
120437
],
"mapped",
[
102
]
],
[
[
120438,
120438
],
"mapped",
[
103
]
],
[
[
120439,
120439
],
"mapped",
[
104
]
],
[
[
120440,
120440
],
"mapped",
[
105
]
],
[
[
120441,
120441
],
"mapped",
[
106
]
],
[
[
120442,
120442
],
"mapped",
[
107
]
],
[
[
120443,
120443
],
"mapped",
[
108
]
],
[
[
120444,
120444
],
"mapped",
[
109
]
],
[
[
120445,
120445
],
"mapped",
[
110
]
],
[
[
120446,
120446
],
"mapped",
[
111
]
],
[
[
120447,
120447
],
"mapped",
[
112
]
],
[
[
120448,
120448
],
"mapped",
[
113
]
],
[
[
120449,
120449
],
"mapped",
[
114
]
],
[
[
120450,
120450
],
"mapped",
[
115
]
],
[
[
120451,
120451
],
"mapped",
[
116
]
],
[
[
120452,
120452
],
"mapped",
[
117
]
],
[
[
120453,
120453
],
"mapped",
[
118
]
],
[
[
120454,
120454
],
"mapped",
[
119
]
],
[
[
120455,
120455
],
"mapped",
[
120
]
],
[
[
120456,
120456
],
"mapped",
[
121
]
],
[
[
120457,
120457
],
"mapped",
[
122
]
],
[
[
120458,
120458
],
"mapped",
[
97
]
],
[
[
120459,
120459
],
"mapped",
[
98
]
],
[
[
120460,
120460
],
"mapped",
[
99
]
],
[
[
120461,
120461
],
"mapped",
[
100
]
],
[
[
120462,
120462
],
"mapped",
[
101
]
],
[
[
120463,
120463
],
"mapped",
[
102
]
],
[
[
120464,
120464
],
"mapped",
[
103
]
],
[
[
120465,
120465
],
"mapped",
[
104
]
],
[
[
120466,
120466
],
"mapped",
[
105
]
],
[
[
120467,
120467
],
"mapped",
[
106
]
],
[
[
120468,
120468
],
"mapped",
[
107
]
],
[
[
120469,
120469
],
"mapped",
[
108
]
],
[
[
120470,
120470
],
"mapped",
[
109
]
],
[
[
120471,
120471
],
"mapped",
[
110
]
],
[
[
120472,
120472
],
"mapped",
[
111
]
],
[
[
120473,
120473
],
"mapped",
[
112
]
],
[
[
120474,
120474
],
"mapped",
[
113
]
],
[
[
120475,
120475
],
"mapped",
[
114
]
],
[
[
120476,
120476
],
"mapped",
[
115
]
],
[
[
120477,
120477
],
"mapped",
[
116
]
],
[
[
120478,
120478
],
"mapped",
[
117
]
],
[
[
120479,
120479
],
"mapped",
[
118
]
],
[
[
120480,
120480
],
"mapped",
[
119
]
],
[
[
120481,
120481
],
"mapped",
[
120
]
],
[
[
120482,
120482
],
"mapped",
[
121
]
],
[
[
120483,
120483
],
"mapped",
[
122
]
],
[
[
120484,
120484
],
"mapped",
[
305
]
],
[
[
120485,
120485
],
"mapped",
[
567
]
],
[
[
120486,
120487
],
"disallowed"
],
[
[
120488,
120488
],
"mapped",
[
945
]
],
[
[
120489,
120489
],
"mapped",
[
946
]
],
[
[
120490,
120490
],
"mapped",
[
947
]
],
[
[
120491,
120491
],
"mapped",
[
948
]
],
[
[
120492,
120492
],
"mapped",
[
949
]
],
[
[
120493,
120493
],
"mapped",
[
950
]
],
[
[
120494,
120494
],
"mapped",
[
951
]
],
[
[
120495,
120495
],
"mapped",
[
952
]
],
[
[
120496,
120496
],
"mapped",
[
953
]
],
[
[
120497,
120497
],
"mapped",
[
954
]
],
[
[
120498,
120498
],
"mapped",
[
955
]
],
[
[
120499,
120499
],
"mapped",
[
956
]
],
[
[
120500,
120500
],
"mapped",
[
957
]
],
[
[
120501,
120501
],
"mapped",
[
958
]
],
[
[
120502,
120502
],
"mapped",
[
959
]
],
[
[
120503,
120503
],
"mapped",
[
960
]
],
[
[
120504,
120504
],
"mapped",
[
961
]
],
[
[
120505,
120505
],
"mapped",
[
952
]
],
[
[
120506,
120506
],
"mapped",
[
963
]
],
[
[
120507,
120507
],
"mapped",
[
964
]
],
[
[
120508,
120508
],
"mapped",
[
965
]
],
[
[
120509,
120509
],
"mapped",
[
966
]
],
[
[
120510,
120510
],
"mapped",
[
967
]
],
[
[
120511,
120511
],
"mapped",
[
968
]
],
[
[
120512,
120512
],
"mapped",
[
969
]
],
[
[
120513,
120513
],
"mapped",
[
8711
]
],
[
[
120514,
120514
],
"mapped",
[
945
]
],
[
[
120515,
120515
],
"mapped",
[
946
]
],
[
[
120516,
120516
],
"mapped",
[
947
]
],
[
[
120517,
120517
],
"mapped",
[
948
]
],
[
[
120518,
120518
],
"mapped",
[
949
]
],
[
[
120519,
120519
],
"mapped",
[
950
]
],
[
[
120520,
120520
],
"mapped",
[
951
]
],
[
[
120521,
120521
],
"mapped",
[
952
]
],
[
[
120522,
120522
],
"mapped",
[
953
]
],
[
[
120523,
120523
],
"mapped",
[
954
]
],
[
[
120524,
120524
],
"mapped",
[
955
]
],
[
[
120525,
120525
],
"mapped",
[
956
]
],
[
[
120526,
120526
],
"mapped",
[
957
]
],
[
[
120527,
120527
],
"mapped",
[
958
]
],
[
[
120528,
120528
],
"mapped",
[
959
]
],
[
[
120529,
120529
],
"mapped",
[
960
]
],
[
[
120530,
120530
],
"mapped",
[
961
]
],
[
[
120531,
120532
],
"mapped",
[
963
]
],
[
[
120533,
120533
],
"mapped",
[
964
]
],
[
[
120534,
120534
],
"mapped",
[
965
]
],
[
[
120535,
120535
],
"mapped",
[
966
]
],
[
[
120536,
120536
],
"mapped",
[
967
]
],
[
[
120537,
120537
],
"mapped",
[
968
]
],
[
[
120538,
120538
],
"mapped",
[
969
]
],
[
[
120539,
120539
],
"mapped",
[
8706
]
],
[
[
120540,
120540
],
"mapped",
[
949
]
],
[
[
120541,
120541
],
"mapped",
[
952
]
],
[
[
120542,
120542
],
"mapped",
[
954
]
],
[
[
120543,
120543
],
"mapped",
[
966
]
],
[
[
120544,
120544
],
"mapped",
[
961
]
],
[
[
120545,
120545
],
"mapped",
[
960
]
],
[
[
120546,
120546
],
"mapped",
[
945
]
],
[
[
120547,
120547
],
"mapped",
[
946
]
],
[
[
120548,
120548
],
"mapped",
[
947
]
],
[
[
120549,
120549
],
"mapped",
[
948
]
],
[
[
120550,
120550
],
"mapped",
[
949
]
],
[
[
120551,
120551
],
"mapped",
[
950
]
],
[
[
120552,
120552
],
"mapped",
[
951
]
],
[
[
120553,
120553
],
"mapped",
[
952
]
],
[
[
120554,
120554
],
"mapped",
[
953
]
],
[
[
120555,
120555
],
"mapped",
[
954
]
],
[
[
120556,
120556
],
"mapped",
[
955
]
],
[
[
120557,
120557
],
"mapped",
[
956
]
],
[
[
120558,
120558
],
"mapped",
[
957
]
],
[
[
120559,
120559
],
"mapped",
[
958
]
],
[
[
120560,
120560
],
"mapped",
[
959
]
],
[
[
120561,
120561
],
"mapped",
[
960
]
],
[
[
120562,
120562
],
"mapped",
[
961
]
],
[
[
120563,
120563
],
"mapped",
[
952
]
],
[
[
120564,
120564
],
"mapped",
[
963
]
],
[
[
120565,
120565
],
"mapped",
[
964
]
],
[
[
120566,
120566
],
"mapped",
[
965
]
],
[
[
120567,
120567
],
"mapped",
[
966
]
],
[
[
120568,
120568
],
"mapped",
[
967
]
],
[
[
120569,
120569
],
"mapped",
[
968
]
],
[
[
120570,
120570
],
"mapped",
[
969
]
],
[
[
120571,
120571
],
"mapped",
[
8711
]
],
[
[
120572,
120572
],
"mapped",
[
945
]
],
[
[
120573,
120573
],
"mapped",
[
946
]
],
[
[
120574,
120574
],
"mapped",
[
947
]
],
[
[
120575,
120575
],
"mapped",
[
948
]
],
[
[
120576,
120576
],
"mapped",
[
949
]
],
[
[
120577,
120577
],
"mapped",
[
950
]
],
[
[
120578,
120578
],
"mapped",
[
951
]
],
[
[
120579,
120579
],
"mapped",
[
952
]
],
[
[
120580,
120580
],
"mapped",
[
953
]
],
[
[
120581,
120581
],
"mapped",
[
954
]
],
[
[
120582,
120582
],
"mapped",
[
955
]
],
[
[
120583,
120583
],
"mapped",
[
956
]
],
[
[
120584,
120584
],
"mapped",
[
957
]
],
[
[
120585,
120585
],
"mapped",
[
958
]
],
[
[
120586,
120586
],
"mapped",
[
959
]
],
[
[
120587,
120587
],
"mapped",
[
960
]
],
[
[
120588,
120588
],
"mapped",
[
961
]
],
[
[
120589,
120590
],
"mapped",
[
963
]
],
[
[
120591,
120591
],
"mapped",
[
964
]
],
[
[
120592,
120592
],
"mapped",
[
965
]
],
[
[
120593,
120593
],
"mapped",
[
966
]
],
[
[
120594,
120594
],
"mapped",
[
967
]
],
[
[
120595,
120595
],
"mapped",
[
968
]
],
[
[
120596,
120596
],
"mapped",
[
969
]
],
[
[
120597,
120597
],
"mapped",
[
8706
]
],
[
[
120598,
120598
],
"mapped",
[
949
]
],
[
[
120599,
120599
],
"mapped",
[
952
]
],
[
[
120600,
120600
],
"mapped",
[
954
]
],
[
[
120601,
120601
],
"mapped",
[
966
]
],
[
[
120602,
120602
],
"mapped",
[
961
]
],
[
[
120603,
120603
],
"mapped",
[
960
]
],
[
[
120604,
120604
],
"mapped",
[
945
]
],
[
[
120605,
120605
],
"mapped",
[
946
]
],
[
[
120606,
120606
],
"mapped",
[
947
]
],
[
[
120607,
120607
],
"mapped",
[
948
]
],
[
[
120608,
120608
],
"mapped",
[
949
]
],
[
[
120609,
120609
],
"mapped",
[
950
]
],
[
[
120610,
120610
],
"mapped",
[
951
]
],
[
[
120611,
120611
],
"mapped",
[
952
]
],
[
[
120612,
120612
],
"mapped",
[
953
]
],
[
[
120613,
120613
],
"mapped",
[
954
]
],
[
[
120614,
120614
],
"mapped",
[
955
]
],
[
[
120615,
120615
],
"mapped",
[
956
]
],
[
[
120616,
120616
],
"mapped",
[
957
]
],
[
[
120617,
120617
],
"mapped",
[
958
]
],
[
[
120618,
120618
],
"mapped",
[
959
]
],
[
[
120619,
120619
],
"mapped",
[
960
]
],
[
[
120620,
120620
],
"mapped",
[
961
]
],
[
[
120621,
120621
],
"mapped",
[
952
]
],
[
[
120622,
120622
],
"mapped",
[
963
]
],
[
[
120623,
120623
],
"mapped",
[
964
]
],
[
[
120624,
120624
],
"mapped",
[
965
]
],
[
[
120625,
120625
],
"mapped",
[
966
]
],
[
[
120626,
120626
],
"mapped",
[
967
]
],
[
[
120627,
120627
],
"mapped",
[
968
]
],
[
[
120628,
120628
],
"mapped",
[
969
]
],
[
[
120629,
120629
],
"mapped",
[
8711
]
],
[
[
120630,
120630
],
"mapped",
[
945
]
],
[
[
120631,
120631
],
"mapped",
[
946
]
],
[
[
120632,
120632
],
"mapped",
[
947
]
],
[
[
120633,
120633
],
"mapped",
[
948
]
],
[
[
120634,
120634
],
"mapped",
[
949
]
],
[
[
120635,
120635
],
"mapped",
[
950
]
],
[
[
120636,
120636
],
"mapped",
[
951
]
],
[
[
120637,
120637
],
"mapped",
[
952
]
],
[
[
120638,
120638
],
"mapped",
[
953
]
],
[
[
120639,
120639
],
"mapped",
[
954
]
],
[
[
120640,
120640
],
"mapped",
[
955
]
],
[
[
120641,
120641
],
"mapped",
[
956
]
],
[
[
120642,
120642
],
"mapped",
[
957
]
],
[
[
120643,
120643
],
"mapped",
[
958
]
],
[
[
120644,
120644
],
"mapped",
[
959
]
],
[
[
120645,
120645
],
"mapped",
[
960
]
],
[
[
120646,
120646
],
"mapped",
[
961
]
],
[
[
120647,
120648
],
"mapped",
[
963
]
],
[
[
120649,
120649
],
"mapped",
[
964
]
],
[
[
120650,
120650
],
"mapped",
[
965
]
],
[
[
120651,
120651
],
"mapped",
[
966
]
],
[
[
120652,
120652
],
"mapped",
[
967
]
],
[
[
120653,
120653
],
"mapped",
[
968
]
],
[
[
120654,
120654
],
"mapped",
[
969
]
],
[
[
120655,
120655
],
"mapped",
[
8706
]
],
[
[
120656,
120656
],
"mapped",
[
949
]
],
[
[
120657,
120657
],
"mapped",
[
952
]
],
[
[
120658,
120658
],
"mapped",
[
954
]
],
[
[
120659,
120659
],
"mapped",
[
966
]
],
[
[
120660,
120660
],
"mapped",
[
961
]
],
[
[
120661,
120661
],
"mapped",
[
960
]
],
[
[
120662,
120662
],
"mapped",
[
945
]
],
[
[
120663,
120663
],
"mapped",
[
946
]
],
[
[
120664,
120664
],
"mapped",
[
947
]
],
[
[
120665,
120665
],
"mapped",
[
948
]
],
[
[
120666,
120666
],
"mapped",
[
949
]
],
[
[
120667,
120667
],
"mapped",
[
950
]
],
[
[
120668,
120668
],
"mapped",
[
951
]
],
[
[
120669,
120669
],
"mapped",
[
952
]
],
[
[
120670,
120670
],
"mapped",
[
953
]
],
[
[
120671,
120671
],
"mapped",
[
954
]
],
[
[
120672,
120672
],
"mapped",
[
955
]
],
[
[
120673,
120673
],
"mapped",
[
956
]
],
[
[
120674,
120674
],
"mapped",
[
957
]
],
[
[
120675,
120675
],
"mapped",
[
958
]
],
[
[
120676,
120676
],
"mapped",
[
959
]
],
[
[
120677,
120677
],
"mapped",
[
960
]
],
[
[
120678,
120678
],
"mapped",
[
961
]
],
[
[
120679,
120679
],
"mapped",
[
952
]
],
[
[
120680,
120680
],
"mapped",
[
963
]
],
[
[
120681,
120681
],
"mapped",
[
964
]
],
[
[
120682,
120682
],
"mapped",
[
965
]
],
[
[
120683,
120683
],
"mapped",
[
966
]
],
[
[
120684,
120684
],
"mapped",
[
967
]
],
[
[
120685,
120685
],
"mapped",
[
968
]
],
[
[
120686,
120686
],
"mapped",
[
969
]
],
[
[
120687,
120687
],
"mapped",
[
8711
]
],
[
[
120688,
120688
],
"mapped",
[
945
]
],
[
[
120689,
120689
],
"mapped",
[
946
]
],
[
[
120690,
120690
],
"mapped",
[
947
]
],
[
[
120691,
120691
],
"mapped",
[
948
]
],
[
[
120692,
120692
],
"mapped",
[
949
]
],
[
[
120693,
120693
],
"mapped",
[
950
]
],
[
[
120694,
120694
],
"mapped",
[
951
]
],
[
[
120695,
120695
],
"mapped",
[
952
]
],
[
[
120696,
120696
],
"mapped",
[
953
]
],
[
[
120697,
120697
],
"mapped",
[
954
]
],
[
[
120698,
120698
],
"mapped",
[
955
]
],
[
[
120699,
120699
],
"mapped",
[
956
]
],
[
[
120700,
120700
],
"mapped",
[
957
]
],
[
[
120701,
120701
],
"mapped",
[
958
]
],
[
[
120702,
120702
],
"mapped",
[
959
]
],
[
[
120703,
120703
],
"mapped",
[
960
]
],
[
[
120704,
120704
],
"mapped",
[
961
]
],
[
[
120705,
120706
],
"mapped",
[
963
]
],
[
[
120707,
120707
],
"mapped",
[
964
]
],
[
[
120708,
120708
],
"mapped",
[
965
]
],
[
[
120709,
120709
],
"mapped",
[
966
]
],
[
[
120710,
120710
],
"mapped",
[
967
]
],
[
[
120711,
120711
],
"mapped",
[
968
]
],
[
[
120712,
120712
],
"mapped",
[
969
]
],
[
[
120713,
120713
],
"mapped",
[
8706
]
],
[
[
120714,
120714
],
"mapped",
[
949
]
],
[
[
120715,
120715
],
"mapped",
[
952
]
],
[
[
120716,
120716
],
"mapped",
[
954
]
],
[
[
120717,
120717
],
"mapped",
[
966
]
],
[
[
120718,
120718
],
"mapped",
[
961
]
],
[
[
120719,
120719
],
"mapped",
[
960
]
],
[
[
120720,
120720
],
"mapped",
[
945
]
],
[
[
120721,
120721
],
"mapped",
[
946
]
],
[
[
120722,
120722
],
"mapped",
[
947
]
],
[
[
120723,
120723
],
"mapped",
[
948
]
],
[
[
120724,
120724
],
"mapped",
[
949
]
],
[
[
120725,
120725
],
"mapped",
[
950
]
],
[
[
120726,
120726
],
"mapped",
[
951
]
],
[
[
120727,
120727
],
"mapped",
[
952
]
],
[
[
120728,
120728
],
"mapped",
[
953
]
],
[
[
120729,
120729
],
"mapped",
[
954
]
],
[
[
120730,
120730
],
"mapped",
[
955
]
],
[
[
120731,
120731
],
"mapped",
[
956
]
],
[
[
120732,
120732
],
"mapped",
[
957
]
],
[
[
120733,
120733
],
"mapped",
[
958
]
],
[
[
120734,
120734
],
"mapped",
[
959
]
],
[
[
120735,
120735
],
"mapped",
[
960
]
],
[
[
120736,
120736
],
"mapped",
[
961
]
],
[
[
120737,
120737
],
"mapped",
[
952
]
],
[
[
120738,
120738
],
"mapped",
[
963
]
],
[
[
120739,
120739
],
"mapped",
[
964
]
],
[
[
120740,
120740
],
"mapped",
[
965
]
],
[
[
120741,
120741
],
"mapped",
[
966
]
],
[
[
120742,
120742
],
"mapped",
[
967
]
],
[
[
120743,
120743
],
"mapped",
[
968
]
],
[
[
120744,
120744
],
"mapped",
[
969
]
],
[
[
120745,
120745
],
"mapped",
[
8711
]
],
[
[
120746,
120746
],
"mapped",
[
945
]
],
[
[
120747,
120747
],
"mapped",
[
946
]
],
[
[
120748,
120748
],
"mapped",
[
947
]
],
[
[
120749,
120749
],
"mapped",
[
948
]
],
[
[
120750,
120750
],
"mapped",
[
949
]
],
[
[
120751,
120751
],
"mapped",
[
950
]
],
[
[
120752,
120752
],
"mapped",
[
951
]
],
[
[
120753,
120753
],
"mapped",
[
952
]
],
[
[
120754,
120754
],
"mapped",
[
953
]
],
[
[
120755,
120755
],
"mapped",
[
954
]
],
[
[
120756,
120756
],
"mapped",
[
955
]
],
[
[
120757,
120757
],
"mapped",
[
956
]
],
[
[
120758,
120758
],
"mapped",
[
957
]
],
[
[
120759,
120759
],
"mapped",
[
958
]
],
[
[
120760,
120760
],
"mapped",
[
959
]
],
[
[
120761,
120761
],
"mapped",
[
960
]
],
[
[
120762,
120762
],
"mapped",
[
961
]
],
[
[
120763,
120764
],
"mapped",
[
963
]
],
[
[
120765,
120765
],
"mapped",
[
964
]
],
[
[
120766,
120766
],
"mapped",
[
965
]
],
[
[
120767,
120767
],
"mapped",
[
966
]
],
[
[
120768,
120768
],
"mapped",
[
967
]
],
[
[
120769,
120769
],
"mapped",
[
968
]
],
[
[
120770,
120770
],
"mapped",
[
969
]
],
[
[
120771,
120771
],
"mapped",
[
8706
]
],
[
[
120772,
120772
],
"mapped",
[
949
]
],
[
[
120773,
120773
],
"mapped",
[
952
]
],
[
[
120774,
120774
],
"mapped",
[
954
]
],
[
[
120775,
120775
],
"mapped",
[
966
]
],
[
[
120776,
120776
],
"mapped",
[
961
]
],
[
[
120777,
120777
],
"mapped",
[
960
]
],
[
[
120778,
120779
],
"mapped",
[
989
]
],
[
[
120780,
120781
],
"disallowed"
],
[
[
120782,
120782
],
"mapped",
[
48
]
],
[
[
120783,
120783
],
"mapped",
[
49
]
],
[
[
120784,
120784
],
"mapped",
[
50
]
],
[
[
120785,
120785
],
"mapped",
[
51
]
],
[
[
120786,
120786
],
"mapped",
[
52
]
],
[
[
120787,
120787
],
"mapped",
[
53
]
],
[
[
120788,
120788
],
"mapped",
[
54
]
],
[
[
120789,
120789
],
"mapped",
[
55
]
],
[
[
120790,
120790
],
"mapped",
[
56
]
],
[
[
120791,
120791
],
"mapped",
[
57
]
],
[
[
120792,
120792
],
"mapped",
[
48
]
],
[
[
120793,
120793
],
"mapped",
[
49
]
],
[
[
120794,
120794
],
"mapped",
[
50
]
],
[
[
120795,
120795
],
"mapped",
[
51
]
],
[
[
120796,
120796
],
"mapped",
[
52
]
],
[
[
120797,
120797
],
"mapped",
[
53
]
],
[
[
120798,
120798
],
"mapped",
[
54
]
],
[
[
120799,
120799
],
"mapped",
[
55
]
],
[
[
120800,
120800
],
"mapped",
[
56
]
],
[
[
120801,
120801
],
"mapped",
[
57
]
],
[
[
120802,
120802
],
"mapped",
[
48
]
],
[
[
120803,
120803
],
"mapped",
[
49
]
],
[
[
120804,
120804
],
"mapped",
[
50
]
],
[
[
120805,
120805
],
"mapped",
[
51
]
],
[
[
120806,
120806
],
"mapped",
[
52
]
],
[
[
120807,
120807
],
"mapped",
[
53
]
],
[
[
120808,
120808
],
"mapped",
[
54
]
],
[
[
120809,
120809
],
"mapped",
[
55
]
],
[
[
120810,
120810
],
"mapped",
[
56
]
],
[
[
120811,
120811
],
"mapped",
[
57
]
],
[
[
120812,
120812
],
"mapped",
[
48
]
],
[
[
120813,
120813
],
"mapped",
[
49
]
],
[
[
120814,
120814
],
"mapped",
[
50
]
],
[
[
120815,
120815
],
"mapped",
[
51
]
],
[
[
120816,
120816
],
"mapped",
[
52
]
],
[
[
120817,
120817
],
"mapped",
[
53
]
],
[
[
120818,
120818
],
"mapped",
[
54
]
],
[
[
120819,
120819
],
"mapped",
[
55
]
],
[
[
120820,
120820
],
"mapped",
[
56
]
],
[
[
120821,
120821
],
"mapped",
[
57
]
],
[
[
120822,
120822
],
"mapped",
[
48
]
],
[
[
120823,
120823
],
"mapped",
[
49
]
],
[
[
120824,
120824
],
"mapped",
[
50
]
],
[
[
120825,
120825
],
"mapped",
[
51
]
],
[
[
120826,
120826
],
"mapped",
[
52
]
],
[
[
120827,
120827
],
"mapped",
[
53
]
],
[
[
120828,
120828
],
"mapped",
[
54
]
],
[
[
120829,
120829
],
"mapped",
[
55
]
],
[
[
120830,
120830
],
"mapped",
[
56
]
],
[
[
120831,
120831
],
"mapped",
[
57
]
],
[
[
120832,
121343
],
"valid",
[
],
"NV8"
],
[
[
121344,
121398
],
"valid"
],
[
[
121399,
121402
],
"valid",
[
],
"NV8"
],
[
[
121403,
121452
],
"valid"
],
[
[
121453,
121460
],
"valid",
[
],
"NV8"
],
[
[
121461,
121461
],
"valid"
],
[
[
121462,
121475
],
"valid",
[
],
"NV8"
],
[
[
121476,
121476
],
"valid"
],
[
[
121477,
121483
],
"valid",
[
],
"NV8"
],
[
[
121484,
121498
],
"disallowed"
],
[
[
121499,
121503
],
"valid"
],
[
[
121504,
121504
],
"disallowed"
],
[
[
121505,
121519
],
"valid"
],
[
[
121520,
124927
],
"disallowed"
],
[
[
124928,
125124
],
"valid"
],
[
[
125125,
125126
],
"disallowed"
],
[
[
125127,
125135
],
"valid",
[
],
"NV8"
],
[
[
125136,
125142
],
"valid"
],
[
[
125143,
126463
],
"disallowed"
],
[
[
126464,
126464
],
"mapped",
[
1575
]
],
[
[
126465,
126465
],
"mapped",
[
1576
]
],
[
[
126466,
126466
],
"mapped",
[
1580
]
],
[
[
126467,
126467
],
"mapped",
[
1583
]
],
[
[
126468,
126468
],
"disallowed"
],
[
[
126469,
126469
],
"mapped",
[
1608
]
],
[
[
126470,
126470
],
"mapped",
[
1586
]
],
[
[
126471,
126471
],
"mapped",
[
1581
]
],
[
[
126472,
126472
],
"mapped",
[
1591
]
],
[
[
126473,
126473
],
"mapped",
[
1610
]
],
[
[
126474,
126474
],
"mapped",
[
1603
]
],
[
[
126475,
126475
],
"mapped",
[
1604
]
],
[
[
126476,
126476
],
"mapped",
[
1605
]
],
[
[
126477,
126477
],
"mapped",
[
1606
]
],
[
[
126478,
126478
],
"mapped",
[
1587
]
],
[
[
126479,
126479
],
"mapped",
[
1593
]
],
[
[
126480,
126480
],
"mapped",
[
1601
]
],
[
[
126481,
126481
],
"mapped",
[
1589
]
],
[
[
126482,
126482
],
"mapped",
[
1602
]
],
[
[
126483,
126483
],
"mapped",
[
1585
]
],
[
[
126484,
126484
],
"mapped",
[
1588
]
],
[
[
126485,
126485
],
"mapped",
[
1578
]
],
[
[
126486,
126486
],
"mapped",
[
1579
]
],
[
[
126487,
126487
],
"mapped",
[
1582
]
],
[
[
126488,
126488
],
"mapped",
[
1584
]
],
[
[
126489,
126489
],
"mapped",
[
1590
]
],
[
[
126490,
126490
],
"mapped",
[
1592
]
],
[
[
126491,
126491
],
"mapped",
[
1594
]
],
[
[
126492,
126492
],
"mapped",
[
1646
]
],
[
[
126493,
126493
],
"mapped",
[
1722
]
],
[
[
126494,
126494
],
"mapped",
[
1697
]
],
[
[
126495,
126495
],
"mapped",
[
1647
]
],
[
[
126496,
126496
],
"disallowed"
],
[
[
126497,
126497
],
"mapped",
[
1576
]
],
[
[
126498,
126498
],
"mapped",
[
1580
]
],
[
[
126499,
126499
],
"disallowed"
],
[
[
126500,
126500
],
"mapped",
[
1607
]
],
[
[
126501,
126502
],
"disallowed"
],
[
[
126503,
126503
],
"mapped",
[
1581
]
],
[
[
126504,
126504
],
"disallowed"
],
[
[
126505,
126505
],
"mapped",
[
1610
]
],
[
[
126506,
126506
],
"mapped",
[
1603
]
],
[
[
126507,
126507
],
"mapped",
[
1604
]
],
[
[
126508,
126508
],
"mapped",
[
1605
]
],
[
[
126509,
126509
],
"mapped",
[
1606
]
],
[
[
126510,
126510
],
"mapped",
[
1587
]
],
[
[
126511,
126511
],
"mapped",
[
1593
]
],
[
[
126512,
126512
],
"mapped",
[
1601
]
],
[
[
126513,
126513
],
"mapped",
[
1589
]
],
[
[
126514,
126514
],
"mapped",
[
1602
]
],
[
[
126515,
126515
],
"disallowed"
],
[
[
126516,
126516
],
"mapped",
[
1588
]
],
[
[
126517,
126517
],
"mapped",
[
1578
]
],
[
[
126518,
126518
],
"mapped",
[
1579
]
],
[
[
126519,
126519
],
"mapped",
[
1582
]
],
[
[
126520,
126520
],
"disallowed"
],
[
[
126521,
126521
],
"mapped",
[
1590
]
],
[
[
126522,
126522
],
"disallowed"
],
[
[
126523,
126523
],
"mapped",
[
1594
]
],
[
[
126524,
126529
],
"disallowed"
],
[
[
126530,
126530
],
"mapped",
[
1580
]
],
[
[
126531,
126534
],
"disallowed"
],
[
[
126535,
126535
],
"mapped",
[
1581
]
],
[
[
126536,
126536
],
"disallowed"
],
[
[
126537,
126537
],
"mapped",
[
1610
]
],
[
[
126538,
126538
],
"disallowed"
],
[
[
126539,
126539
],
"mapped",
[
1604
]
],
[
[
126540,
126540
],
"disallowed"
],
[
[
126541,
126541
],
"mapped",
[
1606
]
],
[
[
126542,
126542
],
"mapped",
[
1587
]
],
[
[
126543,
126543
],
"mapped",
[
1593
]
],
[
[
126544,
126544
],
"disallowed"
],
[
[
126545,
126545
],
"mapped",
[
1589
]
],
[
[
126546,
126546
],
"mapped",
[
1602
]
],
[
[
126547,
126547
],
"disallowed"
],
[
[
126548,
126548
],
"mapped",
[
1588
]
],
[
[
126549,
126550
],
"disallowed"
],
[
[
126551,
126551
],
"mapped",
[
1582
]
],
[
[
126552,
126552
],
"disallowed"
],
[
[
126553,
126553
],
"mapped",
[
1590
]
],
[
[
126554,
126554
],
"disallowed"
],
[
[
126555,
126555
],
"mapped",
[
1594
]
],
[
[
126556,
126556
],
"disallowed"
],
[
[
126557,
126557
],
"mapped",
[
1722
]
],
[
[
126558,
126558
],
"disallowed"
],
[
[
126559,
126559
],
"mapped",
[
1647
]
],
[
[
126560,
126560
],
"disallowed"
],
[
[
126561,
126561
],
"mapped",
[
1576
]
],
[
[
126562,
126562
],
"mapped",
[
1580
]
],
[
[
126563,
126563
],
"disallowed"
],
[
[
126564,
126564
],
"mapped",
[
1607
]
],
[
[
126565,
126566
],
"disallowed"
],
[
[
126567,
126567
],
"mapped",
[
1581
]
],
[
[
126568,
126568
],
"mapped",
[
1591
]
],
[
[
126569,
126569
],
"mapped",
[
1610
]
],
[
[
126570,
126570
],
"mapped",
[
1603
]
],
[
[
126571,
126571
],
"disallowed"
],
[
[
126572,
126572
],
"mapped",
[
1605
]
],
[
[
126573,
126573
],
"mapped",
[
1606
]
],
[
[
126574,
126574
],
"mapped",
[
1587
]
],
[
[
126575,
126575
],
"mapped",
[
1593
]
],
[
[
126576,
126576
],
"mapped",
[
1601
]
],
[
[
126577,
126577
],
"mapped",
[
1589
]
],
[
[
126578,
126578
],
"mapped",
[
1602
]
],
[
[
126579,
126579
],
"disallowed"
],
[
[
126580,
126580
],
"mapped",
[
1588
]
],
[
[
126581,
126581
],
"mapped",
[
1578
]
],
[
[
126582,
126582
],
"mapped",
[
1579
]
],
[
[
126583,
126583
],
"mapped",
[
1582
]
],
[
[
126584,
126584
],
"disallowed"
],
[
[
126585,
126585
],
"mapped",
[
1590
]
],
[
[
126586,
126586
],
"mapped",
[
1592
]
],
[
[
126587,
126587
],
"mapped",
[
1594
]
],
[
[
126588,
126588
],
"mapped",
[
1646
]
],
[
[
126589,
126589
],
"disallowed"
],
[
[
126590,
126590
],
"mapped",
[
1697
]
],
[
[
126591,
126591
],
"disallowed"
],
[
[
126592,
126592
],
"mapped",
[
1575
]
],
[
[
126593,
126593
],
"mapped",
[
1576
]
],
[
[
126594,
126594
],
"mapped",
[
1580
]
],
[
[
126595,
126595
],
"mapped",
[
1583
]
],
[
[
126596,
126596
],
"mapped",
[
1607
]
],
[
[
126597,
126597
],
"mapped",
[
1608
]
],
[
[
126598,
126598
],
"mapped",
[
1586
]
],
[
[
126599,
126599
],
"mapped",
[
1581
]
],
[
[
126600,
126600
],
"mapped",
[
1591
]
],
[
[
126601,
126601
],
"mapped",
[
1610
]
],
[
[
126602,
126602
],
"disallowed"
],
[
[
126603,
126603
],
"mapped",
[
1604
]
],
[
[
126604,
126604
],
"mapped",
[
1605
]
],
[
[
126605,
126605
],
"mapped",
[
1606
]
],
[
[
126606,
126606
],
"mapped",
[
1587
]
],
[
[
126607,
126607
],
"mapped",
[
1593
]
],
[
[
126608,
126608
],
"mapped",
[
1601
]
],
[
[
126609,
126609
],
"mapped",
[
1589
]
],
[
[
126610,
126610
],
"mapped",
[
1602
]
],
[
[
126611,
126611
],
"mapped",
[
1585
]
],
[
[
126612,
126612
],
"mapped",
[
1588
]
],
[
[
126613,
126613
],
"mapped",
[
1578
]
],
[
[
126614,
126614
],
"mapped",
[
1579
]
],
[
[
126615,
126615
],
"mapped",
[
1582
]
],
[
[
126616,
126616
],
"mapped",
[
1584
]
],
[
[
126617,
126617
],
"mapped",
[
1590
]
],
[
[
126618,
126618
],
"mapped",
[
1592
]
],
[
[
126619,
126619
],
"mapped",
[
1594
]
],
[
[
126620,
126624
],
"disallowed"
],
[
[
126625,
126625
],
"mapped",
[
1576
]
],
[
[
126626,
126626
],
"mapped",
[
1580
]
],
[
[
126627,
126627
],
"mapped",
[
1583
]
],
[
[
126628,
126628
],
"disallowed"
],
[
[
126629,
126629
],
"mapped",
[
1608
]
],
[
[
126630,
126630
],
"mapped",
[
1586
]
],
[
[
126631,
126631
],
"mapped",
[
1581
]
],
[
[
126632,
126632
],
"mapped",
[
1591
]
],
[
[
126633,
126633
],
"mapped",
[
1610
]
],
[
[
126634,
126634
],
"disallowed"
],
[
[
126635,
126635
],
"mapped",
[
1604
]
],
[
[
126636,
126636
],
"mapped",
[
1605
]
],
[
[
126637,
126637
],
"mapped",
[
1606
]
],
[
[
126638,
126638
],
"mapped",
[
1587
]
],
[
[
126639,
126639
],
"mapped",
[
1593
]
],
[
[
126640,
126640
],
"mapped",
[
1601
]
],
[
[
126641,
126641
],
"mapped",
[
1589
]
],
[
[
126642,
126642
],
"mapped",
[
1602
]
],
[
[
126643,
126643
],
"mapped",
[
1585
]
],
[
[
126644,
126644
],
"mapped",
[
1588
]
],
[
[
126645,
126645
],
"mapped",
[
1578
]
],
[
[
126646,
126646
],
"mapped",
[
1579
]
],
[
[
126647,
126647
],
"mapped",
[
1582
]
],
[
[
126648,
126648
],
"mapped",
[
1584
]
],
[
[
126649,
126649
],
"mapped",
[
1590
]
],
[
[
126650,
126650
],
"mapped",
[
1592
]
],
[
[
126651,
126651
],
"mapped",
[
1594
]
],
[
[
126652,
126703
],
"disallowed"
],
[
[
126704,
126705
],
"valid",
[
],
"NV8"
],
[
[
126706,
126975
],
"disallowed"
],
[
[
126976,
127019
],
"valid",
[
],
"NV8"
],
[
[
127020,
127023
],
"disallowed"
],
[
[
127024,
127123
],
"valid",
[
],
"NV8"
],
[
[
127124,
127135
],
"disallowed"
],
[
[
127136,
127150
],
"valid",
[
],
"NV8"
],
[
[
127151,
127152
],
"disallowed"
],
[
[
127153,
127166
],
"valid",
[
],
"NV8"
],
[
[
127167,
127167
],
"valid",
[
],
"NV8"
],
[
[
127168,
127168
],
"disallowed"
],
[
[
127169,
127183
],
"valid",
[
],
"NV8"
],
[
[
127184,
127184
],
"disallowed"
],
[
[
127185,
127199
],
"valid",
[
],
"NV8"
],
[
[
127200,
127221
],
"valid",
[
],
"NV8"
],
[
[
127222,
127231
],
"disallowed"
],
[
[
127232,
127232
],
"disallowed"
],
[
[
127233,
127233
],
"disallowed_STD3_mapped",
[
48,
44
]
],
[
[
127234,
127234
],
"disallowed_STD3_mapped",
[
49,
44
]
],
[
[
127235,
127235
],
"disallowed_STD3_mapped",
[
50,
44
]
],
[
[
127236,
127236
],
"disallowed_STD3_mapped",
[
51,
44
]
],
[
[
127237,
127237
],
"disallowed_STD3_mapped",
[
52,
44
]
],
[
[
127238,
127238
],
"disallowed_STD3_mapped",
[
53,
44
]
],
[
[
127239,
127239
],
"disallowed_STD3_mapped",
[
54,
44
]
],
[
[
127240,
127240
],
"disallowed_STD3_mapped",
[
55,
44
]
],
[
[
127241,
127241
],
"disallowed_STD3_mapped",
[
56,
44
]
],
[
[
127242,
127242
],
"disallowed_STD3_mapped",
[
57,
44
]
],
[
[
127243,
127244
],
"valid",
[
],
"NV8"
],
[
[
127245,
127247
],
"disallowed"
],
[
[
127248,
127248
],
"disallowed_STD3_mapped",
[
40,
97,
41
]
],
[
[
127249,
127249
],
"disallowed_STD3_mapped",
[
40,
98,
41
]
],
[
[
127250,
127250
],
"disallowed_STD3_mapped",
[
40,
99,
41
]
],
[
[
127251,
127251
],
"disallowed_STD3_mapped",
[
40,
100,
41
]
],
[
[
127252,
127252
],
"disallowed_STD3_mapped",
[
40,
101,
41
]
],
[
[
127253,
127253
],
"disallowed_STD3_mapped",
[
40,
102,
41
]
],
[
[
127254,
127254
],
"disallowed_STD3_mapped",
[
40,
103,
41
]
],
[
[
127255,
127255
],
"disallowed_STD3_mapped",
[
40,
104,
41
]
],
[
[
127256,
127256
],
"disallowed_STD3_mapped",
[
40,
105,
41
]
],
[
[
127257,
127257
],
"disallowed_STD3_mapped",
[
40,
106,
41
]
],
[
[
127258,
127258
],
"disallowed_STD3_mapped",
[
40,
107,
41
]
],
[
[
127259,
127259
],
"disallowed_STD3_mapped",
[
40,
108,
41
]
],
[
[
127260,
127260
],
"disallowed_STD3_mapped",
[
40,
109,
41
]
],
[
[
127261,
127261
],
"disallowed_STD3_mapped",
[
40,
110,
41
]
],
[
[
127262,
127262
],
"disallowed_STD3_mapped",
[
40,
111,
41
]
],
[
[
127263,
127263
],
"disallowed_STD3_mapped",
[
40,
112,
41
]
],
[
[
127264,
127264
],
"disallowed_STD3_mapped",
[
40,
113,
41
]
],
[
[
127265,
127265
],
"disallowed_STD3_mapped",
[
40,
114,
41
]
],
[
[
127266,
127266
],
"disallowed_STD3_mapped",
[
40,
115,
41
]
],
[
[
127267,
127267
],
"disallowed_STD3_mapped",
[
40,
116,
41
]
],
[
[
127268,
127268
],
"disallowed_STD3_mapped",
[
40,
117,
41
]
],
[
[
127269,
127269
],
"disallowed_STD3_mapped",
[
40,
118,
41
]
],
[
[
127270,
127270
],
"disallowed_STD3_mapped",
[
40,
119,
41
]
],
[
[
127271,
127271
],
"disallowed_STD3_mapped",
[
40,
120,
41
]
],
[
[
127272,
127272
],
"disallowed_STD3_mapped",
[
40,
121,
41
]
],
[
[
127273,
127273
],
"disallowed_STD3_mapped",
[
40,
122,
41
]
],
[
[
127274,
127274
],
"mapped",
[
12308,
115,
12309
]
],
[
[
127275,
127275
],
"mapped",
[
99
]
],
[
[
127276,
127276
],
"mapped",
[
114
]
],
[
[
127277,
127277
],
"mapped",
[
99,
100
]
],
[
[
127278,
127278
],
"mapped",
[
119,
122
]
],
[
[
127279,
127279
],
"disallowed"
],
[
[
127280,
127280
],
"mapped",
[
97
]
],
[
[
127281,
127281
],
"mapped",
[
98
]
],
[
[
127282,
127282
],
"mapped",
[
99
]
],
[
[
127283,
127283
],
"mapped",
[
100
]
],
[
[
127284,
127284
],
"mapped",
[
101
]
],
[
[
127285,
127285
],
"mapped",
[
102
]
],
[
[
127286,
127286
],
"mapped",
[
103
]
],
[
[
127287,
127287
],
"mapped",
[
104
]
],
[
[
127288,
127288
],
"mapped",
[
105
]
],
[
[
127289,
127289
],
"mapped",
[
106
]
],
[
[
127290,
127290
],
"mapped",
[
107
]
],
[
[
127291,
127291
],
"mapped",
[
108
]
],
[
[
127292,
127292
],
"mapped",
[
109
]
],
[
[
127293,
127293
],
"mapped",
[
110
]
],
[
[
127294,
127294
],
"mapped",
[
111
]
],
[
[
127295,
127295
],
"mapped",
[
112
]
],
[
[
127296,
127296
],
"mapped",
[
113
]
],
[
[
127297,
127297
],
"mapped",
[
114
]
],
[
[
127298,
127298
],
"mapped",
[
115
]
],
[
[
127299,
127299
],
"mapped",
[
116
]
],
[
[
127300,
127300
],
"mapped",
[
117
]
],
[
[
127301,
127301
],
"mapped",
[
118
]
],
[
[
127302,
127302
],
"mapped",
[
119
]
],
[
[
127303,
127303
],
"mapped",
[
120
]
],
[
[
127304,
127304
],
"mapped",
[
121
]
],
[
[
127305,
127305
],
"mapped",
[
122
]
],
[
[
127306,
127306
],
"mapped",
[
104,
118
]
],
[
[
127307,
127307
],
"mapped",
[
109,
118
]
],
[
[
127308,
127308
],
"mapped",
[
115,
100
]
],
[
[
127309,
127309
],
"mapped",
[
115,
115
]
],
[
[
127310,
127310
],
"mapped",
[
112,
112,
118
]
],
[
[
127311,
127311
],
"mapped",
[
119,
99
]
],
[
[
127312,
127318
],
"valid",
[
],
"NV8"
],
[
[
127319,
127319
],
"valid",
[
],
"NV8"
],
[
[
127320,
127326
],
"valid",
[
],
"NV8"
],
[
[
127327,
127327
],
"valid",
[
],
"NV8"
],
[
[
127328,
127337
],
"valid",
[
],
"NV8"
],
[
[
127338,
127338
],
"mapped",
[
109,
99
]
],
[
[
127339,
127339
],
"mapped",
[
109,
100
]
],
[
[
127340,
127343
],
"disallowed"
],
[
[
127344,
127352
],
"valid",
[
],
"NV8"
],
[
[
127353,
127353
],
"valid",
[
],
"NV8"
],
[
[
127354,
127354
],
"valid",
[
],
"NV8"
],
[
[
127355,
127356
],
"valid",
[
],
"NV8"
],
[
[
127357,
127358
],
"valid",
[
],
"NV8"
],
[
[
127359,
127359
],
"valid",
[
],
"NV8"
],
[
[
127360,
127369
],
"valid",
[
],
"NV8"
],
[
[
127370,
127373
],
"valid",
[
],
"NV8"
],
[
[
127374,
127375
],
"valid",
[
],
"NV8"
],
[
[
127376,
127376
],
"mapped",
[
100,
106
]
],
[
[
127377,
127386
],
"valid",
[
],
"NV8"
],
[
[
127387,
127461
],
"disallowed"
],
[
[
127462,
127487
],
"valid",
[
],
"NV8"
],
[
[
127488,
127488
],
"mapped",
[
12411,
12363
]
],
[
[
127489,
127489
],
"mapped",
[
12467,
12467
]
],
[
[
127490,
127490
],
"mapped",
[
12469
]
],
[
[
127491,
127503
],
"disallowed"
],
[
[
127504,
127504
],
"mapped",
[
25163
]
],
[
[
127505,
127505
],
"mapped",
[
23383
]
],
[
[
127506,
127506
],
"mapped",
[
21452
]
],
[
[
127507,
127507
],
"mapped",
[
12487
]
],
[
[
127508,
127508
],
"mapped",
[
20108
]
],
[
[
127509,
127509
],
"mapped",
[
22810
]
],
[
[
127510,
127510
],
"mapped",
[
35299
]
],
[
[
127511,
127511
],
"mapped",
[
22825
]
],
[
[
127512,
127512
],
"mapped",
[
20132
]
],
[
[
127513,
127513
],
"mapped",
[
26144
]
],
[
[
127514,
127514
],
"mapped",
[
28961
]
],
[
[
127515,
127515
],
"mapped",
[
26009
]
],
[
[
127516,
127516
],
"mapped",
[
21069
]
],
[
[
127517,
127517
],
"mapped",
[
24460
]
],
[
[
127518,
127518
],
"mapped",
[
20877
]
],
[
[
127519,
127519
],
"mapped",
[
26032
]
],
[
[
127520,
127520
],
"mapped",
[
21021
]
],
[
[
127521,
127521
],
"mapped",
[
32066
]
],
[
[
127522,
127522
],
"mapped",
[
29983
]
],
[
[
127523,
127523
],
"mapped",
[
36009
]
],
[
[
127524,
127524
],
"mapped",
[
22768
]
],
[
[
127525,
127525
],
"mapped",
[
21561
]
],
[
[
127526,
127526
],
"mapped",
[
28436
]
],
[
[
127527,
127527
],
"mapped",
[
25237
]
],
[
[
127528,
127528
],
"mapped",
[
25429
]
],
[
[
127529,
127529
],
"mapped",
[
19968
]
],
[
[
127530,
127530
],
"mapped",
[
19977
]
],
[
[
127531,
127531
],
"mapped",
[
36938
]
],
[
[
127532,
127532
],
"mapped",
[
24038
]
],
[
[
127533,
127533
],
"mapped",
[
20013
]
],
[
[
127534,
127534
],
"mapped",
[
21491
]
],
[
[
127535,
127535
],
"mapped",
[
25351
]
],
[
[
127536,
127536
],
"mapped",
[
36208
]
],
[
[
127537,
127537
],
"mapped",
[
25171
]
],
[
[
127538,
127538
],
"mapped",
[
31105
]
],
[
[
127539,
127539
],
"mapped",
[
31354
]
],
[
[
127540,
127540
],
"mapped",
[
21512
]
],
[
[
127541,
127541
],
"mapped",
[
28288
]
],
[
[
127542,
127542
],
"mapped",
[
26377
]
],
[
[
127543,
127543
],
"mapped",
[
26376
]
],
[
[
127544,
127544
],
"mapped",
[
30003
]
],
[
[
127545,
127545
],
"mapped",
[
21106
]
],
[
[
127546,
127546
],
"mapped",
[
21942
]
],
[
[
127547,
127551
],
"disallowed"
],
[
[
127552,
127552
],
"mapped",
[
12308,
26412,
12309
]
],
[
[
127553,
127553
],
"mapped",
[
12308,
19977,
12309
]
],
[
[
127554,
127554
],
"mapped",
[
12308,
20108,
12309
]
],
[
[
127555,
127555
],
"mapped",
[
12308,
23433,
12309
]
],
[
[
127556,
127556
],
"mapped",
[
12308,
28857,
12309
]
],
[
[
127557,
127557
],
"mapped",
[
12308,
25171,
12309
]
],
[
[
127558,
127558
],
"mapped",
[
12308,
30423,
12309
]
],
[
[
127559,
127559
],
"mapped",
[
12308,
21213,
12309
]
],
[
[
127560,
127560
],
"mapped",
[
12308,
25943,
12309
]
],
[
[
127561,
127567
],
"disallowed"
],
[
[
127568,
127568
],
"mapped",
[
24471
]
],
[
[
127569,
127569
],
"mapped",
[
21487
]
],
[
[
127570,
127743
],
"disallowed"
],
[
[
127744,
127776
],
"valid",
[
],
"NV8"
],
[
[
127777,
127788
],
"valid",
[
],
"NV8"
],
[
[
127789,
127791
],
"valid",
[
],
"NV8"
],
[
[
127792,
127797
],
"valid",
[
],
"NV8"
],
[
[
127798,
127798
],
"valid",
[
],
"NV8"
],
[
[
127799,
127868
],
"valid",
[
],
"NV8"
],
[
[
127869,
127869
],
"valid",
[
],
"NV8"
],
[
[
127870,
127871
],
"valid",
[
],
"NV8"
],
[
[
127872,
127891
],
"valid",
[
],
"NV8"
],
[
[
127892,
127903
],
"valid",
[
],
"NV8"
],
[
[
127904,
127940
],
"valid",
[
],
"NV8"
],
[
[
127941,
127941
],
"valid",
[
],
"NV8"
],
[
[
127942,
127946
],
"valid",
[
],
"NV8"
],
[
[
127947,
127950
],
"valid",
[
],
"NV8"
],
[
[
127951,
127955
],
"valid",
[
],
"NV8"
],
[
[
127956,
127967
],
"valid",
[
],
"NV8"
],
[
[
127968,
127984
],
"valid",
[
],
"NV8"
],
[
[
127985,
127991
],
"valid",
[
],
"NV8"
],
[
[
127992,
127999
],
"valid",
[
],
"NV8"
],
[
[
128000,
128062
],
"valid",
[
],
"NV8"
],
[
[
128063,
128063
],
"valid",
[
],
"NV8"
],
[
[
128064,
128064
],
"valid",
[
],
"NV8"
],
[
[
128065,
128065
],
"valid",
[
],
"NV8"
],
[
[
128066,
128247
],
"valid",
[
],
"NV8"
],
[
[
128248,
128248
],
"valid",
[
],
"NV8"
],
[
[
128249,
128252
],
"valid",
[
],
"NV8"
],
[
[
128253,
128254
],
"valid",
[
],
"NV8"
],
[
[
128255,
128255
],
"valid",
[
],
"NV8"
],
[
[
128256,
128317
],
"valid",
[
],
"NV8"
],
[
[
128318,
128319
],
"valid",
[
],
"NV8"
],
[
[
128320,
128323
],
"valid",
[
],
"NV8"
],
[
[
128324,
128330
],
"valid",
[
],
"NV8"
],
[
[
128331,
128335
],
"valid",
[
],
"NV8"
],
[
[
128336,
128359
],
"valid",
[
],
"NV8"
],
[
[
128360,
128377
],
"valid",
[
],
"NV8"
],
[
[
128378,
128378
],
"disallowed"
],
[
[
128379,
128419
],
"valid",
[
],
"NV8"
],
[
[
128420,
128420
],
"disallowed"
],
[
[
128421,
128506
],
"valid",
[
],
"NV8"
],
[
[
128507,
128511
],
"valid",
[
],
"NV8"
],
[
[
128512,
128512
],
"valid",
[
],
"NV8"
],
[
[
128513,
128528
],
"valid",
[
],
"NV8"
],
[
[
128529,
128529
],
"valid",
[
],
"NV8"
],
[
[
128530,
128532
],
"valid",
[
],
"NV8"
],
[
[
128533,
128533
],
"valid",
[
],
"NV8"
],
[
[
128534,
128534
],
"valid",
[
],
"NV8"
],
[
[
128535,
128535
],
"valid",
[
],
"NV8"
],
[
[
128536,
128536
],
"valid",
[
],
"NV8"
],
[
[
128537,
128537
],
"valid",
[
],
"NV8"
],
[
[
128538,
128538
],
"valid",
[
],
"NV8"
],
[
[
128539,
128539
],
"valid",
[
],
"NV8"
],
[
[
128540,
128542
],
"valid",
[
],
"NV8"
],
[
[
128543,
128543
],
"valid",
[
],
"NV8"
],
[
[
128544,
128549
],
"valid",
[
],
"NV8"
],
[
[
128550,
128551
],
"valid",
[
],
"NV8"
],
[
[
128552,
128555
],
"valid",
[
],
"NV8"
],
[
[
128556,
128556
],
"valid",
[
],
"NV8"
],
[
[
128557,
128557
],
"valid",
[
],
"NV8"
],
[
[
128558,
128559
],
"valid",
[
],
"NV8"
],
[
[
128560,
128563
],
"valid",
[
],
"NV8"
],
[
[
128564,
128564
],
"valid",
[
],
"NV8"
],
[
[
128565,
128576
],
"valid",
[
],
"NV8"
],
[
[
128577,
128578
],
"valid",
[
],
"NV8"
],
[
[
128579,
128580
],
"valid",
[
],
"NV8"
],
[
[
128581,
128591
],
"valid",
[
],
"NV8"
],
[
[
128592,
128639
],
"valid",
[
],
"NV8"
],
[
[
128640,
128709
],
"valid",
[
],
"NV8"
],
[
[
128710,
128719
],
"valid",
[
],
"NV8"
],
[
[
128720,
128720
],
"valid",
[
],
"NV8"
],
[
[
128721,
128735
],
"disallowed"
],
[
[
128736,
128748
],
"valid",
[
],
"NV8"
],
[
[
128749,
128751
],
"disallowed"
],
[
[
128752,
128755
],
"valid",
[
],
"NV8"
],
[
[
128756,
128767
],
"disallowed"
],
[
[
128768,
128883
],
"valid",
[
],
"NV8"
],
[
[
128884,
128895
],
"disallowed"
],
[
[
128896,
128980
],
"valid",
[
],
"NV8"
],
[
[
128981,
129023
],
"disallowed"
],
[
[
129024,
129035
],
"valid",
[
],
"NV8"
],
[
[
129036,
129039
],
"disallowed"
],
[
[
129040,
129095
],
"valid",
[
],
"NV8"
],
[
[
129096,
129103
],
"disallowed"
],
[
[
129104,
129113
],
"valid",
[
],
"NV8"
],
[
[
129114,
129119
],
"disallowed"
],
[
[
129120,
129159
],
"valid",
[
],
"NV8"
],
[
[
129160,
129167
],
"disallowed"
],
[
[
129168,
129197
],
"valid",
[
],
"NV8"
],
[
[
129198,
129295
],
"disallowed"
],
[
[
129296,
129304
],
"valid",
[
],
"NV8"
],
[
[
129305,
129407
],
"disallowed"
],
[
[
129408,
129412
],
"valid",
[
],
"NV8"
],
[
[
129413,
129471
],
"disallowed"
],
[
[
129472,
129472
],
"valid",
[
],
"NV8"
],
[
[
129473,
131069
],
"disallowed"
],
[
[
131070,
131071
],
"disallowed"
],
[
[
131072,
173782
],
"valid"
],
[
[
173783,
173823
],
"disallowed"
],
[
[
173824,
177972
],
"valid"
],
[
[
177973,
177983
],
"disallowed"
],
[
[
177984,
178205
],
"valid"
],
[
[
178206,
178207
],
"disallowed"
],
[
[
178208,
183969
],
"valid"
],
[
[
183970,
194559
],
"disallowed"
],
[
[
194560,
194560
],
"mapped",
[
20029
]
],
[
[
194561,
194561
],
"mapped",
[
20024
]
],
[
[
194562,
194562
],
"mapped",
[
20033
]
],
[
[
194563,
194563
],
"mapped",
[
131362
]
],
[
[
194564,
194564
],
"mapped",
[
20320
]
],
[
[
194565,
194565
],
"mapped",
[
20398
]
],
[
[
194566,
194566
],
"mapped",
[
20411
]
],
[
[
194567,
194567
],
"mapped",
[
20482
]
],
[
[
194568,
194568
],
"mapped",
[
20602
]
],
[
[
194569,
194569
],
"mapped",
[
20633
]
],
[
[
194570,
194570
],
"mapped",
[
20711
]
],
[
[
194571,
194571
],
"mapped",
[
20687
]
],
[
[
194572,
194572
],
"mapped",
[
13470
]
],
[
[
194573,
194573
],
"mapped",
[
132666
]
],
[
[
194574,
194574
],
"mapped",
[
20813
]
],
[
[
194575,
194575
],
"mapped",
[
20820
]
],
[
[
194576,
194576
],
"mapped",
[
20836
]
],
[
[
194577,
194577
],
"mapped",
[
20855
]
],
[
[
194578,
194578
],
"mapped",
[
132380
]
],
[
[
194579,
194579
],
"mapped",
[
13497
]
],
[
[
194580,
194580
],
"mapped",
[
20839
]
],
[
[
194581,
194581
],
"mapped",
[
20877
]
],
[
[
194582,
194582
],
"mapped",
[
132427
]
],
[
[
194583,
194583
],
"mapped",
[
20887
]
],
[
[
194584,
194584
],
"mapped",
[
20900
]
],
[
[
194585,
194585
],
"mapped",
[
20172
]
],
[
[
194586,
194586
],
"mapped",
[
20908
]
],
[
[
194587,
194587
],
"mapped",
[
20917
]
],
[
[
194588,
194588
],
"mapped",
[
168415
]
],
[
[
194589,
194589
],
"mapped",
[
20981
]
],
[
[
194590,
194590
],
"mapped",
[
20995
]
],
[
[
194591,
194591
],
"mapped",
[
13535
]
],
[
[
194592,
194592
],
"mapped",
[
21051
]
],
[
[
194593,
194593
],
"mapped",
[
21062
]
],
[
[
194594,
194594
],
"mapped",
[
21106
]
],
[
[
194595,
194595
],
"mapped",
[
21111
]
],
[
[
194596,
194596
],
"mapped",
[
13589
]
],
[
[
194597,
194597
],
"mapped",
[
21191
]
],
[
[
194598,
194598
],
"mapped",
[
21193
]
],
[
[
194599,
194599
],
"mapped",
[
21220
]
],
[
[
194600,
194600
],
"mapped",
[
21242
]
],
[
[
194601,
194601
],
"mapped",
[
21253
]
],
[
[
194602,
194602
],
"mapped",
[
21254
]
],
[
[
194603,
194603
],
"mapped",
[
21271
]
],
[
[
194604,
194604
],
"mapped",
[
21321
]
],
[
[
194605,
194605
],
"mapped",
[
21329
]
],
[
[
194606,
194606
],
"mapped",
[
21338
]
],
[
[
194607,
194607
],
"mapped",
[
21363
]
],
[
[
194608,
194608
],
"mapped",
[
21373
]
],
[
[
194609,
194611
],
"mapped",
[
21375
]
],
[
[
194612,
194612
],
"mapped",
[
133676
]
],
[
[
194613,
194613
],
"mapped",
[
28784
]
],
[
[
194614,
194614
],
"mapped",
[
21450
]
],
[
[
194615,
194615
],
"mapped",
[
21471
]
],
[
[
194616,
194616
],
"mapped",
[
133987
]
],
[
[
194617,
194617
],
"mapped",
[
21483
]
],
[
[
194618,
194618
],
"mapped",
[
21489
]
],
[
[
194619,
194619
],
"mapped",
[
21510
]
],
[
[
194620,
194620
],
"mapped",
[
21662
]
],
[
[
194621,
194621
],
"mapped",
[
21560
]
],
[
[
194622,
194622
],
"mapped",
[
21576
]
],
[
[
194623,
194623
],
"mapped",
[
21608
]
],
[
[
194624,
194624
],
"mapped",
[
21666
]
],
[
[
194625,
194625
],
"mapped",
[
21750
]
],
[
[
194626,
194626
],
"mapped",
[
21776
]
],
[
[
194627,
194627
],
"mapped",
[
21843
]
],
[
[
194628,
194628
],
"mapped",
[
21859
]
],
[
[
194629,
194630
],
"mapped",
[
21892
]
],
[
[
194631,
194631
],
"mapped",
[
21913
]
],
[
[
194632,
194632
],
"mapped",
[
21931
]
],
[
[
194633,
194633
],
"mapped",
[
21939
]
],
[
[
194634,
194634
],
"mapped",
[
21954
]
],
[
[
194635,
194635
],
"mapped",
[
22294
]
],
[
[
194636,
194636
],
"mapped",
[
22022
]
],
[
[
194637,
194637
],
"mapped",
[
22295
]
],
[
[
194638,
194638
],
"mapped",
[
22097
]
],
[
[
194639,
194639
],
"mapped",
[
22132
]
],
[
[
194640,
194640
],
"mapped",
[
20999
]
],
[
[
194641,
194641
],
"mapped",
[
22766
]
],
[
[
194642,
194642
],
"mapped",
[
22478
]
],
[
[
194643,
194643
],
"mapped",
[
22516
]
],
[
[
194644,
194644
],
"mapped",
[
22541
]
],
[
[
194645,
194645
],
"mapped",
[
22411
]
],
[
[
194646,
194646
],
"mapped",
[
22578
]
],
[
[
194647,
194647
],
"mapped",
[
22577
]
],
[
[
194648,
194648
],
"mapped",
[
22700
]
],
[
[
194649,
194649
],
"mapped",
[
136420
]
],
[
[
194650,
194650
],
"mapped",
[
22770
]
],
[
[
194651,
194651
],
"mapped",
[
22775
]
],
[
[
194652,
194652
],
"mapped",
[
22790
]
],
[
[
194653,
194653
],
"mapped",
[
22810
]
],
[
[
194654,
194654
],
"mapped",
[
22818
]
],
[
[
194655,
194655
],
"mapped",
[
22882
]
],
[
[
194656,
194656
],
"mapped",
[
136872
]
],
[
[
194657,
194657
],
"mapped",
[
136938
]
],
[
[
194658,
194658
],
"mapped",
[
23020
]
],
[
[
194659,
194659
],
"mapped",
[
23067
]
],
[
[
194660,
194660
],
"mapped",
[
23079
]
],
[
[
194661,
194661
],
"mapped",
[
23000
]
],
[
[
194662,
194662
],
"mapped",
[
23142
]
],
[
[
194663,
194663
],
"mapped",
[
14062
]
],
[
[
194664,
194664
],
"disallowed"
],
[
[
194665,
194665
],
"mapped",
[
23304
]
],
[
[
194666,
194667
],
"mapped",
[
23358
]
],
[
[
194668,
194668
],
"mapped",
[
137672
]
],
[
[
194669,
194669
],
"mapped",
[
23491
]
],
[
[
194670,
194670
],
"mapped",
[
23512
]
],
[
[
194671,
194671
],
"mapped",
[
23527
]
],
[
[
194672,
194672
],
"mapped",
[
23539
]
],
[
[
194673,
194673
],
"mapped",
[
138008
]
],
[
[
194674,
194674
],
"mapped",
[
23551
]
],
[
[
194675,
194675
],
"mapped",
[
23558
]
],
[
[
194676,
194676
],
"disallowed"
],
[
[
194677,
194677
],
"mapped",
[
23586
]
],
[
[
194678,
194678
],
"mapped",
[
14209
]
],
[
[
194679,
194679
],
"mapped",
[
23648
]
],
[
[
194680,
194680
],
"mapped",
[
23662
]
],
[
[
194681,
194681
],
"mapped",
[
23744
]
],
[
[
194682,
194682
],
"mapped",
[
23693
]
],
[
[
194683,
194683
],
"mapped",
[
138724
]
],
[
[
194684,
194684
],
"mapped",
[
23875
]
],
[
[
194685,
194685
],
"mapped",
[
138726
]
],
[
[
194686,
194686
],
"mapped",
[
23918
]
],
[
[
194687,
194687
],
"mapped",
[
23915
]
],
[
[
194688,
194688
],
"mapped",
[
23932
]
],
[
[
194689,
194689
],
"mapped",
[
24033
]
],
[
[
194690,
194690
],
"mapped",
[
24034
]
],
[
[
194691,
194691
],
"mapped",
[
14383
]
],
[
[
194692,
194692
],
"mapped",
[
24061
]
],
[
[
194693,
194693
],
"mapped",
[
24104
]
],
[
[
194694,
194694
],
"mapped",
[
24125
]
],
[
[
194695,
194695
],
"mapped",
[
24169
]
],
[
[
194696,
194696
],
"mapped",
[
14434
]
],
[
[
194697,
194697
],
"mapped",
[
139651
]
],
[
[
194698,
194698
],
"mapped",
[
14460
]
],
[
[
194699,
194699
],
"mapped",
[
24240
]
],
[
[
194700,
194700
],
"mapped",
[
24243
]
],
[
[
194701,
194701
],
"mapped",
[
24246
]
],
[
[
194702,
194702
],
"mapped",
[
24266
]
],
[
[
194703,
194703
],
"mapped",
[
172946
]
],
[
[
194704,
194704
],
"mapped",
[
24318
]
],
[
[
194705,
194706
],
"mapped",
[
140081
]
],
[
[
194707,
194707
],
"mapped",
[
33281
]
],
[
[
194708,
194709
],
"mapped",
[
24354
]
],
[
[
194710,
194710
],
"mapped",
[
14535
]
],
[
[
194711,
194711
],
"mapped",
[
144056
]
],
[
[
194712,
194712
],
"mapped",
[
156122
]
],
[
[
194713,
194713
],
"mapped",
[
24418
]
],
[
[
194714,
194714
],
"mapped",
[
24427
]
],
[
[
194715,
194715
],
"mapped",
[
14563
]
],
[
[
194716,
194716
],
"mapped",
[
24474
]
],
[
[
194717,
194717
],
"mapped",
[
24525
]
],
[
[
194718,
194718
],
"mapped",
[
24535
]
],
[
[
194719,
194719
],
"mapped",
[
24569
]
],
[
[
194720,
194720
],
"mapped",
[
24705
]
],
[
[
194721,
194721
],
"mapped",
[
14650
]
],
[
[
194722,
194722
],
"mapped",
[
14620
]
],
[
[
194723,
194723
],
"mapped",
[
24724
]
],
[
[
194724,
194724
],
"mapped",
[
141012
]
],
[
[
194725,
194725
],
"mapped",
[
24775
]
],
[
[
194726,
194726
],
"mapped",
[
24904
]
],
[
[
194727,
194727
],
"mapped",
[
24908
]
],
[
[
194728,
194728
],
"mapped",
[
24910
]
],
[
[
194729,
194729
],
"mapped",
[
24908
]
],
[
[
194730,
194730
],
"mapped",
[
24954
]
],
[
[
194731,
194731
],
"mapped",
[
24974
]
],
[
[
194732,
194732
],
"mapped",
[
25010
]
],
[
[
194733,
194733
],
"mapped",
[
24996
]
],
[
[
194734,
194734
],
"mapped",
[
25007
]
],
[
[
194735,
194735
],
"mapped",
[
25054
]
],
[
[
194736,
194736
],
"mapped",
[
25074
]
],
[
[
194737,
194737
],
"mapped",
[
25078
]
],
[
[
194738,
194738
],
"mapped",
[
25104
]
],
[
[
194739,
194739
],
"mapped",
[
25115
]
],
[
[
194740,
194740
],
"mapped",
[
25181
]
],
[
[
194741,
194741
],
"mapped",
[
25265
]
],
[
[
194742,
194742
],
"mapped",
[
25300
]
],
[
[
194743,
194743
],
"mapped",
[
25424
]
],
[
[
194744,
194744
],
"mapped",
[
142092
]
],
[
[
194745,
194745
],
"mapped",
[
25405
]
],
[
[
194746,
194746
],
"mapped",
[
25340
]
],
[
[
194747,
194747
],
"mapped",
[
25448
]
],
[
[
194748,
194748
],
"mapped",
[
25475
]
],
[
[
194749,
194749
],
"mapped",
[
25572
]
],
[
[
194750,
194750
],
"mapped",
[
142321
]
],
[
[
194751,
194751
],
"mapped",
[
25634
]
],
[
[
194752,
194752
],
"mapped",
[
25541
]
],
[
[
194753,
194753
],
"mapped",
[
25513
]
],
[
[
194754,
194754
],
"mapped",
[
14894
]
],
[
[
194755,
194755
],
"mapped",
[
25705
]
],
[
[
194756,
194756
],
"mapped",
[
25726
]
],
[
[
194757,
194757
],
"mapped",
[
25757
]
],
[
[
194758,
194758
],
"mapped",
[
25719
]
],
[
[
194759,
194759
],
"mapped",
[
14956
]
],
[
[
194760,
194760
],
"mapped",
[
25935
]
],
[
[
194761,
194761
],
"mapped",
[
25964
]
],
[
[
194762,
194762
],
"mapped",
[
143370
]
],
[
[
194763,
194763
],
"mapped",
[
26083
]
],
[
[
194764,
194764
],
"mapped",
[
26360
]
],
[
[
194765,
194765
],
"mapped",
[
26185
]
],
[
[
194766,
194766
],
"mapped",
[
15129
]
],
[
[
194767,
194767
],
"mapped",
[
26257
]
],
[
[
194768,
194768
],
"mapped",
[
15112
]
],
[
[
194769,
194769
],
"mapped",
[
15076
]
],
[
[
194770,
194770
],
"mapped",
[
20882
]
],
[
[
194771,
194771
],
"mapped",
[
20885
]
],
[
[
194772,
194772
],
"mapped",
[
26368
]
],
[
[
194773,
194773
],
"mapped",
[
26268
]
],
[
[
194774,
194774
],
"mapped",
[
32941
]
],
[
[
194775,
194775
],
"mapped",
[
17369
]
],
[
[
194776,
194776
],
"mapped",
[
26391
]
],
[
[
194777,
194777
],
"mapped",
[
26395
]
],
[
[
194778,
194778
],
"mapped",
[
26401
]
],
[
[
194779,
194779
],
"mapped",
[
26462
]
],
[
[
194780,
194780
],
"mapped",
[
26451
]
],
[
[
194781,
194781
],
"mapped",
[
144323
]
],
[
[
194782,
194782
],
"mapped",
[
15177
]
],
[
[
194783,
194783
],
"mapped",
[
26618
]
],
[
[
194784,
194784
],
"mapped",
[
26501
]
],
[
[
194785,
194785
],
"mapped",
[
26706
]
],
[
[
194786,
194786
],
"mapped",
[
26757
]
],
[
[
194787,
194787
],
"mapped",
[
144493
]
],
[
[
194788,
194788
],
"mapped",
[
26766
]
],
[
[
194789,
194789
],
"mapped",
[
26655
]
],
[
[
194790,
194790
],
"mapped",
[
26900
]
],
[
[
194791,
194791
],
"mapped",
[
15261
]
],
[
[
194792,
194792
],
"mapped",
[
26946
]
],
[
[
194793,
194793
],
"mapped",
[
27043
]
],
[
[
194794,
194794
],
"mapped",
[
27114
]
],
[
[
194795,
194795
],
"mapped",
[
27304
]
],
[
[
194796,
194796
],
"mapped",
[
145059
]
],
[
[
194797,
194797
],
"mapped",
[
27355
]
],
[
[
194798,
194798
],
"mapped",
[
15384
]
],
[
[
194799,
194799
],
"mapped",
[
27425
]
],
[
[
194800,
194800
],
"mapped",
[
145575
]
],
[
[
194801,
194801
],
"mapped",
[
27476
]
],
[
[
194802,
194802
],
"mapped",
[
15438
]
],
[
[
194803,
194803
],
"mapped",
[
27506
]
],
[
[
194804,
194804
],
"mapped",
[
27551
]
],
[
[
194805,
194805
],
"mapped",
[
27578
]
],
[
[
194806,
194806
],
"mapped",
[
27579
]
],
[
[
194807,
194807
],
"mapped",
[
146061
]
],
[
[
194808,
194808
],
"mapped",
[
138507
]
],
[
[
194809,
194809
],
"mapped",
[
146170
]
],
[
[
194810,
194810
],
"mapped",
[
27726
]
],
[
[
194811,
194811
],
"mapped",
[
146620
]
],
[
[
194812,
194812
],
"mapped",
[
27839
]
],
[
[
194813,
194813
],
"mapped",
[
27853
]
],
[
[
194814,
194814
],
"mapped",
[
27751
]
],
[
[
194815,
194815
],
"mapped",
[
27926
]
],
[
[
194816,
194816
],
"mapped",
[
27966
]
],
[
[
194817,
194817
],
"mapped",
[
28023
]
],
[
[
194818,
194818
],
"mapped",
[
27969
]
],
[
[
194819,
194819
],
"mapped",
[
28009
]
],
[
[
194820,
194820
],
"mapped",
[
28024
]
],
[
[
194821,
194821
],
"mapped",
[
28037
]
],
[
[
194822,
194822
],
"mapped",
[
146718
]
],
[
[
194823,
194823
],
"mapped",
[
27956
]
],
[
[
194824,
194824
],
"mapped",
[
28207
]
],
[
[
194825,
194825
],
"mapped",
[
28270
]
],
[
[
194826,
194826
],
"mapped",
[
15667
]
],
[
[
194827,
194827
],
"mapped",
[
28363
]
],
[
[
194828,
194828
],
"mapped",
[
28359
]
],
[
[
194829,
194829
],
"mapped",
[
147153
]
],
[
[
194830,
194830
],
"mapped",
[
28153
]
],
[
[
194831,
194831
],
"mapped",
[
28526
]
],
[
[
194832,
194832
],
"mapped",
[
147294
]
],
[
[
194833,
194833
],
"mapped",
[
147342
]
],
[
[
194834,
194834
],
"mapped",
[
28614
]
],
[
[
194835,
194835
],
"mapped",
[
28729
]
],
[
[
194836,
194836
],
"mapped",
[
28702
]
],
[
[
194837,
194837
],
"mapped",
[
28699
]
],
[
[
194838,
194838
],
"mapped",
[
15766
]
],
[
[
194839,
194839
],
"mapped",
[
28746
]
],
[
[
194840,
194840
],
"mapped",
[
28797
]
],
[
[
194841,
194841
],
"mapped",
[
28791
]
],
[
[
194842,
194842
],
"mapped",
[
28845
]
],
[
[
194843,
194843
],
"mapped",
[
132389
]
],
[
[
194844,
194844
],
"mapped",
[
28997
]
],
[
[
194845,
194845
],
"mapped",
[
148067
]
],
[
[
194846,
194846
],
"mapped",
[
29084
]
],
[
[
194847,
194847
],
"disallowed"
],
[
[
194848,
194848
],
"mapped",
[
29224
]
],
[
[
194849,
194849
],
"mapped",
[
29237
]
],
[
[
194850,
194850
],
"mapped",
[
29264
]
],
[
[
194851,
194851
],
"mapped",
[
149000
]
],
[
[
194852,
194852
],
"mapped",
[
29312
]
],
[
[
194853,
194853
],
"mapped",
[
29333
]
],
[
[
194854,
194854
],
"mapped",
[
149301
]
],
[
[
194855,
194855
],
"mapped",
[
149524
]
],
[
[
194856,
194856
],
"mapped",
[
29562
]
],
[
[
194857,
194857
],
"mapped",
[
29579
]
],
[
[
194858,
194858
],
"mapped",
[
16044
]
],
[
[
194859,
194859
],
"mapped",
[
29605
]
],
[
[
194860,
194861
],
"mapped",
[
16056
]
],
[
[
194862,
194862
],
"mapped",
[
29767
]
],
[
[
194863,
194863
],
"mapped",
[
29788
]
],
[
[
194864,
194864
],
"mapped",
[
29809
]
],
[
[
194865,
194865
],
"mapped",
[
29829
]
],
[
[
194866,
194866
],
"mapped",
[
29898
]
],
[
[
194867,
194867
],
"mapped",
[
16155
]
],
[
[
194868,
194868
],
"mapped",
[
29988
]
],
[
[
194869,
194869
],
"mapped",
[
150582
]
],
[
[
194870,
194870
],
"mapped",
[
30014
]
],
[
[
194871,
194871
],
"mapped",
[
150674
]
],
[
[
194872,
194872
],
"mapped",
[
30064
]
],
[
[
194873,
194873
],
"mapped",
[
139679
]
],
[
[
194874,
194874
],
"mapped",
[
30224
]
],
[
[
194875,
194875
],
"mapped",
[
151457
]
],
[
[
194876,
194876
],
"mapped",
[
151480
]
],
[
[
194877,
194877
],
"mapped",
[
151620
]
],
[
[
194878,
194878
],
"mapped",
[
16380
]
],
[
[
194879,
194879
],
"mapped",
[
16392
]
],
[
[
194880,
194880
],
"mapped",
[
30452
]
],
[
[
194881,
194881
],
"mapped",
[
151795
]
],
[
[
194882,
194882
],
"mapped",
[
151794
]
],
[
[
194883,
194883
],
"mapped",
[
151833
]
],
[
[
194884,
194884
],
"mapped",
[
151859
]
],
[
[
194885,
194885
],
"mapped",
[
30494
]
],
[
[
194886,
194887
],
"mapped",
[
30495
]
],
[
[
194888,
194888
],
"mapped",
[
30538
]
],
[
[
194889,
194889
],
"mapped",
[
16441
]
],
[
[
194890,
194890
],
"mapped",
[
30603
]
],
[
[
194891,
194891
],
"mapped",
[
16454
]
],
[
[
194892,
194892
],
"mapped",
[
16534
]
],
[
[
194893,
194893
],
"mapped",
[
152605
]
],
[
[
194894,
194894
],
"mapped",
[
30798
]
],
[
[
194895,
194895
],
"mapped",
[
30860
]
],
[
[
194896,
194896
],
"mapped",
[
30924
]
],
[
[
194897,
194897
],
"mapped",
[
16611
]
],
[
[
194898,
194898
],
"mapped",
[
153126
]
],
[
[
194899,
194899
],
"mapped",
[
31062
]
],
[
[
194900,
194900
],
"mapped",
[
153242
]
],
[
[
194901,
194901
],
"mapped",
[
153285
]
],
[
[
194902,
194902
],
"mapped",
[
31119
]
],
[
[
194903,
194903
],
"mapped",
[
31211
]
],
[
[
194904,
194904
],
"mapped",
[
16687
]
],
[
[
194905,
194905
],
"mapped",
[
31296
]
],
[
[
194906,
194906
],
"mapped",
[
31306
]
],
[
[
194907,
194907
],
"mapped",
[
31311
]
],
[
[
194908,
194908
],
"mapped",
[
153980
]
],
[
[
194909,
194910
],
"mapped",
[
154279
]
],
[
[
194911,
194911
],
"disallowed"
],
[
[
194912,
194912
],
"mapped",
[
16898
]
],
[
[
194913,
194913
],
"mapped",
[
154539
]
],
[
[
194914,
194914
],
"mapped",
[
31686
]
],
[
[
194915,
194915
],
"mapped",
[
31689
]
],
[
[
194916,
194916
],
"mapped",
[
16935
]
],
[
[
194917,
194917
],
"mapped",
[
154752
]
],
[
[
194918,
194918
],
"mapped",
[
31954
]
],
[
[
194919,
194919
],
"mapped",
[
17056
]
],
[
[
194920,
194920
],
"mapped",
[
31976
]
],
[
[
194921,
194921
],
"mapped",
[
31971
]
],
[
[
194922,
194922
],
"mapped",
[
32000
]
],
[
[
194923,
194923
],
"mapped",
[
155526
]
],
[
[
194924,
194924
],
"mapped",
[
32099
]
],
[
[
194925,
194925
],
"mapped",
[
17153
]
],
[
[
194926,
194926
],
"mapped",
[
32199
]
],
[
[
194927,
194927
],
"mapped",
[
32258
]
],
[
[
194928,
194928
],
"mapped",
[
32325
]
],
[
[
194929,
194929
],
"mapped",
[
17204
]
],
[
[
194930,
194930
],
"mapped",
[
156200
]
],
[
[
194931,
194931
],
"mapped",
[
156231
]
],
[
[
194932,
194932
],
"mapped",
[
17241
]
],
[
[
194933,
194933
],
"mapped",
[
156377
]
],
[
[
194934,
194934
],
"mapped",
[
32634
]
],
[
[
194935,
194935
],
"mapped",
[
156478
]
],
[
[
194936,
194936
],
"mapped",
[
32661
]
],
[
[
194937,
194937
],
"mapped",
[
32762
]
],
[
[
194938,
194938
],
"mapped",
[
32773
]
],
[
[
194939,
194939
],
"mapped",
[
156890
]
],
[
[
194940,
194940
],
"mapped",
[
156963
]
],
[
[
194941,
194941
],
"mapped",
[
32864
]
],
[
[
194942,
194942
],
"mapped",
[
157096
]
],
[
[
194943,
194943
],
"mapped",
[
32880
]
],
[
[
194944,
194944
],
"mapped",
[
144223
]
],
[
[
194945,
194945
],
"mapped",
[
17365
]
],
[
[
194946,
194946
],
"mapped",
[
32946
]
],
[
[
194947,
194947
],
"mapped",
[
33027
]
],
[
[
194948,
194948
],
"mapped",
[
17419
]
],
[
[
194949,
194949
],
"mapped",
[
33086
]
],
[
[
194950,
194950
],
"mapped",
[
23221
]
],
[
[
194951,
194951
],
"mapped",
[
157607
]
],
[
[
194952,
194952
],
"mapped",
[
157621
]
],
[
[
194953,
194953
],
"mapped",
[
144275
]
],
[
[
194954,
194954
],
"mapped",
[
144284
]
],
[
[
194955,
194955
],
"mapped",
[
33281
]
],
[
[
194956,
194956
],
"mapped",
[
33284
]
],
[
[
194957,
194957
],
"mapped",
[
36766
]
],
[
[
194958,
194958
],
"mapped",
[
17515
]
],
[
[
194959,
194959
],
"mapped",
[
33425
]
],
[
[
194960,
194960
],
"mapped",
[
33419
]
],
[
[
194961,
194961
],
"mapped",
[
33437
]
],
[
[
194962,
194962
],
"mapped",
[
21171
]
],
[
[
194963,
194963
],
"mapped",
[
33457
]
],
[
[
194964,
194964
],
"mapped",
[
33459
]
],
[
[
194965,
194965
],
"mapped",
[
33469
]
],
[
[
194966,
194966
],
"mapped",
[
33510
]
],
[
[
194967,
194967
],
"mapped",
[
158524
]
],
[
[
194968,
194968
],
"mapped",
[
33509
]
],
[
[
194969,
194969
],
"mapped",
[
33565
]
],
[
[
194970,
194970
],
"mapped",
[
33635
]
],
[
[
194971,
194971
],
"mapped",
[
33709
]
],
[
[
194972,
194972
],
"mapped",
[
33571
]
],
[
[
194973,
194973
],
"mapped",
[
33725
]
],
[
[
194974,
194974
],
"mapped",
[
33767
]
],
[
[
194975,
194975
],
"mapped",
[
33879
]
],
[
[
194976,
194976
],
"mapped",
[
33619
]
],
[
[
194977,
194977
],
"mapped",
[
33738
]
],
[
[
194978,
194978
],
"mapped",
[
33740
]
],
[
[
194979,
194979
],
"mapped",
[
33756
]
],
[
[
194980,
194980
],
"mapped",
[
158774
]
],
[
[
194981,
194981
],
"mapped",
[
159083
]
],
[
[
194982,
194982
],
"mapped",
[
158933
]
],
[
[
194983,
194983
],
"mapped",
[
17707
]
],
[
[
194984,
194984
],
"mapped",
[
34033
]
],
[
[
194985,
194985
],
"mapped",
[
34035
]
],
[
[
194986,
194986
],
"mapped",
[
34070
]
],
[
[
194987,
194987
],
"mapped",
[
160714
]
],
[
[
194988,
194988
],
"mapped",
[
34148
]
],
[
[
194989,
194989
],
"mapped",
[
159532
]
],
[
[
194990,
194990
],
"mapped",
[
17757
]
],
[
[
194991,
194991
],
"mapped",
[
17761
]
],
[
[
194992,
194992
],
"mapped",
[
159665
]
],
[
[
194993,
194993
],
"mapped",
[
159954
]
],
[
[
194994,
194994
],
"mapped",
[
17771
]
],
[
[
194995,
194995
],
"mapped",
[
34384
]
],
[
[
194996,
194996
],
"mapped",
[
34396
]
],
[
[
194997,
194997
],
"mapped",
[
34407
]
],
[
[
194998,
194998
],
"mapped",
[
34409
]
],
[
[
194999,
194999
],
"mapped",
[
34473
]
],
[
[
195000,
195000
],
"mapped",
[
34440
]
],
[
[
195001,
195001
],
"mapped",
[
34574
]
],
[
[
195002,
195002
],
"mapped",
[
34530
]
],
[
[
195003,
195003
],
"mapped",
[
34681
]
],
[
[
195004,
195004
],
"mapped",
[
34600
]
],
[
[
195005,
195005
],
"mapped",
[
34667
]
],
[
[
195006,
195006
],
"mapped",
[
34694
]
],
[
[
195007,
195007
],
"disallowed"
],
[
[
195008,
195008
],
"mapped",
[
34785
]
],
[
[
195009,
195009
],
"mapped",
[
34817
]
],
[
[
195010,
195010
],
"mapped",
[
17913
]
],
[
[
195011,
195011
],
"mapped",
[
34912
]
],
[
[
195012,
195012
],
"mapped",
[
34915
]
],
[
[
195013,
195013
],
"mapped",
[
161383
]
],
[
[
195014,
195014
],
"mapped",
[
35031
]
],
[
[
195015,
195015
],
"mapped",
[
35038
]
],
[
[
195016,
195016
],
"mapped",
[
17973
]
],
[
[
195017,
195017
],
"mapped",
[
35066
]
],
[
[
195018,
195018
],
"mapped",
[
13499
]
],
[
[
195019,
195019
],
"mapped",
[
161966
]
],
[
[
195020,
195020
],
"mapped",
[
162150
]
],
[
[
195021,
195021
],
"mapped",
[
18110
]
],
[
[
195022,
195022
],
"mapped",
[
18119
]
],
[
[
195023,
195023
],
"mapped",
[
35488
]
],
[
[
195024,
195024
],
"mapped",
[
35565
]
],
[
[
195025,
195025
],
"mapped",
[
35722
]
],
[
[
195026,
195026
],
"mapped",
[
35925
]
],
[
[
195027,
195027
],
"mapped",
[
162984
]
],
[
[
195028,
195028
],
"mapped",
[
36011
]
],
[
[
195029,
195029
],
"mapped",
[
36033
]
],
[
[
195030,
195030
],
"mapped",
[
36123
]
],
[
[
195031,
195031
],
"mapped",
[
36215
]
],
[
[
195032,
195032
],
"mapped",
[
163631
]
],
[
[
195033,
195033
],
"mapped",
[
133124
]
],
[
[
195034,
195034
],
"mapped",
[
36299
]
],
[
[
195035,
195035
],
"mapped",
[
36284
]
],
[
[
195036,
195036
],
"mapped",
[
36336
]
],
[
[
195037,
195037
],
"mapped",
[
133342
]
],
[
[
195038,
195038
],
"mapped",
[
36564
]
],
[
[
195039,
195039
],
"mapped",
[
36664
]
],
[
[
195040,
195040
],
"mapped",
[
165330
]
],
[
[
195041,
195041
],
"mapped",
[
165357
]
],
[
[
195042,
195042
],
"mapped",
[
37012
]
],
[
[
195043,
195043
],
"mapped",
[
37105
]
],
[
[
195044,
195044
],
"mapped",
[
37137
]
],
[
[
195045,
195045
],
"mapped",
[
165678
]
],
[
[
195046,
195046
],
"mapped",
[
37147
]
],
[
[
195047,
195047
],
"mapped",
[
37432
]
],
[
[
195048,
195048
],
"mapped",
[
37591
]
],
[
[
195049,
195049
],
"mapped",
[
37592
]
],
[
[
195050,
195050
],
"mapped",
[
37500
]
],
[
[
195051,
195051
],
"mapped",
[
37881
]
],
[
[
195052,
195052
],
"mapped",
[
37909
]
],
[
[
195053,
195053
],
"mapped",
[
166906
]
],
[
[
195054,
195054
],
"mapped",
[
38283
]
],
[
[
195055,
195055
],
"mapped",
[
18837
]
],
[
[
195056,
195056
],
"mapped",
[
38327
]
],
[
[
195057,
195057
],
"mapped",
[
167287
]
],
[
[
195058,
195058
],
"mapped",
[
18918
]
],
[
[
195059,
195059
],
"mapped",
[
38595
]
],
[
[
195060,
195060
],
"mapped",
[
23986
]
],
[
[
195061,
195061
],
"mapped",
[
38691
]
],
[
[
195062,
195062
],
"mapped",
[
168261
]
],
[
[
195063,
195063
],
"mapped",
[
168474
]
],
[
[
195064,
195064
],
"mapped",
[
19054
]
],
[
[
195065,
195065
],
"mapped",
[
19062
]
],
[
[
195066,
195066
],
"mapped",
[
38880
]
],
[
[
195067,
195067
],
"mapped",
[
168970
]
],
[
[
195068,
195068
],
"mapped",
[
19122
]
],
[
[
195069,
195069
],
"mapped",
[
169110
]
],
[
[
195070,
195071
],
"mapped",
[
38923
]
],
[
[
195072,
195072
],
"mapped",
[
38953
]
],
[
[
195073,
195073
],
"mapped",
[
169398
]
],
[
[
195074,
195074
],
"mapped",
[
39138
]
],
[
[
195075,
195075
],
"mapped",
[
19251
]
],
[
[
195076,
195076
],
"mapped",
[
39209
]
],
[
[
195077,
195077
],
"mapped",
[
39335
]
],
[
[
195078,
195078
],
"mapped",
[
39362
]
],
[
[
195079,
195079
],
"mapped",
[
39422
]
],
[
[
195080,
195080
],
"mapped",
[
19406
]
],
[
[
195081,
195081
],
"mapped",
[
170800
]
],
[
[
195082,
195082
],
"mapped",
[
39698
]
],
[
[
195083,
195083
],
"mapped",
[
40000
]
],
[
[
195084,
195084
],
"mapped",
[
40189
]
],
[
[
195085,
195085
],
"mapped",
[
19662
]
],
[
[
195086,
195086
],
"mapped",
[
19693
]
],
[
[
195087,
195087
],
"mapped",
[
40295
]
],
[
[
195088,
195088
],
"mapped",
[
172238
]
],
[
[
195089,
195089
],
"mapped",
[
19704
]
],
[
[
195090,
195090
],
"mapped",
[
172293
]
],
[
[
195091,
195091
],
"mapped",
[
172558
]
],
[
[
195092,
195092
],
"mapped",
[
172689
]
],
[
[
195093,
195093
],
"mapped",
[
40635
]
],
[
[
195094,
195094
],
"mapped",
[
19798
]
],
[
[
195095,
195095
],
"mapped",
[
40697
]
],
[
[
195096,
195096
],
"mapped",
[
40702
]
],
[
[
195097,
195097
],
"mapped",
[
40709
]
],
[
[
195098,
195098
],
"mapped",
[
40719
]
],
[
[
195099,
195099
],
"mapped",
[
40726
]
],
[
[
195100,
195100
],
"mapped",
[
40763
]
],
[
[
195101,
195101
],
"mapped",
[
173568
]
],
[
[
195102,
196605
],
"disallowed"
],
[
[
196606,
196607
],
"disallowed"
],
[
[
196608,
262141
],
"disallowed"
],
[
[
262142,
262143
],
"disallowed"
],
[
[
262144,
327677
],
"disallowed"
],
[
[
327678,
327679
],
"disallowed"
],
[
[
327680,
393213
],
"disallowed"
],
[
[
393214,
393215
],
"disallowed"
],
[
[
393216,
458749
],
"disallowed"
],
[
[
458750,
458751
],
"disallowed"
],
[
[
458752,
524285
],
"disallowed"
],
[
[
524286,
524287
],
"disallowed"
],
[
[
524288,
589821
],
"disallowed"
],
[
[
589822,
589823
],
"disallowed"
],
[
[
589824,
655357
],
"disallowed"
],
[
[
655358,
655359
],
"disallowed"
],
[
[
655360,
720893
],
"disallowed"
],
[
[
720894,
720895
],
"disallowed"
],
[
[
720896,
786429
],
"disallowed"
],
[
[
786430,
786431
],
"disallowed"
],
[
[
786432,
851965
],
"disallowed"
],
[
[
851966,
851967
],
"disallowed"
],
[
[
851968,
917501
],
"disallowed"
],
[
[
917502,
917503
],
"disallowed"
],
[
[
917504,
917504
],
"disallowed"
],
[
[
917505,
917505
],
"disallowed"
],
[
[
917506,
917535
],
"disallowed"
],
[
[
917536,
917631
],
"disallowed"
],
[
[
917632,
917759
],
"disallowed"
],
[
[
917760,
917999
],
"ignored"
],
[
[
918000,
983037
],
"disallowed"
],
[
[
983038,
983039
],
"disallowed"
],
[
[
983040,
1048573
],
"disallowed"
],
[
[
1048574,
1048575
],
"disallowed"
],
[
[
1048576,
1114109
],
"disallowed"
],
[
[
1114110,
1114111
],
"disallowed"
]
];
var PROCESSING_OPTIONS = {
TRANSITIONAL: 0,
NONTRANSITIONAL: 1
};
function normalize(str) {
// fix bug in v8
return str.split('\u0000').map(function (s) {
return s.normalize('NFC');
}).join('\u0000');
}
function findStatus(val) {
var start = 0;
var end = mappingTable.length - 1;
while (start <= end) {
var mid = Math.floor((start + end) / 2);
var target = mappingTable[mid];
if (target[0][0] <= val && target[0][1] >= val) {
return target;
} else if (target[0][0] > val) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return null;
}
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
function countSymbols(string) {
return string
// replace every surrogate pair with a BMP symbol
.replace(regexAstralSymbols, '_')
// then get the length
.length;
}
function mapChars(domain_name, useSTD3, processing_option) {
var hasError = false;
var processed = "";
var len = countSymbols(domain_name);
for (var i = 0; i < len; ++i) {
var codePoint = domain_name.codePointAt(i);
var status = findStatus(codePoint);
switch (status[1]) {
case "disallowed":
hasError = true;
processed += String.fromCodePoint(codePoint);
break;
case "ignored":
break;
case "mapped":
processed += String.fromCodePoint.apply(String, status[2]);
break;
case "deviation":
if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {
processed += String.fromCodePoint.apply(String, status[2]);
} else {
processed += String.fromCodePoint(codePoint);
}
break;
case "valid":
processed += String.fromCodePoint(codePoint);
break;
case "disallowed_STD3_mapped":
if (useSTD3) {
hasError = true;
processed += String.fromCodePoint(codePoint);
} else {
processed += String.fromCodePoint.apply(String, status[2]);
}
break;
case "disallowed_STD3_valid":
if (useSTD3) {
hasError = true;
}
processed += String.fromCodePoint(codePoint);
break;
}
}
return {
string: processed,
error: hasError
};
}
var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/;
function validateLabel(label, processing_option) {
if (label.substr(0, 4) === "xn--") {
label = punycode.toUnicode(label);
}
var error = false;
if (normalize(label) !== label || label[3] === "-" && label[4] === "-" || label[0] === "-" || label[label.length - 1] === "-" || label.indexOf(".") !== -1 || label.search(combiningMarksRegex) === 0) {
error = true;
}
var len = countSymbols(label);
for (var i = 0; i < len; ++i) {
var status = findStatus(label.codePointAt(i));
if (processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid" || processing === PROCESSING_OPTIONS.NONTRANSITIONAL && status[1] !== "valid" && status[1] !== "deviation") {
error = true;
break;
}
}
return {
label: label,
error: error
};
}
function processing(domain_name, useSTD3, processing_option) {
var result = mapChars(domain_name, useSTD3, processing_option);
result.string = normalize(result.string);
var labels = result.string.split(".");
for (var i = 0; i < labels.length; ++i) {
try {
var validation = validateLabel(labels[i]);
labels[i] = validation.label;
result.error = result.error || validation.error;
} catch (e) {
result.error = true;
}
}
return {
string: labels.join("."),
error: result.error
};
}
var toASCII = function (domain_name, useSTD3, processing_option, verifyDnsLength) {
var result = processing(domain_name, useSTD3, processing_option);
var labels = result.string.split(".");
labels = labels.map(function (l) {
try {
return punycode.toASCII(l);
} catch (e) {
result.error = true;
return l;
}
});
if (verifyDnsLength) {
var total = labels.slice(0, labels.length - 1).join(".").length;
if (total.length > 253 || total.length === 0) {
result.error = true;
}
for (var i = 0; i < labels.length; ++i) {
if (labels.length > 63 || labels.length === 0) {
result.error = true;
break;
}
}
}
if (result.error) return null;
return labels.join(".");
};
var toUnicode = function (domain_name, useSTD3) {
var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);
return {
domain: result.string,
error: result.error
};
};
var PROCESSING_OPTIONS_1 = PROCESSING_OPTIONS;
var tr46 = {
toASCII: toASCII,
toUnicode: toUnicode,
PROCESSING_OPTIONS: PROCESSING_OPTIONS_1
};
var urlStateMachine = createCommonjsModule(function (module) {
const specialSchemes = {
ftp: 21,
file: null,
gopher: 70,
http: 80,
https: 443,
ws: 80,
wss: 443
};
const failure = Symbol("failure");
function countSymbols(str) {
return punycode.ucs2.decode(str).length;
}
function at(input, idx) {
const c = input[idx];
return isNaN(c) ? undefined : String.fromCodePoint(c);
}
function isASCIIDigit(c) {
return c >= 0x30 && c <= 0x39;
}
function isASCIIAlpha(c) {
return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A;
}
function isASCIIAlphanumeric(c) {
return isASCIIAlpha(c) || isASCIIDigit(c);
}
function isASCIIHex(c) {
return isASCIIDigit(c) || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66;
}
function isSingleDot(buffer) {
return buffer === "." || buffer.toLowerCase() === "%2e";
}
function isDoubleDot(buffer) {
buffer = buffer.toLowerCase();
return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
}
function isWindowsDriveLetterCodePoints(cp1, cp2) {
return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
}
function isWindowsDriveLetterString(string) {
return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
}
function isNormalizedWindowsDriveLetterString(string) {
return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
}
function containsForbiddenHostCodePoint(string) {
return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
}
function containsForbiddenHostCodePointExcludingPercent(string) {
return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
}
function isSpecialScheme(scheme) {
return specialSchemes[scheme] !== undefined;
}
function isSpecial(url) {
return isSpecialScheme(url.scheme);
}
function defaultPort(scheme) {
return specialSchemes[scheme];
}
function percentEncode(c) {
let hex = c.toString(16).toUpperCase();
if (hex.length === 1) {
hex = "0" + hex;
}
return "%" + hex;
}
function utf8PercentEncode(c) {
const buf = new Buffer(c);
let str = "";
for (let i = 0; i < buf.length; ++i) {
str += percentEncode(buf[i]);
}
return str;
}
function utf8PercentDecode(str) {
const input = new Buffer(str);
const output = [];
for (let i = 0; i < input.length; ++i) {
if (input[i] !== 37) {
output.push(input[i]);
} else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {
output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));
i += 2;
} else {
output.push(input[i]);
}
}
return new Buffer(output).toString();
}
function isC0ControlPercentEncode(c) {
return c <= 0x1F || c > 0x7E;
}
const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);
function isPathPercentEncode(c) {
return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);
}
const extraUserinfoPercentEncodeSet = new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
function isUserinfoPercentEncode(c) {
return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
}
function percentEncodeChar(c, encodeSetPredicate) {
const cStr = String.fromCodePoint(c);
if (encodeSetPredicate(c)) {
return utf8PercentEncode(cStr);
}
return cStr;
}
function parseIPv4Number(input) {
let R = 10;
if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
input = input.substring(2);
R = 16;
} else if (input.length >= 2 && input.charAt(0) === "0") {
input = input.substring(1);
R = 8;
}
if (input === "") {
return 0;
}
const regex = R === 10 ? /[^0-9]/ : R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/;
if (regex.test(input)) {
return failure;
}
return parseInt(input, R);
}
function parseIPv4(input) {
const parts = input.split(".");
if (parts[parts.length - 1] === "") {
if (parts.length > 1) {
parts.pop();
}
}
if (parts.length > 4) {
return input;
}
const numbers = [];
for (const part of parts) {
if (part === "") {
return input;
}
const n = parseIPv4Number(part);
if (n === failure) {
return input;
}
numbers.push(n);
}
for (let i = 0; i < numbers.length - 1; ++i) {
if (numbers[i] > 255) {
return failure;
}
}
if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
return failure;
}
let ipv4 = numbers.pop();
let counter = 0;
for (const n of numbers) {
ipv4 += n * Math.pow(256, 3 - counter);
++counter;
}
return ipv4;
}
function serializeIPv4(address) {
let output = "";
let n = address;
for (let i = 1; i <= 4; ++i) {
output = String(n % 256) + output;
if (i !== 4) {
output = "." + output;
}
n = Math.floor(n / 256);
}
return output;
}
function parseIPv6(input) {
const address = [0, 0, 0, 0, 0, 0, 0, 0];
let pieceIndex = 0;
let compress = null;
let pointer = 0;
input = punycode.ucs2.decode(input);
if (input[pointer] === 58) {
if (input[pointer + 1] !== 58) {
return failure;
}
pointer += 2;
++pieceIndex;
compress = pieceIndex;
}
while (pointer < input.length) {
if (pieceIndex === 8) {
return failure;
}
if (input[pointer] === 58) {
if (compress !== null) {
return failure;
}
++pointer;
++pieceIndex;
compress = pieceIndex;
continue;
}
let value = 0;
let length = 0;
while (length < 4 && isASCIIHex(input[pointer])) {
value = value * 0x10 + parseInt(at(input, pointer), 16);
++pointer;
++length;
}
if (input[pointer] === 46) {
if (length === 0) {
return failure;
}
pointer -= length;
if (pieceIndex > 6) {
return failure;
}
let numbersSeen = 0;
while (input[pointer] !== undefined) {
let ipv4Piece = null;
if (numbersSeen > 0) {
if (input[pointer] === 46 && numbersSeen < 4) {
++pointer;
} else {
return failure;
}
}
if (!isASCIIDigit(input[pointer])) {
return failure;
}
while (isASCIIDigit(input[pointer])) {
const number = parseInt(at(input, pointer));
if (ipv4Piece === null) {
ipv4Piece = number;
} else if (ipv4Piece === 0) {
return failure;
} else {
ipv4Piece = ipv4Piece * 10 + number;
}
if (ipv4Piece > 255) {
return failure;
}
++pointer;
}
address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
++numbersSeen;
if (numbersSeen === 2 || numbersSeen === 4) {
++pieceIndex;
}
}
if (numbersSeen !== 4) {
return failure;
}
break;
} else if (input[pointer] === 58) {
++pointer;
if (input[pointer] === undefined) {
return failure;
}
} else if (input[pointer] !== undefined) {
return failure;
}
address[pieceIndex] = value;
++pieceIndex;
}
if (compress !== null) {
let swaps = pieceIndex - compress;
pieceIndex = 7;
while (pieceIndex !== 0 && swaps > 0) {
const temp = address[compress + swaps - 1];
address[compress + swaps - 1] = address[pieceIndex];
address[pieceIndex] = temp;
--pieceIndex;
--swaps;
}
} else if (compress === null && pieceIndex !== 8) {
return failure;
}
return address;
}
function serializeIPv6(address) {
let output = "";
const seqResult = findLongestZeroSequence(address);
const compress = seqResult.idx;
let ignore0 = false;
for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
if (ignore0 && address[pieceIndex] === 0) {
continue;
} else if (ignore0) {
ignore0 = false;
}
if (compress === pieceIndex) {
const separator = pieceIndex === 0 ? "::" : ":";
output += separator;
ignore0 = true;
continue;
}
output += address[pieceIndex].toString(16);
if (pieceIndex !== 7) {
output += ":";
}
}
return output;
}
function parseHost(input, isSpecialArg) {
if (input[0] === "[") {
if (input[input.length - 1] !== "]") {
return failure;
}
return parseIPv6(input.substring(1, input.length - 1));
}
if (!isSpecialArg) {
return parseOpaqueHost(input);
}
const domain = utf8PercentDecode(input);
const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);
if (asciiDomain === null) {
return failure;
}
if (containsForbiddenHostCodePoint(asciiDomain)) {
return failure;
}
const ipv4Host = parseIPv4(asciiDomain);
if (typeof ipv4Host === "number" || ipv4Host === failure) {
return ipv4Host;
}
return asciiDomain;
}
function parseOpaqueHost(input) {
if (containsForbiddenHostCodePointExcludingPercent(input)) {
return failure;
}
let output = "";
const decoded = punycode.ucs2.decode(input);
for (let i = 0; i < decoded.length; ++i) {
output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
}
return output;
}
function findLongestZeroSequence(arr) {
let maxIdx = null;
let maxLen = 1; // only find elements > 1
let currStart = null;
let currLen = 0;
for (let i = 0; i < arr.length; ++i) {
if (arr[i] !== 0) {
if (currLen > maxLen) {
maxIdx = currStart;
maxLen = currLen;
}
currStart = null;
currLen = 0;
} else {
if (currStart === null) {
currStart = i;
}
++currLen;
}
}
// if trailing zeros
if (currLen > maxLen) {
maxIdx = currStart;
maxLen = currLen;
}
return {
idx: maxIdx,
len: maxLen
};
}
function serializeHost(host) {
if (typeof host === "number") {
return serializeIPv4(host);
}
// IPv6 serializer
if (host instanceof Array) {
return "[" + serializeIPv6(host) + "]";
}
return host;
}
function trimControlChars(url) {
return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
}
function trimTabAndNewline(url) {
return url.replace(/\u0009|\u000A|\u000D/g, "");
}
function shortenPath(url) {
const path = url.path;
if (path.length === 0) {
return;
}
if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
return;
}
path.pop();
}
function includesCredentials(url) {
return url.username !== "" || url.password !== "";
}
function cannotHaveAUsernamePasswordPort(url) {
return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
}
function isNormalizedWindowsDriveLetter(string) {
return /^[A-Za-z]:$/.test(string);
}
function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
this.pointer = 0;
this.input = input;
this.base = base || null;
this.encodingOverride = encodingOverride || "utf-8";
this.stateOverride = stateOverride;
this.url = url;
this.failure = false;
this.parseError = false;
if (!this.url) {
this.url = {
scheme: "",
username: "",
password: "",
host: null,
port: null,
path: [],
query: null,
fragment: null,
cannotBeABaseURL: false
};
const res = trimControlChars(this.input);
if (res !== this.input) {
this.parseError = true;
}
this.input = res;
}
const res = trimTabAndNewline(this.input);
if (res !== this.input) {
this.parseError = true;
}
this.input = res;
this.state = stateOverride || "scheme start";
this.buffer = "";
this.atFlag = false;
this.arrFlag = false;
this.passwordTokenSeenFlag = false;
this.input = punycode.ucs2.decode(this.input);
for (; this.pointer <= this.input.length; ++this.pointer) {
const c = this.input[this.pointer];
const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
// exec state machine
const ret = this["parse " + this.state](c, cStr);
if (!ret) {
break; // terminate algorithm
} else if (ret === failure) {
this.failure = true;
break;
}
}
}
URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
if (isASCIIAlpha(c)) {
this.buffer += cStr.toLowerCase();
this.state = "scheme";
} else if (!this.stateOverride) {
this.state = "no scheme";
--this.pointer;
} else {
this.parseError = true;
return failure;
}
return true;
};
URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
this.buffer += cStr.toLowerCase();
} else if (c === 58) {
if (this.stateOverride) {
if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
return false;
}
if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
return false;
}
if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
return false;
}
if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
return false;
}
}
this.url.scheme = this.buffer;
this.buffer = "";
if (this.stateOverride) {
return false;
}
if (this.url.scheme === "file") {
if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
this.parseError = true;
}
this.state = "file";
} else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
this.state = "special relative or authority";
} else if (isSpecial(this.url)) {
this.state = "special authority slashes";
} else if (this.input[this.pointer + 1] === 47) {
this.state = "path or authority";
++this.pointer;
} else {
this.url.cannotBeABaseURL = true;
this.url.path.push("");
this.state = "cannot-be-a-base-URL path";
}
} else if (!this.stateOverride) {
this.buffer = "";
this.state = "no scheme";
this.pointer = -1;
} else {
this.parseError = true;
return failure;
}
return true;
};
URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
if (this.base === null || this.base.cannotBeABaseURL && c !== 35) {
return failure;
} else if (this.base.cannotBeABaseURL && c === 35) {
this.url.scheme = this.base.scheme;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.url.cannotBeABaseURL = true;
this.state = "fragment";
} else if (this.base.scheme === "file") {
this.state = "file";
--this.pointer;
} else {
this.state = "relative";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
if (c === 47 && this.input[this.pointer + 1] === 47) {
this.state = "special authority ignore slashes";
++this.pointer;
} else {
this.parseError = true;
this.state = "relative";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
if (c === 47) {
this.state = "authority";
} else {
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
this.url.scheme = this.base.scheme;
if (isNaN(c)) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
} else if (c === 47) {
this.state = "relative slash";
} else if (c === 63) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.state = "fragment";
} else if (isSpecial(this.url) && c === 92) {
this.parseError = true;
this.state = "relative slash";
} else {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice(0, this.base.path.length - 1);
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
if (isSpecial(this.url) && (c === 47 || c === 92)) {
if (c === 92) {
this.parseError = true;
}
this.state = "special authority ignore slashes";
} else if (c === 47) {
this.state = "authority";
} else {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
if (c === 47 && this.input[this.pointer + 1] === 47) {
this.state = "special authority ignore slashes";
++this.pointer;
} else {
this.parseError = true;
this.state = "special authority ignore slashes";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
if (c !== 47 && c !== 92) {
this.state = "authority";
--this.pointer;
} else {
this.parseError = true;
}
return true;
};
URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
if (c === 64) {
this.parseError = true;
if (this.atFlag) {
this.buffer = "%40" + this.buffer;
}
this.atFlag = true;
// careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
const len = countSymbols(this.buffer);
for (let pointer = 0; pointer < len; ++pointer) {
const codePoint = this.buffer.codePointAt(pointer);
if (codePoint === 58 && !this.passwordTokenSeenFlag) {
this.passwordTokenSeenFlag = true;
continue;
}
const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
if (this.passwordTokenSeenFlag) {
this.url.password += encodedCodePoints;
} else {
this.url.username += encodedCodePoints;
}
}
this.buffer = "";
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 || isSpecial(this.url) && c === 92) {
if (this.atFlag && this.buffer === "") {
this.parseError = true;
return failure;
}
this.pointer -= countSymbols(this.buffer) + 1;
this.buffer = "";
this.state = "host";
} else {
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse hostname"] = URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
if (this.stateOverride && this.url.scheme === "file") {
--this.pointer;
this.state = "file host";
} else if (c === 58 && !this.arrFlag) {
if (this.buffer === "") {
this.parseError = true;
return failure;
}
const host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
this.url.host = host;
this.buffer = "";
this.state = "port";
if (this.stateOverride === "hostname") {
return false;
}
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 || isSpecial(this.url) && c === 92) {
--this.pointer;
if (isSpecial(this.url) && this.buffer === "") {
this.parseError = true;
return failure;
} else if (this.stateOverride && this.buffer === "" && (includesCredentials(this.url) || this.url.port !== null)) {
this.parseError = true;
return false;
}
const host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
this.url.host = host;
this.buffer = "";
this.state = "path start";
if (this.stateOverride) {
return false;
}
} else {
if (c === 91) {
this.arrFlag = true;
} else if (c === 93) {
this.arrFlag = false;
}
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
if (isASCIIDigit(c)) {
this.buffer += cStr;
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 || isSpecial(this.url) && c === 92 || this.stateOverride) {
if (this.buffer !== "") {
const port = parseInt(this.buffer);
if (port > Math.pow(2, 16) - 1) {
this.parseError = true;
return failure;
}
this.url.port = port === defaultPort(this.url.scheme) ? null : port;
this.buffer = "";
}
if (this.stateOverride) {
return false;
}
this.state = "path start";
--this.pointer;
} else {
this.parseError = true;
return failure;
}
return true;
};
const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
URLStateMachine.prototype["parse file"] = function parseFile(c) {
this.url.scheme = "file";
if (c === 47 || c === 92) {
if (c === 92) {
this.parseError = true;
}
this.state = "file slash";
} else if (this.base !== null && this.base.scheme === "file") {
if (isNaN(c)) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
} else if (c === 63) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.state = "fragment";
} else {
if (this.input.length - this.pointer - 1 === 0 ||
// remaining consists of 0 code points
!isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || this.input.length - this.pointer - 1 >= 2 &&
// remaining has at least 2 code points
!fileOtherwiseCodePoints.has(this.input[this.pointer + 2])) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
shortenPath(this.url);
} else {
this.parseError = true;
}
this.state = "path";
--this.pointer;
}
} else {
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
if (c === 47 || c === 92) {
if (c === 92) {
this.parseError = true;
}
this.state = "file host";
} else {
if (this.base !== null && this.base.scheme === "file") {
if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
this.url.path.push(this.base.path[0]);
} else {
this.url.host = this.base.host;
}
}
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
--this.pointer;
if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
this.parseError = true;
this.state = "path";
} else if (this.buffer === "") {
this.url.host = "";
if (this.stateOverride) {
return false;
}
this.state = "path start";
} else {
let host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
if (host === "localhost") {
host = "";
}
this.url.host = host;
if (this.stateOverride) {
return false;
}
this.buffer = "";
this.state = "path start";
}
} else {
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
if (isSpecial(this.url)) {
if (c === 92) {
this.parseError = true;
}
this.state = "path";
if (c !== 47 && c !== 92) {
--this.pointer;
}
} else if (!this.stateOverride && c === 63) {
this.url.query = "";
this.state = "query";
} else if (!this.stateOverride && c === 35) {
this.url.fragment = "";
this.state = "fragment";
} else if (c !== undefined) {
this.state = "path";
if (c !== 47) {
--this.pointer;
}
}
return true;
};
URLStateMachine.prototype["parse path"] = function parsePath(c) {
if (isNaN(c) || c === 47 || isSpecial(this.url) && c === 92 || !this.stateOverride && (c === 63 || c === 35)) {
if (isSpecial(this.url) && c === 92) {
this.parseError = true;
}
if (isDoubleDot(this.buffer)) {
shortenPath(this.url);
if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
this.url.path.push("");
}
} else if (isSingleDot(this.buffer) && c !== 47 && !(isSpecial(this.url) && c === 92)) {
this.url.path.push("");
} else if (!isSingleDot(this.buffer)) {
if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
if (this.url.host !== "" && this.url.host !== null) {
this.parseError = true;
this.url.host = "";
}
this.buffer = this.buffer[0] + ":";
}
this.url.path.push(this.buffer);
}
this.buffer = "";
if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
while (this.url.path.length > 1 && this.url.path[0] === "") {
this.parseError = true;
this.url.path.shift();
}
}
if (c === 63) {
this.url.query = "";
this.state = "query";
}
if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
}
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.buffer += percentEncodeChar(c, isPathPercentEncode);
}
return true;
};
URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
if (c === 63) {
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
} else {
// TODO: Add: not a URL code point
if (!isNaN(c) && c !== 37) {
this.parseError = true;
}
if (c === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
if (!isNaN(c)) {
this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
}
}
return true;
};
URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
if (isNaN(c) || !this.stateOverride && c === 35) {
if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
this.encodingOverride = "utf-8";
}
const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead
for (let i = 0; i < buffer.length; ++i) {
if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || buffer[i] === 0x3C || buffer[i] === 0x3E) {
this.url.query += percentEncode(buffer[i]);
} else {
this.url.query += String.fromCodePoint(buffer[i]);
}
}
this.buffer = "";
if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
}
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
if (isNaN(c)) ; else if (c === 0x0) {
this.parseError = true;
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);
}
return true;
};
function serializeURL(url, excludeFragment) {
let output = url.scheme + ":";
if (url.host !== null) {
output += "//";
if (url.username !== "" || url.password !== "") {
output += url.username;
if (url.password !== "") {
output += ":" + url.password;
}
output += "@";
}
output += serializeHost(url.host);
if (url.port !== null) {
output += ":" + url.port;
}
} else if (url.host === null && url.scheme === "file") {
output += "//";
}
if (url.cannotBeABaseURL) {
output += url.path[0];
} else {
for (const string of url.path) {
output += "/" + string;
}
}
if (url.query !== null) {
output += "?" + url.query;
}
if (!excludeFragment && url.fragment !== null) {
output += "#" + url.fragment;
}
return output;
}
function serializeOrigin(tuple) {
let result = tuple.scheme + "://";
result += serializeHost(tuple.host);
if (tuple.port !== null) {
result += ":" + tuple.port;
}
return result;
}
module.exports.serializeURL = serializeURL;
module.exports.serializeURLOrigin = function (url) {
// https://url.spec.whatwg.org/#concept-url-origin
switch (url.scheme) {
case "blob":
try {
return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
} catch (e) {
// serializing an opaque origin returns "null"
return "null";
}
case "ftp":
case "gopher":
case "http":
case "https":
case "ws":
case "wss":
return serializeOrigin({
scheme: url.scheme,
host: url.host,
port: url.port
});
case "file":
// spec says "exercise to the reader", chrome says "file://"
return "file://";
default:
// serializing an opaque origin returns "null"
return "null";
}
};
module.exports.basicURLParse = function (input, options) {
if (options === undefined) {
options = {};
}
const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
if (usm.failure) {
return "failure";
}
return usm.url;
};
module.exports.setTheUsername = function (url, username) {
url.username = "";
const decoded = punycode.ucs2.decode(username);
for (let i = 0; i < decoded.length; ++i) {
url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
}
};
module.exports.setThePassword = function (url, password) {
url.password = "";
const decoded = punycode.ucs2.decode(password);
for (let i = 0; i < decoded.length; ++i) {
url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
}
};
module.exports.serializeHost = serializeHost;
module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
module.exports.serializeInteger = function (integer) {
return String(integer);
};
module.exports.parseURL = function (input, options) {
if (options === undefined) {
options = {};
}
// We don't handle blobs, so this just delegates:
return module.exports.basicURLParse(input, {
baseURL: options.baseURL,
encodingOverride: options.encodingOverride
});
};
});
var implementation = class URLImpl {
constructor(constructorArgs) {
const url = constructorArgs[0];
const base = constructorArgs[1];
let parsedBase = null;
if (base !== undefined) {
parsedBase = urlStateMachine.basicURLParse(base);
if (parsedBase === "failure") {
throw new TypeError("Invalid base URL");
}
}
const parsedURL = urlStateMachine.basicURLParse(url, {
baseURL: parsedBase
});
if (parsedURL === "failure") {
throw new TypeError("Invalid URL");
}
this._url = parsedURL;
// TODO: query stuff
}
get href() {
return urlStateMachine.serializeURL(this._url);
}
set href(v) {
const parsedURL = urlStateMachine.basicURLParse(v);
if (parsedURL === "failure") {
throw new TypeError("Invalid URL");
}
this._url = parsedURL;
}
get origin() {
return urlStateMachine.serializeURLOrigin(this._url);
}
get protocol() {
return this._url.scheme + ":";
}
set protocol(v) {
urlStateMachine.basicURLParse(v + ":", {
url: this._url,
stateOverride: "scheme start"
});
}
get username() {
return this._url.username;
}
set username(v) {
if (urlStateMachine.cannotHaveAUsernamePasswordPort(this._url)) {
return;
}
urlStateMachine.setTheUsername(this._url, v);
}
get password() {
return this._url.password;
}
set password(v) {
if (urlStateMachine.cannotHaveAUsernamePasswordPort(this._url)) {
return;
}
urlStateMachine.setThePassword(this._url, v);
}
get host() {
const url = this._url;
if (url.host === null) {
return "";
}
if (url.port === null) {
return urlStateMachine.serializeHost(url.host);
}
return urlStateMachine.serializeHost(url.host) + ":" + urlStateMachine.serializeInteger(url.port);
}
set host(v) {
if (this._url.cannotBeABaseURL) {
return;
}
urlStateMachine.basicURLParse(v, {
url: this._url,
stateOverride: "host"
});
}
get hostname() {
if (this._url.host === null) {
return "";
}
return urlStateMachine.serializeHost(this._url.host);
}
set hostname(v) {
if (this._url.cannotBeABaseURL) {
return;
}
urlStateMachine.basicURLParse(v, {
url: this._url,
stateOverride: "hostname"
});
}
get port() {
if (this._url.port === null) {
return "";
}
return urlStateMachine.serializeInteger(this._url.port);
}
set port(v) {
if (urlStateMachine.cannotHaveAUsernamePasswordPort(this._url)) {
return;
}
if (v === "") {
this._url.port = null;
} else {
urlStateMachine.basicURLParse(v, {
url: this._url,
stateOverride: "port"
});
}
}
get pathname() {
if (this._url.cannotBeABaseURL) {
return this._url.path[0];
}
if (this._url.path.length === 0) {
return "";
}
return "/" + this._url.path.join("/");
}
set pathname(v) {
if (this._url.cannotBeABaseURL) {
return;
}
this._url.path = [];
urlStateMachine.basicURLParse(v, {
url: this._url,
stateOverride: "path start"
});
}
get search() {
if (this._url.query === null || this._url.query === "") {
return "";
}
return "?" + this._url.query;
}
set search(v) {
// TODO: query stuff
const url = this._url;
if (v === "") {
url.query = null;
return;
}
const input = v[0] === "?" ? v.substring(1) : v;
url.query = "";
urlStateMachine.basicURLParse(input, {
url,
stateOverride: "query"
});
}
get hash() {
if (this._url.fragment === null || this._url.fragment === "") {
return "";
}
return "#" + this._url.fragment;
}
set hash(v) {
if (v === "") {
this._url.fragment = null;
return;
}
const input = v[0] === "#" ? v.substring(1) : v;
this._url.fragment = "";
urlStateMachine.basicURLParse(input, {
url: this._url,
stateOverride: "fragment"
});
}
toJSON() {
return this.href;
}
};
var URLImpl_1 = {
implementation: implementation
};
var URL_1 = createCommonjsModule(function (module) {
const impl = utils.implSymbol;
function URL(url) {
if (!this || this[impl] || !(this instanceof URL)) {
throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
}
if (arguments.length < 1) {
throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
}
const args = [];
for (let i = 0; i < arguments.length && i < 2; ++i) {
args[i] = arguments[i];
}
args[0] = lib$2["USVString"](args[0]);
if (args[1] !== undefined) {
args[1] = lib$2["USVString"](args[1]);
}
module.exports.setup(this, args);
}
URL.prototype.toJSON = function toJSON() {
if (!this || !module.exports.is(this)) {
throw new TypeError("Illegal invocation");
}
const args = [];
for (let i = 0; i < arguments.length && i < 0; ++i) {
args[i] = arguments[i];
}
return this[impl].toJSON.apply(this[impl], args);
};
Object.defineProperty(URL.prototype, "href", {
get() {
return this[impl].href;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].href = V;
},
enumerable: true,
configurable: true
});
URL.prototype.toString = function () {
if (!this || !module.exports.is(this)) {
throw new TypeError("Illegal invocation");
}
return this.href;
};
Object.defineProperty(URL.prototype, "origin", {
get() {
return this[impl].origin;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "protocol", {
get() {
return this[impl].protocol;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].protocol = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "username", {
get() {
return this[impl].username;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].username = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "password", {
get() {
return this[impl].password;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].password = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "host", {
get() {
return this[impl].host;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].host = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "hostname", {
get() {
return this[impl].hostname;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].hostname = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "port", {
get() {
return this[impl].port;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].port = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "pathname", {
get() {
return this[impl].pathname;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].pathname = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "search", {
get() {
return this[impl].search;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].search = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "hash", {
get() {
return this[impl].hash;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].hash = V;
},
enumerable: true,
configurable: true
});
module.exports = {
is(obj) {
return !!obj && obj[impl] instanceof URLImpl_1.implementation;
},
create(constructorArgs, privateData) {
let obj = Object.create(URL.prototype);
this.setup(obj, constructorArgs, privateData);
return obj;
},
setup(obj, constructorArgs, privateData) {
if (!privateData) privateData = {};
privateData.wrapper = obj;
obj[impl] = new URLImpl_1.implementation(constructorArgs, privateData);
obj[impl][utils.wrapperSymbol] = obj;
},
interface: URL,
expose: {
Window: {
URL: URL
},
Worker: {
URL: URL
}
}
};
});
var URL$4 = URL_1.interface;
var serializeURL = urlStateMachine.serializeURL;
var serializeURLOrigin = urlStateMachine.serializeURLOrigin;
var basicURLParse = urlStateMachine.basicURLParse;
var setTheUsername = urlStateMachine.setTheUsername;
var setThePassword = urlStateMachine.setThePassword;
var serializeHost = urlStateMachine.serializeHost;
var serializeInteger = urlStateMachine.serializeInteger;
var parseURL$2 = urlStateMachine.parseURL;
var publicApi = {
URL: URL$4,
serializeURL: serializeURL,
serializeURLOrigin: serializeURLOrigin,
basicURLParse: basicURLParse,
setTheUsername: setTheUsername,
setThePassword: setThePassword,
serializeHost: serializeHost,
serializeInteger: serializeInteger,
parseURL: parseURL$2
};
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
// fix for "Readable" isn't a named export issue
const Readable$1 = Stream.Readable;
const BUFFER$1 = Symbol('buffer');
const TYPE$2 = Symbol('type');
class Blob$1 {
constructor() {
this[TYPE$2] = '';
const blobParts = arguments[0];
const options = arguments[1];
const buffers = [];
if (blobParts) {
const a = blobParts;
const length = Number(a.length);
for (let i = 0; i < length; i++) {
const element = a[i];
let buffer;
if (element instanceof Buffer) {
buffer = element;
} else if (ArrayBuffer.isView(element)) {
buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
} else if (element instanceof ArrayBuffer) {
buffer = Buffer.from(element);
} else if (element instanceof Blob$1) {
buffer = element[BUFFER$1];
} else {
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
}
buffers.push(buffer);
}
}
this[BUFFER$1] = Buffer.concat(buffers);
let type = options && options.type !== undefined && String(options.type).toLowerCase();
if (type && !/[^\u0020-\u007E]/.test(type)) {
this[TYPE$2] = type;
}
}
get size() {
return this[BUFFER$1].length;
}
get type() {
return this[TYPE$2];
}
text() {
return Promise.resolve(this[BUFFER$1].toString());
}
arrayBuffer() {
const buf = this[BUFFER$1];
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
return Promise.resolve(ab);
}
stream() {
const readable = new Readable$1();
readable._read = function () {};
readable.push(this[BUFFER$1]);
readable.push(null);
return readable;
}
toString() {
return '[object Blob]';
}
slice() {
const size = this.size;
const start = arguments[0];
const end = arguments[1];
let relativeStart, relativeEnd;
if (start === undefined) {
relativeStart = 0;
} else if (start < 0) {
relativeStart = Math.max(size + start, 0);
} else {
relativeStart = Math.min(start, size);
}
if (end === undefined) {
relativeEnd = size;
} else if (end < 0) {
relativeEnd = Math.max(size + end, 0);
} else {
relativeEnd = Math.min(end, size);
}
const span = Math.max(relativeEnd - relativeStart, 0);
const buffer = this[BUFFER$1];
const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
const blob = new Blob$1([], {
type: arguments[2]
});
blob[BUFFER$1] = slicedBuffer;
return blob;
}
}
Object.defineProperties(Blob$1.prototype, {
size: {
enumerable: true
},
type: {
enumerable: true
},
slice: {
enumerable: true
}
});
Object.defineProperty(Blob$1.prototype, Symbol.toStringTag, {
value: 'Blob',
writable: false,
enumerable: false,
configurable: true
});
/**
* fetch-error.js
*
* FetchError interface for operational errors
*/
/**
* Create FetchError instance
*
* @param String message Error message for human
* @param String type Error type for machine
* @param String systemError For Node.js system error
* @return FetchError
*/
function FetchError$1(message, type, systemError) {
Error.call(this, message);
this.message = message;
this.type = type;
// when err.type is `system`, err.code contains system error code
if (systemError) {
this.code = this.errno = systemError.code;
}
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
FetchError$1.prototype = Object.create(Error.prototype);
FetchError$1.prototype.constructor = FetchError$1;
FetchError$1.prototype.name = 'FetchError';
let convert$1;
try {
convert$1 = require('encoding').convert;
} catch (e) {}
const INTERNALS$3 = Symbol('Body internals');
// fix an issue where "PassThrough" isn't a named export for node <10
const PassThrough$2 = Stream.PassThrough;
/**
* Body mixin
*
* Ref: https://fetch.spec.whatwg.org/#body
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
function Body$2(body) {
var _this = this;
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$size = _ref.size;
let size = _ref$size === undefined ? 0 : _ref$size;
var _ref$timeout = _ref.timeout;
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
if (body == null) {
// body is undefined or null
body = null;
} else if (isURLSearchParams$1(body)) {
// body is a URLSearchParams
body = Buffer.from(body.toString());
} else if (isBlob$1(body)) ;else if (Buffer.isBuffer(body)) ;else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
// body is ArrayBuffer
body = Buffer.from(body);
} else if (ArrayBuffer.isView(body)) {
// body is ArrayBufferView
body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
} else if (body instanceof Stream) ;else {
// none of the above
// coerce to string then buffer
body = Buffer.from(String(body));
}
this[INTERNALS$3] = {
body,
disturbed: false,
error: null
};
this.size = size;
this.timeout = timeout;
if (body instanceof Stream) {
body.on('error', function (err) {
const error = err.name === 'AbortError' ? err : new FetchError$1(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
_this[INTERNALS$3].error = error;
});
}
}
Body$2.prototype = {
get body() {
return this[INTERNALS$3].body;
},
get bodyUsed() {
return this[INTERNALS$3].disturbed;
},
/**
* Decode response as ArrayBuffer
*
* @return Promise
*/
arrayBuffer() {
return consumeBody$2.call(this).then(function (buf) {
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
});
},
/**
* Return raw response as Blob
*
* @return Promise
*/
blob() {
let ct = this.headers && this.headers.get('content-type') || '';
return consumeBody$2.call(this).then(function (buf) {
return Object.assign(
// Prevent copying
new Blob$1([], {
type: ct.toLowerCase()
}), {
[BUFFER$1]: buf
});
});
},
/**
* Decode response as json
*
* @return Promise
*/
json() {
var _this2 = this;
return consumeBody$2.call(this).then(function (buffer) {
try {
return JSON.parse(buffer.toString());
} catch (err) {
return Body$2.Promise.reject(new FetchError$1(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
}
});
},
/**
* Decode response as text
*
* @return Promise
*/
text() {
return consumeBody$2.call(this).then(function (buffer) {
return buffer.toString();
});
},
/**
* Decode response as buffer (non-spec api)
*
* @return Promise
*/
buffer() {
return consumeBody$2.call(this);
},
/**
* Decode response as text, while automatically detecting the encoding and
* trying to decode to UTF-8 (non-spec api)
*
* @return Promise
*/
textConverted() {
var _this3 = this;
return consumeBody$2.call(this).then(function (buffer) {
return convertBody$1(buffer, _this3.headers);
});
}
};
// In browsers, all properties are enumerable.
Object.defineProperties(Body$2.prototype, {
body: {
enumerable: true
},
bodyUsed: {
enumerable: true
},
arrayBuffer: {
enumerable: true
},
blob: {
enumerable: true
},
json: {
enumerable: true
},
text: {
enumerable: true
}
});
Body$2.mixIn = function (proto) {
for (const name of Object.getOwnPropertyNames(Body$2.prototype)) {
// istanbul ignore else: future proof
if (!(name in proto)) {
const desc = Object.getOwnPropertyDescriptor(Body$2.prototype, name);
Object.defineProperty(proto, name, desc);
}
}
};
/**
* Consume and convert an entire Body to a Buffer.
*
* Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
*
* @return Promise
*/
function consumeBody$2() {
var _this4 = this;
if (this[INTERNALS$3].disturbed) {
return Body$2.Promise.reject(new TypeError(`body used already for: ${this.url}`));
}
this[INTERNALS$3].disturbed = true;
if (this[INTERNALS$3].error) {
return Body$2.Promise.reject(this[INTERNALS$3].error);
}
let body = this.body;
// body is null
if (body === null) {
return Body$2.Promise.resolve(Buffer.alloc(0));
}
// body is blob
if (isBlob$1(body)) {
body = body.stream();
}
// body is buffer
if (Buffer.isBuffer(body)) {
return Body$2.Promise.resolve(body);
}
// istanbul ignore if: should never happen
if (!(body instanceof Stream)) {
return Body$2.Promise.resolve(Buffer.alloc(0));
}
// body is stream
// get ready to actually consume the body
let accum = [];
let accumBytes = 0;
let abort = false;
return new Body$2.Promise(function (resolve, reject) {
let resTimeout;
// allow timeout on slow response body
if (_this4.timeout) {
resTimeout = setTimeout(function () {
abort = true;
reject(new FetchError$1(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
}, _this4.timeout);
}
// handle stream errors
body.on('error', function (err) {
if (err.name === 'AbortError') {
// if the request was aborted, reject with this Error
abort = true;
reject(err);
} else {
// other errors, such as incorrect content-encoding
reject(new FetchError$1(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
}
});
body.on('data', function (chunk) {
if (abort || chunk === null) {
return;
}
if (_this4.size && accumBytes + chunk.length > _this4.size) {
abort = true;
reject(new FetchError$1(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
return;
}
accumBytes += chunk.length;
accum.push(chunk);
});
body.on('end', function () {
if (abort) {
return;
}
clearTimeout(resTimeout);
try {
resolve(Buffer.concat(accum, accumBytes));
} catch (err) {
// handle streams that have accumulated too much data (issue #414)
reject(new FetchError$1(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
}
});
});
}
/**
* Detect buffer encoding and convert to target encoding
* ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
*
* @param Buffer buffer Incoming buffer
* @param String encoding Target encoding
* @return String
*/
function convertBody$1(buffer, headers) {
if (typeof convert$1 !== 'function') {
throw new Error('The package `encoding` must be installed to use the textConverted() function');
}
const ct = headers.get('content-type');
let charset = 'utf-8';
let res, str;
// header
if (ct) {
res = /charset=([^;]*)/i.exec(ct);
}
// no charset in content type, peek at response body for at most 1024 bytes
str = buffer.slice(0, 1024).toString();
// html5
if (!res && str) {
res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
}
// html4
if (!res && str) {
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
if (!res) {
res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
if (res) {
res.pop(); // drop last quote
}
}
if (res) {
res = /charset=(.*)/i.exec(res.pop());
}
}
// xml
if (!res && str) {
res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
}
// found charset
if (res) {
charset = res.pop();
// prevent decode issues when sites use incorrect encoding
// ref: https://hsivonen.fi/encoding-menu/
if (charset === 'gb2312' || charset === 'gbk') {
charset = 'gb18030';
}
}
// turn raw buffers into a single utf-8 buffer
return convert$1(buffer, 'UTF-8', charset).toString();
}
/**
* Detect a URLSearchParams object
* ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
*
* @param Object obj Object to detect by type or brand
* @return String
*/
function isURLSearchParams$1(obj) {
// Duck-typing as a necessary condition.
if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
return false;
}
// Brand-checking and more duck-typing as optional condition.
return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
}
/**
* Check if `obj` is a W3C `Blob` object (which `File` inherits from)
* @param {*} obj
* @return {boolean}
*/
function isBlob$1(obj) {
return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
}
/**
* Clone body given Res/Req instance
*
* @param Mixed instance Response or Request instance
* @return Mixed
*/
function clone$2(instance) {
let p1, p2;
let body = instance.body;
// don't allow cloning a used body
if (instance.bodyUsed) {
throw new Error('cannot clone body after it is used');
}
// check that body is a stream and not form-data object
// note: we can't clone the form-data object without having it as a dependency
if (body instanceof Stream && typeof body.getBoundary !== 'function') {
// tee instance body
p1 = new PassThrough$2();
p2 = new PassThrough$2();
body.pipe(p1);
body.pipe(p2);
// set instance body to teed body and return the other teed body
instance[INTERNALS$3].body = p1;
body = p2;
}
return body;
}
/**
* Performs the operation "extract a `Content-Type` value from |object|" as
* specified in the specification:
* https://fetch.spec.whatwg.org/#concept-bodyinit-extract
*
* This function assumes that instance.body is present.
*
* @param Mixed instance Any options.body input
*/
function extractContentType$2(body) {
if (body === null) {
// body is null
return null;
} else if (typeof body === 'string') {
// body is string
return 'text/plain;charset=UTF-8';
} else if (isURLSearchParams$1(body)) {
// body is a URLSearchParams
return 'application/x-www-form-urlencoded;charset=UTF-8';
} else if (isBlob$1(body)) {
// body is blob
return body.type || null;
} else if (Buffer.isBuffer(body)) {
// body is buffer
return null;
} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
// body is ArrayBuffer
return null;
} else if (ArrayBuffer.isView(body)) {
// body is ArrayBufferView
return null;
} else if (typeof body.getBoundary === 'function') {
// detect form data input from form-data module
return `multipart/form-data;boundary=${body.getBoundary()}`;
} else if (body instanceof Stream) {
// body is stream
// can't really do much about this
return null;
} else {
// Body constructor defaults other things to string
return 'text/plain;charset=UTF-8';
}
}
/**
* The Fetch Standard treats this as if "total bytes" is a property on the body.
* For us, we have to explicitly get it with a function.
*
* ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
*
* @param Body instance Instance of Body
* @return Number? Number of bytes, or null if not possible
*/
function getTotalBytes$1(instance) {
const body = instance.body;
if (body === null) {
// body is null
return 0;
} else if (isBlob$1(body)) {
return body.size;
} else if (Buffer.isBuffer(body)) {
// body is buffer
return body.length;
} else if (body && typeof body.getLengthSync === 'function') {
// detect form data input from form-data module
if (body._lengthRetrievers && body._lengthRetrievers.length == 0 ||
// 1.x
body.hasKnownLength && body.hasKnownLength()) {
// 2.x
return body.getLengthSync();
}
return null;
} else {
// body is stream
return null;
}
}
/**
* Write a Body to a Node.js WritableStream (e.g. http.Request) object.
*
* @param Body instance Instance of Body
* @return Void
*/
function writeToStream$1(dest, instance) {
const body = instance.body;
if (body === null) {
// body is null
dest.end();
} else if (isBlob$1(body)) {
body.stream().pipe(dest);
} else if (Buffer.isBuffer(body)) {
// body is buffer
dest.write(body);
dest.end();
} else {
// body is stream
body.pipe(dest);
}
}
// expose Promise
Body$2.Promise = global.Promise;
/**
* headers.js
*
* Headers class offers convenient helpers
*/
const invalidTokenRegex$1 = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
const invalidHeaderCharRegex$1 = /[^\t\x20-\x7e\x80-\xff]/;
function validateName$1(name) {
name = `${name}`;
if (invalidTokenRegex$1.test(name) || name === '') {
throw new TypeError(`${name} is not a legal HTTP header name`);
}
}
function validateValue$1(value) {
value = `${value}`;
if (invalidHeaderCharRegex$1.test(value)) {
throw new TypeError(`${value} is not a legal HTTP header value`);
}
}
/**
* Find the key in the map object given a header name.
*
* Returns undefined if not found.
*
* @param String name Header name
* @return String|Undefined
*/
function find$1(map, name) {
name = name.toLowerCase();
for (const key in map) {
if (key.toLowerCase() === name) {
return key;
}
}
return undefined;
}
const MAP$1 = Symbol('map');
class Headers$1 {
/**
* Headers class
*
* @param Object headers Response headers
* @return Void
*/
constructor() {
let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
this[MAP$1] = Object.create(null);
if (init instanceof Headers$1) {
const rawHeaders = init.raw();
const headerNames = Object.keys(rawHeaders);
for (const headerName of headerNames) {
for (const value of rawHeaders[headerName]) {
this.append(headerName, value);
}
}
return;
}
// We don't worry about converting prop to ByteString here as append()
// will handle it.
if (init == null) ;else if (typeof init === 'object') {
const method = init[Symbol.iterator];
if (method != null) {
if (typeof method !== 'function') {
throw new TypeError('Header pairs must be iterable');
}
// sequence<sequence<ByteString>>
// Note: per spec we have to first exhaust the lists then process them
const pairs = [];
for (const pair of init) {
if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
throw new TypeError('Each header pair must be iterable');
}
pairs.push(Array.from(pair));
}
for (const pair of pairs) {
if (pair.length !== 2) {
throw new TypeError('Each header pair must be a name/value tuple');
}
this.append(pair[0], pair[1]);
}
} else {
// record<ByteString, ByteString>
for (const key of Object.keys(init)) {
const value = init[key];
this.append(key, value);
}
}
} else {
throw new TypeError('Provided initializer must be an object');
}
}
/**
* Return combined header value given name
*
* @param String name Header name
* @return Mixed
*/
get(name) {
name = `${name}`;
validateName$1(name);
const key = find$1(this[MAP$1], name);
if (key === undefined) {
return null;
}
return this[MAP$1][key].join(', ');
}
/**
* Iterate over all headers
*
* @param Function callback Executed for each item with parameters (value, name, thisArg)
* @param Boolean thisArg `this` context for callback function
* @return Void
*/
forEach(callback) {
let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
let pairs = getHeaders$1(this);
let i = 0;
while (i < pairs.length) {
var _pairs$i = pairs[i];
const name = _pairs$i[0],
value = _pairs$i[1];
callback.call(thisArg, value, name, this);
pairs = getHeaders$1(this);
i++;
}
}
/**
* Overwrite header values given name
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
set(name, value) {
name = `${name}`;
value = `${value}`;
validateName$1(name);
validateValue$1(value);
const key = find$1(this[MAP$1], name);
this[MAP$1][key !== undefined ? key : name] = [value];
}
/**
* Append a value onto existing header
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
append(name, value) {
name = `${name}`;
value = `${value}`;
validateName$1(name);
validateValue$1(value);
const key = find$1(this[MAP$1], name);
if (key !== undefined) {
this[MAP$1][key].push(value);
} else {
this[MAP$1][name] = [value];
}
}
/**
* Check for header name existence
*
* @param String name Header name
* @return Boolean
*/
has(name) {
name = `${name}`;
validateName$1(name);
return find$1(this[MAP$1], name) !== undefined;
}
/**
* Delete all header values given name
*
* @param String name Header name
* @return Void
*/
delete(name) {
name = `${name}`;
validateName$1(name);
const key = find$1(this[MAP$1], name);
if (key !== undefined) {
delete this[MAP$1][key];
}
}
/**
* Return raw headers (non-spec api)
*
* @return Object
*/
raw() {
return this[MAP$1];
}
/**
* Get an iterator on keys.
*
* @return Iterator
*/
keys() {
return createHeadersIterator$1(this, 'key');
}
/**
* Get an iterator on values.
*
* @return Iterator
*/
values() {
return createHeadersIterator$1(this, 'value');
}
/**
* Get an iterator on entries.
*
* This is the default iterator of the Headers object.
*
* @return Iterator
*/
[Symbol.iterator]() {
return createHeadersIterator$1(this, 'key+value');
}
}
Headers$1.prototype.entries = Headers$1.prototype[Symbol.iterator];
Object.defineProperty(Headers$1.prototype, Symbol.toStringTag, {
value: 'Headers',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Headers$1.prototype, {
get: {
enumerable: true
},
forEach: {
enumerable: true
},
set: {
enumerable: true
},
append: {
enumerable: true
},
has: {
enumerable: true
},
delete: {
enumerable: true
},
keys: {
enumerable: true
},
values: {
enumerable: true
},
entries: {
enumerable: true
}
});
function getHeaders$1(headers) {
let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
const keys = Object.keys(headers[MAP$1]).sort();
return keys.map(kind === 'key' ? function (k) {
return k.toLowerCase();
} : kind === 'value' ? function (k) {
return headers[MAP$1][k].join(', ');
} : function (k) {
return [k.toLowerCase(), headers[MAP$1][k].join(', ')];
});
}
const INTERNAL$1 = Symbol('internal');
function createHeadersIterator$1(target, kind) {
const iterator = Object.create(HeadersIteratorPrototype$1);
iterator[INTERNAL$1] = {
target,
kind,
index: 0
};
return iterator;
}
const HeadersIteratorPrototype$1 = Object.setPrototypeOf({
next() {
// istanbul ignore if
if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype$1) {
throw new TypeError('Value of `this` is not a HeadersIterator');
}
var _INTERNAL = this[INTERNAL$1];
const target = _INTERNAL.target,
kind = _INTERNAL.kind,
index = _INTERNAL.index;
const values = getHeaders$1(target, kind);
const len = values.length;
if (index >= len) {
return {
value: undefined,
done: true
};
}
this[INTERNAL$1].index = index + 1;
return {
value: values[index],
done: false
};
}
}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
Object.defineProperty(HeadersIteratorPrototype$1, Symbol.toStringTag, {
value: 'HeadersIterator',
writable: false,
enumerable: false,
configurable: true
});
/**
* Export the Headers object in a form that Node.js can consume.
*
* @param Headers headers
* @return Object
*/
function exportNodeCompatibleHeaders$1(headers) {
const obj = Object.assign({
__proto__: null
}, headers[MAP$1]);
// http.request() only supports string as Host header. This hack makes
// specifying custom Host header possible.
const hostHeaderKey = find$1(headers[MAP$1], 'Host');
if (hostHeaderKey !== undefined) {
obj[hostHeaderKey] = obj[hostHeaderKey][0];
}
return obj;
}
/**
* Create a Headers object from an object of headers, ignoring those that do
* not conform to HTTP grammar productions.
*
* @param Object obj Object of headers
* @return Headers
*/
function createHeadersLenient$1(obj) {
const headers = new Headers$1();
for (const name of Object.keys(obj)) {
if (invalidTokenRegex$1.test(name)) {
continue;
}
if (Array.isArray(obj[name])) {
for (const val of obj[name]) {
if (invalidHeaderCharRegex$1.test(val)) {
continue;
}
if (headers[MAP$1][name] === undefined) {
headers[MAP$1][name] = [val];
} else {
headers[MAP$1][name].push(val);
}
}
} else if (!invalidHeaderCharRegex$1.test(obj[name])) {
headers[MAP$1][name] = [obj[name]];
}
}
return headers;
}
const INTERNALS$1$1 = Symbol('Response internals');
// fix an issue where "STATUS_CODES" aren't a named export for node <10
const STATUS_CODES$1 = http.STATUS_CODES;
/**
* Response class
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
class Response$1 {
constructor() {
let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
Body$2.call(this, body, opts);
const status = opts.status || 200;
const headers = new Headers$1(opts.headers);
if (body != null && !headers.has('Content-Type')) {
const contentType = extractContentType$2(body);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
this[INTERNALS$1$1] = {
url: opts.url,
status,
statusText: opts.statusText || STATUS_CODES$1[status],
headers,
counter: opts.counter
};
}
get url() {
return this[INTERNALS$1$1].url || '';
}
get status() {
return this[INTERNALS$1$1].status;
}
/**
* Convenience property representing if the request ended normally
*/
get ok() {
return this[INTERNALS$1$1].status >= 200 && this[INTERNALS$1$1].status < 300;
}
get redirected() {
return this[INTERNALS$1$1].counter > 0;
}
get statusText() {
return this[INTERNALS$1$1].statusText;
}
get headers() {
return this[INTERNALS$1$1].headers;
}
/**
* Clone this response
*
* @return Response
*/
clone() {
return new Response$1(clone$2(this), {
url: this.url,
status: this.status,
statusText: this.statusText,
headers: this.headers,
ok: this.ok,
redirected: this.redirected
});
}
}
Body$2.mixIn(Response$1.prototype);
Object.defineProperties(Response$1.prototype, {
url: {
enumerable: true
},
status: {
enumerable: true
},
ok: {
enumerable: true
},
redirected: {
enumerable: true
},
statusText: {
enumerable: true
},
headers: {
enumerable: true
},
clone: {
enumerable: true
}
});
Object.defineProperty(Response$1.prototype, Symbol.toStringTag, {
value: 'Response',
writable: false,
enumerable: false,
configurable: true
});
const INTERNALS$2$1 = Symbol('Request internals');
const URL$3 = Url.URL || publicApi.URL;
// fix an issue where "format", "parse" aren't a named export for node <10
const parse_url$1 = Url.parse;
const format_url$1 = Url.format;
/**
* Wrapper around `new URL` to handle arbitrary URLs
*
* @param {string} urlStr
* @return {void}
*/
function parseURL$1(urlStr) {
/*
Check whether the URL is absolute or not
Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
*/
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
urlStr = new URL$3(urlStr).toString();
}
// Fallback to old implementation for arbitrary URLs
return parse_url$1(urlStr);
}
const streamDestructionSupported$1 = ('destroy' in Stream.Readable.prototype);
/**
* Check if a value is an instance of Request.
*
* @param Mixed input
* @return Boolean
*/
function isRequest$1(input) {
return typeof input === 'object' && typeof input[INTERNALS$2$1] === 'object';
}
function isAbortSignal$1(signal) {
const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
return !!(proto && proto.constructor.name === 'AbortSignal');
}
/**
* Request class
*
* @param Mixed input Url or Request instance
* @param Object init Custom options
* @return Void
*/
class Request$1 {
constructor(input) {
let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
let parsedURL;
// normalize input
if (!isRequest$1(input)) {
if (input && input.href) {
// in order to support Node.js' Url objects; though WHATWG's URL objects
// will fall into this branch also (since their `toString()` will return
// `href` property anyway)
parsedURL = parseURL$1(input.href);
} else {
// coerce input to a string before attempting to parse
parsedURL = parseURL$1(`${input}`);
}
input = {};
} else {
parsedURL = parseURL$1(input.url);
}
let method = init.method || input.method || 'GET';
method = method.toUpperCase();
if ((init.body != null || isRequest$1(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
throw new TypeError('Request with GET/HEAD method cannot have body');
}
let inputBody = init.body != null ? init.body : isRequest$1(input) && input.body !== null ? clone$2(input) : null;
Body$2.call(this, inputBody, {
timeout: init.timeout || input.timeout || 0,
size: init.size || input.size || 0
});
const headers = new Headers$1(init.headers || input.headers || {});
if (inputBody != null && !headers.has('Content-Type')) {
const contentType = extractContentType$2(inputBody);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
let signal = isRequest$1(input) ? input.signal : null;
if ('signal' in init) signal = init.signal;
if (signal != null && !isAbortSignal$1(signal)) {
throw new TypeError('Expected signal to be an instanceof AbortSignal');
}
this[INTERNALS$2$1] = {
method,
redirect: init.redirect || input.redirect || 'follow',
headers,
parsedURL,
signal
};
// node-fetch-only options
this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
this.counter = init.counter || input.counter || 0;
this.agent = init.agent || input.agent;
}
get method() {
return this[INTERNALS$2$1].method;
}
get url() {
return format_url$1(this[INTERNALS$2$1].parsedURL);
}
get headers() {
return this[INTERNALS$2$1].headers;
}
get redirect() {
return this[INTERNALS$2$1].redirect;
}
get signal() {
return this[INTERNALS$2$1].signal;
}
/**
* Clone this request
*
* @return Request
*/
clone() {
return new Request$1(this);
}
}
Body$2.mixIn(Request$1.prototype);
Object.defineProperty(Request$1.prototype, Symbol.toStringTag, {
value: 'Request',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Request$1.prototype, {
method: {
enumerable: true
},
url: {
enumerable: true
},
headers: {
enumerable: true
},
redirect: {
enumerable: true
},
clone: {
enumerable: true
},
signal: {
enumerable: true
}
});
/**
* Convert a Request to Node.js http request options.
*
* @param Request A Request instance
* @return Object The options object to be passed to http.request
*/
function getNodeRequestOptions$1(request) {
const parsedURL = request[INTERNALS$2$1].parsedURL;
const headers = new Headers$1(request[INTERNALS$2$1].headers);
// fetch step 1.3
if (!headers.has('Accept')) {
headers.set('Accept', '*/*');
}
// Basic fetch
if (!parsedURL.protocol || !parsedURL.hostname) {
throw new TypeError('Only absolute URLs are supported');
}
if (!/^https?:$/.test(parsedURL.protocol)) {
throw new TypeError('Only HTTP(S) protocols are supported');
}
if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported$1) {
throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
}
// HTTP-network-or-cache fetch steps 2.4-2.7
let contentLengthValue = null;
if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
contentLengthValue = '0';
}
if (request.body != null) {
const totalBytes = getTotalBytes$1(request);
if (typeof totalBytes === 'number') {
contentLengthValue = String(totalBytes);
}
}
if (contentLengthValue) {
headers.set('Content-Length', contentLengthValue);
}
// HTTP-network-or-cache fetch step 2.11
if (!headers.has('User-Agent')) {
headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
}
// HTTP-network-or-cache fetch step 2.15
if (request.compress && !headers.has('Accept-Encoding')) {
headers.set('Accept-Encoding', 'gzip,deflate');
}
let agent = request.agent;
if (typeof agent === 'function') {
agent = agent(parsedURL);
}
// HTTP-network fetch step 4.2
// chunked encoding is handled by Node.js
return Object.assign({}, parsedURL, {
method: request.method,
headers: exportNodeCompatibleHeaders$1(headers),
agent
});
}
/**
* abort-error.js
*
* AbortError interface for cancelled requests
*/
/**
* Create AbortError instance
*
* @param String message Error message for human
* @return AbortError
*/
function AbortError$1(message) {
Error.call(this, message);
this.type = 'aborted';
this.message = message;
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
AbortError$1.prototype = Object.create(Error.prototype);
AbortError$1.prototype.constructor = AbortError$1;
AbortError$1.prototype.name = 'AbortError';
const URL$1$1 = Url.URL || publicApi.URL;
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1$1 = Stream.PassThrough;
const isDomainOrSubdomain$1 = function isDomainOrSubdomain(destination, original) {
const orig = new URL$1$1(original).hostname;
const dest = new URL$1$1(destination).hostname;
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
};
/**
* isSameProtocol reports whether the two provided URLs use the same protocol.
*
* Both domains must already be in canonical form.
* @param {string|URL} original
* @param {string|URL} destination
*/
const isSameProtocol$1 = function isSameProtocol(destination, original) {
const orig = new URL$1$1(original).protocol;
const dest = new URL$1$1(destination).protocol;
return orig === dest;
};
/**
* Fetch function
*
* @param Mixed url Absolute url or Request instance
* @param Object opts Fetch options
* @return Promise
*/
function fetch$2(url, opts) {
// allow custom promise
if (!fetch$2.Promise) {
throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
}
Body$2.Promise = fetch$2.Promise;
// wrap http.request into fetch
return new fetch$2.Promise(function (resolve, reject) {
// build request object
const request = new Request$1(url, opts);
const options = getNodeRequestOptions$1(request);
const send = (options.protocol === 'https:' ? https : http).request;
const signal = request.signal;
let response = null;
const abort = function abort() {
let error = new AbortError$1('The user aborted a request.');
reject(error);
if (request.body && request.body instanceof Stream.Readable) {
destroyStream$1(request.body, error);
}
if (!response || !response.body) return;
response.body.emit('error', error);
};
if (signal && signal.aborted) {
abort();
return;
}
const abortAndFinalize = function abortAndFinalize() {
abort();
finalize();
};
// send request
const req = send(options);
let reqTimeout;
if (signal) {
signal.addEventListener('abort', abortAndFinalize);
}
function finalize() {
req.abort();
if (signal) signal.removeEventListener('abort', abortAndFinalize);
clearTimeout(reqTimeout);
}
if (request.timeout) {
req.once('socket', function (socket) {
reqTimeout = setTimeout(function () {
reject(new FetchError$1(`network timeout at: ${request.url}`, 'request-timeout'));
finalize();
}, request.timeout);
});
}
req.on('error', function (err) {
reject(new FetchError$1(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
if (response && response.body) {
destroyStream$1(response.body, err);
}
finalize();
});
fixResponseChunkedTransferBadEnding$1(req, function (err) {
if (signal && signal.aborted) {
return;
}
if (response && response.body) {
destroyStream$1(response.body, err);
}
});
/* c8 ignore next 18 */
if (parseInt(process.version.substring(1)) < 14) {
// Before Node.js 14, pipeline() does not fully support async iterators and does not always
// properly handle when the socket close/end events are out of order.
req.on('socket', function (s) {
s.addListener('close', function (hadError) {
// if a data listener is still present we didn't end cleanly
const hasDataListener = s.listenerCount('data') > 0;
// if end happened before close but the socket didn't emit an error, do it now
if (response && hasDataListener && !hadError && !(signal && signal.aborted)) {
const err = new Error('Premature close');
err.code = 'ERR_STREAM_PREMATURE_CLOSE';
response.body.emit('error', err);
}
});
});
}
req.on('response', function (res) {
clearTimeout(reqTimeout);
const headers = createHeadersLenient$1(res.headers);
// HTTP fetch step 5
if (fetch$2.isRedirect(res.statusCode)) {
// HTTP fetch step 5.2
const location = headers.get('Location');
// HTTP fetch step 5.3
let locationURL = null;
try {
locationURL = location === null ? null : new URL$1$1(location, request.url).toString();
} catch (err) {
// error here can only be invalid URL in Location: header
// do not throw when options.redirect == manual
// let the user extract the errorneous redirect URL
if (request.redirect !== 'manual') {
reject(new FetchError$1(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
finalize();
return;
}
}
// HTTP fetch step 5.5
switch (request.redirect) {
case 'error':
reject(new FetchError$1(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
finalize();
return;
case 'manual':
// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
if (locationURL !== null) {
// handle corrupted header
try {
headers.set('Location', locationURL);
} catch (err) {
// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
reject(err);
}
}
break;
case 'follow':
// HTTP-redirect fetch step 2
if (locationURL === null) {
break;
}
// HTTP-redirect fetch step 5
if (request.counter >= request.follow) {
reject(new FetchError$1(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 6 (counter increment)
// Create a new Request object.
const requestOpts = {
headers: new Headers$1(request.headers),
follow: request.follow,
counter: request.counter + 1,
agent: request.agent,
compress: request.compress,
method: request.method,
body: request.body,
signal: request.signal,
timeout: request.timeout,
size: request.size
};
if (!isDomainOrSubdomain$1(request.url, locationURL) || !isSameProtocol$1(request.url, locationURL)) {
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
requestOpts.headers.delete(name);
}
}
// HTTP-redirect fetch step 9
if (res.statusCode !== 303 && request.body && getTotalBytes$1(request) === null) {
reject(new FetchError$1('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 11
if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
requestOpts.method = 'GET';
requestOpts.body = undefined;
requestOpts.headers.delete('content-length');
}
// HTTP-redirect fetch step 15
resolve(fetch$2(new Request$1(locationURL, requestOpts)));
finalize();
return;
}
}
// prepare response
res.once('end', function () {
if (signal) signal.removeEventListener('abort', abortAndFinalize);
});
let body = res.pipe(new PassThrough$1$1());
const response_options = {
url: request.url,
status: res.statusCode,
statusText: res.statusMessage,
headers: headers,
size: request.size,
timeout: request.timeout,
counter: request.counter
};
// HTTP-network fetch step 12.1.1.3
const codings = headers.get('Content-Encoding');
// HTTP-network fetch step 12.1.1.4: handle content codings
// in following scenarios we ignore compression support
// 1. compression support is disabled
// 2. HEAD request
// 3. no Content-Encoding header
// 4. no content response (204)
// 5. content not modified response (304)
if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
response = new Response$1(body, response_options);
resolve(response);
return;
}
// For Node v6+
// Be less strict when decoding compressed responses, since sometimes
// servers send slightly invalid responses that are still accepted
// by common browsers.
// Always using Z_SYNC_FLUSH is what cURL does.
const zlibOptions = {
flush: zlib.Z_SYNC_FLUSH,
finishFlush: zlib.Z_SYNC_FLUSH
};
// for gzip
if (codings == 'gzip' || codings == 'x-gzip') {
body = body.pipe(zlib.createGunzip(zlibOptions));
response = new Response$1(body, response_options);
resolve(response);
return;
}
// for deflate
if (codings == 'deflate' || codings == 'x-deflate') {
// handle the infamous raw deflate response from old servers
// a hack for old IIS and Apache servers
const raw = res.pipe(new PassThrough$1$1());
raw.once('data', function (chunk) {
// see http://stackoverflow.com/questions/37519828
if ((chunk[0] & 0x0F) === 0x08) {
body = body.pipe(zlib.createInflate());
} else {
body = body.pipe(zlib.createInflateRaw());
}
response = new Response$1(body, response_options);
resolve(response);
});
raw.on('end', function () {
// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.
if (!response) {
response = new Response$1(body, response_options);
resolve(response);
}
});
return;
}
// for br
if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
body = body.pipe(zlib.createBrotliDecompress());
response = new Response$1(body, response_options);
resolve(response);
return;
}
// otherwise, use response as-is
response = new Response$1(body, response_options);
resolve(response);
});
writeToStream$1(req, request);
});
}
function fixResponseChunkedTransferBadEnding$1(request, errorCallback) {
let socket;
request.on('socket', function (s) {
socket = s;
});
request.on('response', function (response) {
const headers = response.headers;
if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {
response.once('close', function (hadError) {
// tests for socket presence, as in some situations the
// the 'socket' event is not triggered for the request
// (happens in deno), avoids `TypeError`
// if a data listener is still present we didn't end cleanly
const hasDataListener = socket && socket.listenerCount('data') > 0;
if (hasDataListener && !hadError) {
const err = new Error('Premature close');
err.code = 'ERR_STREAM_PREMATURE_CLOSE';
errorCallback(err);
}
});
}
});
}
function destroyStream$1(stream, err) {
if (stream.destroy) {
stream.destroy(err);
} else {
// node < 8
stream.emit('error', err);
stream.end();
}
}
/**
* Redirect code matching
*
* @param Number code Status code
* @return Boolean
*/
fetch$2.isRedirect = function (code) {
return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
};
// expose Promise
fetch$2.Promise = global.Promise;
var lib$1 = {
__proto__: null,
'default': fetch$2,
Headers: Headers$1,
Request: Request$1,
Response: Response$1,
FetchError: FetchError$1,
AbortError: AbortError$1
};
function serializeHeaders(headers) {
return headers.raw();
}
function deserializeHeaders(fetch, old = {}) {
const headers = new fetch.Headers();
for (const name in old) {
for (const value of old[name]) {
headers.append(name, value);
}
}
return headers;
}
function serializeRequest(request) {
return [request.url, {
method: request.method,
headers: request.headers,
body: request.body,
mode: request.mode,
credentials: request.credentials,
cache: request.cache,
redirect: request.redirect,
referrer: request.referrer,
referrerPolicy: request.referrerPolicy,
integrity: request.integrity,
keepalive: request.keepalive,
// signal: request.signal,
// node-fetch props
follow: request.follow,
timeout: request.timeout,
compress: request.compress,
size: request.size
// agent: request.agent
}];
}
function deserializeRequest(fetch, resource, init) {
return new fetch.Request(resource, {
...init,
body: init.body ? Buffer.from(init.body, 'base64') : undefined,
headers: deserializeHeaders(fetch, init.headers)
});
}
function serializeResponse(response) {
return {
url: response.url,
headers: response.headers.raw(),
status: response.status,
statusText: response.statusText,
counter: response.redirected ? 1 : 0 // could be more than one, but no way of telling
};
}
function deserializeResponse(fetch, body, init, bodyError) {
const buffer = Buffer.from(body, 'base64');
return new fetch.Response(body ? createStream(buffer) : createStream(null), {
...init,
headers: deserializeHeaders(fetch, init.headers)
}, {
buffer,
bodyError
});
}
const errors = {
TypeError
};
function serializeError({
constructor,
message,
type,
code
}) {
return [constructor.name, [message, type, {
code
}]];
}
function deserializeError(fetch, name, init) {
if (name in errors) {
return new errors[name](...init);
} else {
return new fetch.FetchError(...init);
}
}
function parseBodyType(body) {
if (body == null) {
return 'Null';
} else if (body.constructor.name === 'URLSearchParams') {
return 'URLSearchParams';
} else if (Buffer.isBuffer(body)) {
return 'Buffer';
} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
return 'ArrayBuffer';
} else if (ArrayBuffer.isView(body)) {
return 'ArrayBufferView';
} else if (body instanceof Stream) {
return 'Stream';
} else {
return 'String';
}
}
function parseBody(body, type = parseBodyType(body)) {
switch (type) {
case 'Null':
return null;
case 'URLSearchParams':
return Buffer.from(body.toString());
case 'Buffer':
return body;
case 'ArrayBuffer':
return Buffer.from(body);
case 'ArrayBufferView':
return Buffer.from(body.buffer, body.byteOffset, body.byteLength);
case 'String':
return Buffer.from(String(body));
default:
throw new TypeError(`sync-fetch does not support bodies of type: ${type}`);
}
}
function createStream(buffer) {
return new Stream.Transform({
read() {
this.push(buffer);
this.push(null);
}
});
}
var shared = {
serializeHeaders,
deserializeHeaders,
serializeRequest,
deserializeRequest,
serializeResponse,
deserializeResponse,
serializeError,
deserializeError,
parseBodyType,
parseBody,
createStream
};
const exec = require$$0.execFileSync;
const {
URL: URL$2
} = Url;
function fetch$1(resource, init) {
const request = [];
if (resource instanceof fetch$1.Request) {
request.push(...shared.serializeRequest(resource));
} else if (resource instanceof URL$2) {
request.push(resource.href, {});
} else {
request.push(resource, {});
}
Object.assign(request[1], init);
request[1].headers = new lib$1.Headers(request[1].headers);
if (request[1].body) {
const contentType = extractContentType$1(request);
if (contentType && !request[1].headers.get('content-type')) {
request[1].headers.append('content-type', contentType);
}
request[1].body = shared.parseBody(init.body).toString('base64');
}
request[1].headers = shared.serializeHeaders(request[1].headers);
// TODO credentials
const response = JSON.parse(sendMessage(request));
if ('headers' in response[1]) {
return shared.deserializeResponse(fetch$1, ...response);
} else {
throw shared.deserializeError(fetch$1, ...response);
}
}
function sendMessage(message) {
return exec(process.execPath, [path.join(__dirname, 'worker.js')], {
windowsHide: true,
maxBuffer: Infinity,
input: JSON.stringify(message),
shell: false
}).toString();
}
function extractContentType$1(input) {
const request = new lib$1.Request(...input);
return request.headers.get('content-type') || undefined;
}
const _body = Symbol('bodyBuffer');
const _bodyError = Symbol('bodyError');
class SyncRequest extends lib$1.Request {
constructor(resource, init = {}) {
const buffer = shared.parseBody(init.body);
super(resource, init);
defineBuffer(this, buffer);
}
clone() {
checkBody(this);
return new SyncRequest(...shared.serializeRequest(this));
}
}
class SyncResponse extends lib$1.Response {
constructor(body, init, options = {}) {
const {
buffer = shared.parseBody(body),
bodyError
} = options;
super(body, init);
defineBuffer(this, buffer);
if (bodyError) defineBodyError(this, bodyError);
}
clone() {
checkBody(this);
const buffer = Buffer.from(this[_body]);
return new SyncResponse(shared.createStream(buffer), shared.serializeResponse(this), {
buffer,
bodyError: this[_bodyError]
});
}
}
class Body$1 {
static mixin(proto) {
for (const name of Object.getOwnPropertyNames(Body$1.prototype)) {
if (name === 'constructor') {
continue;
}
const desc = Object.getOwnPropertyDescriptor(Body$1.prototype, name);
Object.defineProperty(proto, name, {
...desc,
enumerable: true
});
}
}
arrayBuffer() {
checkBody(this);
const buf = consumeBody$1(this);
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
}
text() {
checkBody(this);
return consumeBody$1(this).toString();
}
json() {
checkBody(this);
try {
return JSON.parse(consumeBody$1(this).toString());
} catch (err) {
throw new fetch$1.FetchError(`invalid json response body at ${this.url} reason: ${err.message}`, 'invalid-json');
}
}
buffer() {
checkBody(this);
return Buffer.from(consumeBody$1(this));
}
textConverted() {
throw new fetch$1.FetchError('textConverted not implemented');
}
}
function _super(self, method) {
return Object.getPrototypeOf(Object.getPrototypeOf(self))[method].bind(self);
}
function checkBody(body) {
if (body[_bodyError]) {
throw body[_bodyError];
}
if (body.bodyUsed) {
throw new TypeError(`body used already for: ${body.url}`);
}
}
function consumeBody$1(body) {
_super(body, 'buffer')().catch(error => console.error(error));
return body[_body] || Buffer.alloc(0);
}
function defineBuffer(body, buffer) {
Object.defineProperty(body, _body, {
value: buffer,
enumerable: false
});
}
function defineBodyError(body, error) {
Object.defineProperty(body, _bodyError, {
value: shared.deserializeError(fetch$1, ...error),
enumerable: false
});
}
Body$1.mixin(SyncRequest.prototype);
Body$1.mixin(SyncResponse.prototype);
Object.defineProperties(SyncRequest.prototype, {
clone: {
enumerable: true
}
});
Object.defineProperties(SyncResponse.prototype, {
clone: {
enumerable: true
}
});
fetch$1.Headers = lib$1.Headers;
fetch$1.FetchError = lib$1.FetchError;
fetch$1.Request = SyncRequest;
fetch$1.Response = SyncResponse;
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
// fix for "Readable" isn't a named export issue
const Readable = Stream.Readable;
const BUFFER = Symbol('buffer');
const TYPE$1 = Symbol('type');
class Blob {
constructor() {
this[TYPE$1] = '';
const blobParts = arguments[0];
const options = arguments[1];
const buffers = [];
if (blobParts) {
const a = blobParts;
const length = Number(a.length);
for (let i = 0; i < length; i++) {
const element = a[i];
let buffer;
if (element instanceof Buffer) {
buffer = element;
} else if (ArrayBuffer.isView(element)) {
buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
} else if (element instanceof ArrayBuffer) {
buffer = Buffer.from(element);
} else if (element instanceof Blob) {
buffer = element[BUFFER];
} else {
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
}
buffers.push(buffer);
}
}
this[BUFFER] = Buffer.concat(buffers);
let type = options && options.type !== undefined && String(options.type).toLowerCase();
if (type && !/[^\u0020-\u007E]/.test(type)) {
this[TYPE$1] = type;
}
}
get size() {
return this[BUFFER].length;
}
get type() {
return this[TYPE$1];
}
text() {
return Promise.resolve(this[BUFFER].toString());
}
arrayBuffer() {
const buf = this[BUFFER];
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
return Promise.resolve(ab);
}
stream() {
const readable = new Readable();
readable._read = function () {};
readable.push(this[BUFFER]);
readable.push(null);
return readable;
}
toString() {
return '[object Blob]';
}
slice() {
const size = this.size;
const start = arguments[0];
const end = arguments[1];
let relativeStart, relativeEnd;
if (start === undefined) {
relativeStart = 0;
} else if (start < 0) {
relativeStart = Math.max(size + start, 0);
} else {
relativeStart = Math.min(start, size);
}
if (end === undefined) {
relativeEnd = size;
} else if (end < 0) {
relativeEnd = Math.max(size + end, 0);
} else {
relativeEnd = Math.min(end, size);
}
const span = Math.max(relativeEnd - relativeStart, 0);
const buffer = this[BUFFER];
const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
const blob = new Blob([], {
type: arguments[2]
});
blob[BUFFER] = slicedBuffer;
return blob;
}
}
Object.defineProperties(Blob.prototype, {
size: {
enumerable: true
},
type: {
enumerable: true
},
slice: {
enumerable: true
}
});
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
value: 'Blob',
writable: false,
enumerable: false,
configurable: true
});
/**
* fetch-error.js
*
* FetchError interface for operational errors
*/
/**
* Create FetchError instance
*
* @param String message Error message for human
* @param String type Error type for machine
* @param String systemError For Node.js system error
* @return FetchError
*/
function FetchError(message, type, systemError) {
Error.call(this, message);
this.message = message;
this.type = type;
// when err.type is `system`, err.code contains system error code
if (systemError) {
this.code = this.errno = systemError.code;
}
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
FetchError.prototype = Object.create(Error.prototype);
FetchError.prototype.constructor = FetchError;
FetchError.prototype.name = 'FetchError';
let convert;
try {
convert = require('encoding').convert;
} catch (e) {}
const INTERNALS = Symbol('Body internals');
// fix an issue where "PassThrough" isn't a named export for node <10
const PassThrough = Stream.PassThrough;
/**
* Body mixin
*
* Ref: https://fetch.spec.whatwg.org/#body
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
function Body(body) {
var _this = this;
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$size = _ref.size;
let size = _ref$size === undefined ? 0 : _ref$size;
var _ref$timeout = _ref.timeout;
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
if (body == null) {
// body is undefined or null
body = null;
} else if (isURLSearchParams(body)) {
// body is a URLSearchParams
body = Buffer.from(body.toString());
} else if (isBlob(body)) ;else if (Buffer.isBuffer(body)) ;else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
// body is ArrayBuffer
body = Buffer.from(body);
} else if (ArrayBuffer.isView(body)) {
// body is ArrayBufferView
body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
} else if (body instanceof Stream) ;else {
// none of the above
// coerce to string then buffer
body = Buffer.from(String(body));
}
this[INTERNALS] = {
body,
disturbed: false,
error: null
};
this.size = size;
this.timeout = timeout;
if (body instanceof Stream) {
body.on('error', function (err) {
const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
_this[INTERNALS].error = error;
});
}
}
Body.prototype = {
get body() {
return this[INTERNALS].body;
},
get bodyUsed() {
return this[INTERNALS].disturbed;
},
/**
* Decode response as ArrayBuffer
*
* @return Promise
*/
arrayBuffer() {
return consumeBody.call(this).then(function (buf) {
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
});
},
/**
* Return raw response as Blob
*
* @return Promise
*/
blob() {
let ct = this.headers && this.headers.get('content-type') || '';
return consumeBody.call(this).then(function (buf) {
return Object.assign(
// Prevent copying
new Blob([], {
type: ct.toLowerCase()
}), {
[BUFFER]: buf
});
});
},
/**
* Decode response as json
*
* @return Promise
*/
json() {
var _this2 = this;
return consumeBody.call(this).then(function (buffer) {
try {
return JSON.parse(buffer.toString());
} catch (err) {
return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
}
});
},
/**
* Decode response as text
*
* @return Promise
*/
text() {
return consumeBody.call(this).then(function (buffer) {
return buffer.toString();
});
},
/**
* Decode response as buffer (non-spec api)
*
* @return Promise
*/
buffer() {
return consumeBody.call(this);
},
/**
* Decode response as text, while automatically detecting the encoding and
* trying to decode to UTF-8 (non-spec api)
*
* @return Promise
*/
textConverted() {
var _this3 = this;
return consumeBody.call(this).then(function (buffer) {
return convertBody(buffer, _this3.headers);
});
}
};
// In browsers, all properties are enumerable.
Object.defineProperties(Body.prototype, {
body: {
enumerable: true
},
bodyUsed: {
enumerable: true
},
arrayBuffer: {
enumerable: true
},
blob: {
enumerable: true
},
json: {
enumerable: true
},
text: {
enumerable: true
}
});
Body.mixIn = function (proto) {
for (const name of Object.getOwnPropertyNames(Body.prototype)) {
// istanbul ignore else: future proof
if (!(name in proto)) {
const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
Object.defineProperty(proto, name, desc);
}
}
};
/**
* Consume and convert an entire Body to a Buffer.
*
* Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
*
* @return Promise
*/
function consumeBody() {
var _this4 = this;
if (this[INTERNALS].disturbed) {
return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
}
this[INTERNALS].disturbed = true;
if (this[INTERNALS].error) {
return Body.Promise.reject(this[INTERNALS].error);
}
let body = this.body;
// body is null
if (body === null) {
return Body.Promise.resolve(Buffer.alloc(0));
}
// body is blob
if (isBlob(body)) {
body = body.stream();
}
// body is buffer
if (Buffer.isBuffer(body)) {
return Body.Promise.resolve(body);
}
// istanbul ignore if: should never happen
if (!(body instanceof Stream)) {
return Body.Promise.resolve(Buffer.alloc(0));
}
// body is stream
// get ready to actually consume the body
let accum = [];
let accumBytes = 0;
let abort = false;
return new Body.Promise(function (resolve, reject) {
let resTimeout;
// allow timeout on slow response body
if (_this4.timeout) {
resTimeout = setTimeout(function () {
abort = true;
reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
}, _this4.timeout);
}
// handle stream errors
body.on('error', function (err) {
if (err.name === 'AbortError') {
// if the request was aborted, reject with this Error
abort = true;
reject(err);
} else {
// other errors, such as incorrect content-encoding
reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
}
});
body.on('data', function (chunk) {
if (abort || chunk === null) {
return;
}
if (_this4.size && accumBytes + chunk.length > _this4.size) {
abort = true;
reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
return;
}
accumBytes += chunk.length;
accum.push(chunk);
});
body.on('end', function () {
if (abort) {
return;
}
clearTimeout(resTimeout);
try {
resolve(Buffer.concat(accum, accumBytes));
} catch (err) {
// handle streams that have accumulated too much data (issue #414)
reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
}
});
});
}
/**
* Detect buffer encoding and convert to target encoding
* ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
*
* @param Buffer buffer Incoming buffer
* @param String encoding Target encoding
* @return String
*/
function convertBody(buffer, headers) {
if (typeof convert !== 'function') {
throw new Error('The package `encoding` must be installed to use the textConverted() function');
}
const ct = headers.get('content-type');
let charset = 'utf-8';
let res, str;
// header
if (ct) {
res = /charset=([^;]*)/i.exec(ct);
}
// no charset in content type, peek at response body for at most 1024 bytes
str = buffer.slice(0, 1024).toString();
// html5
if (!res && str) {
res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
}
// html4
if (!res && str) {
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
if (!res) {
res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
if (res) {
res.pop(); // drop last quote
}
}
if (res) {
res = /charset=(.*)/i.exec(res.pop());
}
}
// xml
if (!res && str) {
res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
}
// found charset
if (res) {
charset = res.pop();
// prevent decode issues when sites use incorrect encoding
// ref: https://hsivonen.fi/encoding-menu/
if (charset === 'gb2312' || charset === 'gbk') {
charset = 'gb18030';
}
}
// turn raw buffers into a single utf-8 buffer
return convert(buffer, 'UTF-8', charset).toString();
}
/**
* Detect a URLSearchParams object
* ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
*
* @param Object obj Object to detect by type or brand
* @return String
*/
function isURLSearchParams(obj) {
// Duck-typing as a necessary condition.
if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
return false;
}
// Brand-checking and more duck-typing as optional condition.
return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
}
/**
* Check if `obj` is a W3C `Blob` object (which `File` inherits from)
* @param {*} obj
* @return {boolean}
*/
function isBlob(obj) {
return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
}
/**
* Clone body given Res/Req instance
*
* @param Mixed instance Response or Request instance
* @return Mixed
*/
function clone$1(instance) {
let p1, p2;
let body = instance.body;
// don't allow cloning a used body
if (instance.bodyUsed) {
throw new Error('cannot clone body after it is used');
}
// check that body is a stream and not form-data object
// note: we can't clone the form-data object without having it as a dependency
if (body instanceof Stream && typeof body.getBoundary !== 'function') {
// tee instance body
p1 = new PassThrough();
p2 = new PassThrough();
body.pipe(p1);
body.pipe(p2);
// set instance body to teed body and return the other teed body
instance[INTERNALS].body = p1;
body = p2;
}
return body;
}
/**
* Performs the operation "extract a `Content-Type` value from |object|" as
* specified in the specification:
* https://fetch.spec.whatwg.org/#concept-bodyinit-extract
*
* This function assumes that instance.body is present.
*
* @param Mixed instance Any options.body input
*/
function extractContentType(body) {
if (body === null) {
// body is null
return null;
} else if (typeof body === 'string') {
// body is string
return 'text/plain;charset=UTF-8';
} else if (isURLSearchParams(body)) {
// body is a URLSearchParams
return 'application/x-www-form-urlencoded;charset=UTF-8';
} else if (isBlob(body)) {
// body is blob
return body.type || null;
} else if (Buffer.isBuffer(body)) {
// body is buffer
return null;
} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
// body is ArrayBuffer
return null;
} else if (ArrayBuffer.isView(body)) {
// body is ArrayBufferView
return null;
} else if (typeof body.getBoundary === 'function') {
// detect form data input from form-data module
return `multipart/form-data;boundary=${body.getBoundary()}`;
} else if (body instanceof Stream) {
// body is stream
// can't really do much about this
return null;
} else {
// Body constructor defaults other things to string
return 'text/plain;charset=UTF-8';
}
}
/**
* The Fetch Standard treats this as if "total bytes" is a property on the body.
* For us, we have to explicitly get it with a function.
*
* ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
*
* @param Body instance Instance of Body
* @return Number? Number of bytes, or null if not possible
*/
function getTotalBytes(instance) {
const body = instance.body;
if (body === null) {
// body is null
return 0;
} else if (isBlob(body)) {
return body.size;
} else if (Buffer.isBuffer(body)) {
// body is buffer
return body.length;
} else if (body && typeof body.getLengthSync === 'function') {
// detect form data input from form-data module
if (body._lengthRetrievers && body._lengthRetrievers.length == 0 ||
// 1.x
body.hasKnownLength && body.hasKnownLength()) {
// 2.x
return body.getLengthSync();
}
return null;
} else {
// body is stream
return null;
}
}
/**
* Write a Body to a Node.js WritableStream (e.g. http.Request) object.
*
* @param Body instance Instance of Body
* @return Void
*/
function writeToStream(dest, instance) {
const body = instance.body;
if (body === null) {
// body is null
dest.end();
} else if (isBlob(body)) {
body.stream().pipe(dest);
} else if (Buffer.isBuffer(body)) {
// body is buffer
dest.write(body);
dest.end();
} else {
// body is stream
body.pipe(dest);
}
}
// expose Promise
Body.Promise = global.Promise;
/**
* headers.js
*
* Headers class offers convenient helpers
*/
const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
function validateName(name) {
name = `${name}`;
if (invalidTokenRegex.test(name) || name === '') {
throw new TypeError(`${name} is not a legal HTTP header name`);
}
}
function validateValue(value) {
value = `${value}`;
if (invalidHeaderCharRegex.test(value)) {
throw new TypeError(`${value} is not a legal HTTP header value`);
}
}
/**
* Find the key in the map object given a header name.
*
* Returns undefined if not found.
*
* @param String name Header name
* @return String|Undefined
*/
function find(map, name) {
name = name.toLowerCase();
for (const key in map) {
if (key.toLowerCase() === name) {
return key;
}
}
return undefined;
}
const MAP = Symbol('map');
class Headers {
/**
* Headers class
*
* @param Object headers Response headers
* @return Void
*/
constructor() {
let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
this[MAP] = Object.create(null);
if (init instanceof Headers) {
const rawHeaders = init.raw();
const headerNames = Object.keys(rawHeaders);
for (const headerName of headerNames) {
for (const value of rawHeaders[headerName]) {
this.append(headerName, value);
}
}
return;
}
// We don't worry about converting prop to ByteString here as append()
// will handle it.
if (init == null) ;else if (typeof init === 'object') {
const method = init[Symbol.iterator];
if (method != null) {
if (typeof method !== 'function') {
throw new TypeError('Header pairs must be iterable');
}
// sequence<sequence<ByteString>>
// Note: per spec we have to first exhaust the lists then process them
const pairs = [];
for (const pair of init) {
if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
throw new TypeError('Each header pair must be iterable');
}
pairs.push(Array.from(pair));
}
for (const pair of pairs) {
if (pair.length !== 2) {
throw new TypeError('Each header pair must be a name/value tuple');
}
this.append(pair[0], pair[1]);
}
} else {
// record<ByteString, ByteString>
for (const key of Object.keys(init)) {
const value = init[key];
this.append(key, value);
}
}
} else {
throw new TypeError('Provided initializer must be an object');
}
}
/**
* Return combined header value given name
*
* @param String name Header name
* @return Mixed
*/
get(name) {
name = `${name}`;
validateName(name);
const key = find(this[MAP], name);
if (key === undefined) {
return null;
}
return this[MAP][key].join(', ');
}
/**
* Iterate over all headers
*
* @param Function callback Executed for each item with parameters (value, name, thisArg)
* @param Boolean thisArg `this` context for callback function
* @return Void
*/
forEach(callback) {
let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
let pairs = getHeaders(this);
let i = 0;
while (i < pairs.length) {
var _pairs$i = pairs[i];
const name = _pairs$i[0],
value = _pairs$i[1];
callback.call(thisArg, value, name, this);
pairs = getHeaders(this);
i++;
}
}
/**
* Overwrite header values given name
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
set(name, value) {
name = `${name}`;
value = `${value}`;
validateName(name);
validateValue(value);
const key = find(this[MAP], name);
this[MAP][key !== undefined ? key : name] = [value];
}
/**
* Append a value onto existing header
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
append(name, value) {
name = `${name}`;
value = `${value}`;
validateName(name);
validateValue(value);
const key = find(this[MAP], name);
if (key !== undefined) {
this[MAP][key].push(value);
} else {
this[MAP][name] = [value];
}
}
/**
* Check for header name existence
*
* @param String name Header name
* @return Boolean
*/
has(name) {
name = `${name}`;
validateName(name);
return find(this[MAP], name) !== undefined;
}
/**
* Delete all header values given name
*
* @param String name Header name
* @return Void
*/
delete(name) {
name = `${name}`;
validateName(name);
const key = find(this[MAP], name);
if (key !== undefined) {
delete this[MAP][key];
}
}
/**
* Return raw headers (non-spec api)
*
* @return Object
*/
raw() {
return this[MAP];
}
/**
* Get an iterator on keys.
*
* @return Iterator
*/
keys() {
return createHeadersIterator(this, 'key');
}
/**
* Get an iterator on values.
*
* @return Iterator
*/
values() {
return createHeadersIterator(this, 'value');
}
/**
* Get an iterator on entries.
*
* This is the default iterator of the Headers object.
*
* @return Iterator
*/
[Symbol.iterator]() {
return createHeadersIterator(this, 'key+value');
}
}
Headers.prototype.entries = Headers.prototype[Symbol.iterator];
Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
value: 'Headers',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Headers.prototype, {
get: {
enumerable: true
},
forEach: {
enumerable: true
},
set: {
enumerable: true
},
append: {
enumerable: true
},
has: {
enumerable: true
},
delete: {
enumerable: true
},
keys: {
enumerable: true
},
values: {
enumerable: true
},
entries: {
enumerable: true
}
});
function getHeaders(headers) {
let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
const keys = Object.keys(headers[MAP]).sort();
return keys.map(kind === 'key' ? function (k) {
return k.toLowerCase();
} : kind === 'value' ? function (k) {
return headers[MAP][k].join(', ');
} : function (k) {
return [k.toLowerCase(), headers[MAP][k].join(', ')];
});
}
const INTERNAL = Symbol('internal');
function createHeadersIterator(target, kind) {
const iterator = Object.create(HeadersIteratorPrototype);
iterator[INTERNAL] = {
target,
kind,
index: 0
};
return iterator;
}
const HeadersIteratorPrototype = Object.setPrototypeOf({
next() {
// istanbul ignore if
if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
throw new TypeError('Value of `this` is not a HeadersIterator');
}
var _INTERNAL = this[INTERNAL];
const target = _INTERNAL.target,
kind = _INTERNAL.kind,
index = _INTERNAL.index;
const values = getHeaders(target, kind);
const len = values.length;
if (index >= len) {
return {
value: undefined,
done: true
};
}
this[INTERNAL].index = index + 1;
return {
value: values[index],
done: false
};
}
}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
value: 'HeadersIterator',
writable: false,
enumerable: false,
configurable: true
});
/**
* Export the Headers object in a form that Node.js can consume.
*
* @param Headers headers
* @return Object
*/
function exportNodeCompatibleHeaders(headers) {
const obj = Object.assign({
__proto__: null
}, headers[MAP]);
// http.request() only supports string as Host header. This hack makes
// specifying custom Host header possible.
const hostHeaderKey = find(headers[MAP], 'Host');
if (hostHeaderKey !== undefined) {
obj[hostHeaderKey] = obj[hostHeaderKey][0];
}
return obj;
}
/**
* Create a Headers object from an object of headers, ignoring those that do
* not conform to HTTP grammar productions.
*
* @param Object obj Object of headers
* @return Headers
*/
function createHeadersLenient(obj) {
const headers = new Headers();
for (const name of Object.keys(obj)) {
if (invalidTokenRegex.test(name)) {
continue;
}
if (Array.isArray(obj[name])) {
for (const val of obj[name]) {
if (invalidHeaderCharRegex.test(val)) {
continue;
}
if (headers[MAP][name] === undefined) {
headers[MAP][name] = [val];
} else {
headers[MAP][name].push(val);
}
}
} else if (!invalidHeaderCharRegex.test(obj[name])) {
headers[MAP][name] = [obj[name]];
}
}
return headers;
}
const INTERNALS$1 = Symbol('Response internals');
// fix an issue where "STATUS_CODES" aren't a named export for node <10
const STATUS_CODES = http.STATUS_CODES;
/**
* Response class
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
class Response {
constructor() {
let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
Body.call(this, body, opts);
const status = opts.status || 200;
const headers = new Headers(opts.headers);
if (body != null && !headers.has('Content-Type')) {
const contentType = extractContentType(body);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
this[INTERNALS$1] = {
url: opts.url,
status,
statusText: opts.statusText || STATUS_CODES[status],
headers,
counter: opts.counter
};
}
get url() {
return this[INTERNALS$1].url || '';
}
get status() {
return this[INTERNALS$1].status;
}
/**
* Convenience property representing if the request ended normally
*/
get ok() {
return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
}
get redirected() {
return this[INTERNALS$1].counter > 0;
}
get statusText() {
return this[INTERNALS$1].statusText;
}
get headers() {
return this[INTERNALS$1].headers;
}
/**
* Clone this response
*
* @return Response
*/
clone() {
return new Response(clone$1(this), {
url: this.url,
status: this.status,
statusText: this.statusText,
headers: this.headers,
ok: this.ok,
redirected: this.redirected
});
}
}
Body.mixIn(Response.prototype);
Object.defineProperties(Response.prototype, {
url: {
enumerable: true
},
status: {
enumerable: true
},
ok: {
enumerable: true
},
redirected: {
enumerable: true
},
statusText: {
enumerable: true
},
headers: {
enumerable: true
},
clone: {
enumerable: true
}
});
Object.defineProperty(Response.prototype, Symbol.toStringTag, {
value: 'Response',
writable: false,
enumerable: false,
configurable: true
});
const INTERNALS$2 = Symbol('Request internals');
const URL = Url.URL || publicApi.URL;
// fix an issue where "format", "parse" aren't a named export for node <10
const parse_url = Url.parse;
const format_url = Url.format;
/**
* Wrapper around `new URL` to handle arbitrary URLs
*
* @param {string} urlStr
* @return {void}
*/
function parseURL(urlStr) {
/*
Check whether the URL is absolute or not
Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
*/
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
urlStr = new URL(urlStr).toString();
}
// Fallback to old implementation for arbitrary URLs
return parse_url(urlStr);
}
const streamDestructionSupported = ('destroy' in Stream.Readable.prototype);
/**
* Check if a value is an instance of Request.
*
* @param Mixed input
* @return Boolean
*/
function isRequest(input) {
return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
}
function isAbortSignal(signal) {
const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
return !!(proto && proto.constructor.name === 'AbortSignal');
}
/**
* Request class
*
* @param Mixed input Url or Request instance
* @param Object init Custom options
* @return Void
*/
class Request {
constructor(input) {
let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
let parsedURL;
// normalize input
if (!isRequest(input)) {
if (input && input.href) {
// in order to support Node.js' Url objects; though WHATWG's URL objects
// will fall into this branch also (since their `toString()` will return
// `href` property anyway)
parsedURL = parseURL(input.href);
} else {
// coerce input to a string before attempting to parse
parsedURL = parseURL(`${input}`);
}
input = {};
} else {
parsedURL = parseURL(input.url);
}
let method = init.method || input.method || 'GET';
method = method.toUpperCase();
if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
throw new TypeError('Request with GET/HEAD method cannot have body');
}
let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone$1(input) : null;
Body.call(this, inputBody, {
timeout: init.timeout || input.timeout || 0,
size: init.size || input.size || 0
});
const headers = new Headers(init.headers || input.headers || {});
if (inputBody != null && !headers.has('Content-Type')) {
const contentType = extractContentType(inputBody);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
let signal = isRequest(input) ? input.signal : null;
if ('signal' in init) signal = init.signal;
if (signal != null && !isAbortSignal(signal)) {
throw new TypeError('Expected signal to be an instanceof AbortSignal');
}
this[INTERNALS$2] = {
method,
redirect: init.redirect || input.redirect || 'follow',
headers,
parsedURL,
signal
};
// node-fetch-only options
this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
this.counter = init.counter || input.counter || 0;
this.agent = init.agent || input.agent;
}
get method() {
return this[INTERNALS$2].method;
}
get url() {
return format_url(this[INTERNALS$2].parsedURL);
}
get headers() {
return this[INTERNALS$2].headers;
}
get redirect() {
return this[INTERNALS$2].redirect;
}
get signal() {
return this[INTERNALS$2].signal;
}
/**
* Clone this request
*
* @return Request
*/
clone() {
return new Request(this);
}
}
Body.mixIn(Request.prototype);
Object.defineProperty(Request.prototype, Symbol.toStringTag, {
value: 'Request',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Request.prototype, {
method: {
enumerable: true
},
url: {
enumerable: true
},
headers: {
enumerable: true
},
redirect: {
enumerable: true
},
clone: {
enumerable: true
},
signal: {
enumerable: true
}
});
/**
* Convert a Request to Node.js http request options.
*
* @param Request A Request instance
* @return Object The options object to be passed to http.request
*/
function getNodeRequestOptions(request) {
const parsedURL = request[INTERNALS$2].parsedURL;
const headers = new Headers(request[INTERNALS$2].headers);
// fetch step 1.3
if (!headers.has('Accept')) {
headers.set('Accept', '*/*');
}
// Basic fetch
if (!parsedURL.protocol || !parsedURL.hostname) {
throw new TypeError('Only absolute URLs are supported');
}
if (!/^https?:$/.test(parsedURL.protocol)) {
throw new TypeError('Only HTTP(S) protocols are supported');
}
if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
}
// HTTP-network-or-cache fetch steps 2.4-2.7
let contentLengthValue = null;
if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
contentLengthValue = '0';
}
if (request.body != null) {
const totalBytes = getTotalBytes(request);
if (typeof totalBytes === 'number') {
contentLengthValue = String(totalBytes);
}
}
if (contentLengthValue) {
headers.set('Content-Length', contentLengthValue);
}
// HTTP-network-or-cache fetch step 2.11
if (!headers.has('User-Agent')) {
headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
}
// HTTP-network-or-cache fetch step 2.15
if (request.compress && !headers.has('Accept-Encoding')) {
headers.set('Accept-Encoding', 'gzip,deflate');
}
let agent = request.agent;
if (typeof agent === 'function') {
agent = agent(parsedURL);
}
// HTTP-network fetch step 4.2
// chunked encoding is handled by Node.js
return Object.assign({}, parsedURL, {
method: request.method,
headers: exportNodeCompatibleHeaders(headers),
agent
});
}
/**
* abort-error.js
*
* AbortError interface for cancelled requests
*/
/**
* Create AbortError instance
*
* @param String message Error message for human
* @return AbortError
*/
function AbortError(message) {
Error.call(this, message);
this.type = 'aborted';
this.message = message;
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
AbortError.prototype = Object.create(Error.prototype);
AbortError.prototype.constructor = AbortError;
AbortError.prototype.name = 'AbortError';
const URL$1 = Url.URL || publicApi.URL;
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1 = Stream.PassThrough;
const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
const orig = new URL$1(original).hostname;
const dest = new URL$1(destination).hostname;
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
};
/**
* isSameProtocol reports whether the two provided URLs use the same protocol.
*
* Both domains must already be in canonical form.
* @param {string|URL} original
* @param {string|URL} destination
*/
const isSameProtocol = function isSameProtocol(destination, original) {
const orig = new URL$1(original).protocol;
const dest = new URL$1(destination).protocol;
return orig === dest;
};
/**
* Fetch function
*
* @param Mixed url Absolute url or Request instance
* @param Object opts Fetch options
* @return Promise
*/
function fetch(url, opts) {
// allow custom promise
if (!fetch.Promise) {
throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
}
Body.Promise = fetch.Promise;
// wrap http.request into fetch
return new fetch.Promise(function (resolve, reject) {
// build request object
const request = new Request(url, opts);
const options = getNodeRequestOptions(request);
const send = (options.protocol === 'https:' ? https : http).request;
const signal = request.signal;
let response = null;
const abort = function abort() {
let error = new AbortError('The user aborted a request.');
reject(error);
if (request.body && request.body instanceof Stream.Readable) {
destroyStream(request.body, error);
}
if (!response || !response.body) return;
response.body.emit('error', error);
};
if (signal && signal.aborted) {
abort();
return;
}
const abortAndFinalize = function abortAndFinalize() {
abort();
finalize();
};
// send request
const req = send(options);
let reqTimeout;
if (signal) {
signal.addEventListener('abort', abortAndFinalize);
}
function finalize() {
req.abort();
if (signal) signal.removeEventListener('abort', abortAndFinalize);
clearTimeout(reqTimeout);
}
if (request.timeout) {
req.once('socket', function (socket) {
reqTimeout = setTimeout(function () {
reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
finalize();
}, request.timeout);
});
}
req.on('error', function (err) {
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
if (response && response.body) {
destroyStream(response.body, err);
}
finalize();
});
fixResponseChunkedTransferBadEnding(req, function (err) {
if (signal && signal.aborted) {
return;
}
if (response && response.body) {
destroyStream(response.body, err);
}
});
/* c8 ignore next 18 */
if (parseInt(process.version.substring(1)) < 14) {
// Before Node.js 14, pipeline() does not fully support async iterators and does not always
// properly handle when the socket close/end events are out of order.
req.on('socket', function (s) {
s.addListener('close', function (hadError) {
// if a data listener is still present we didn't end cleanly
const hasDataListener = s.listenerCount('data') > 0;
// if end happened before close but the socket didn't emit an error, do it now
if (response && hasDataListener && !hadError && !(signal && signal.aborted)) {
const err = new Error('Premature close');
err.code = 'ERR_STREAM_PREMATURE_CLOSE';
response.body.emit('error', err);
}
});
});
}
req.on('response', function (res) {
clearTimeout(reqTimeout);
const headers = createHeadersLenient(res.headers);
// HTTP fetch step 5
if (fetch.isRedirect(res.statusCode)) {
// HTTP fetch step 5.2
const location = headers.get('Location');
// HTTP fetch step 5.3
let locationURL = null;
try {
locationURL = location === null ? null : new URL$1(location, request.url).toString();
} catch (err) {
// error here can only be invalid URL in Location: header
// do not throw when options.redirect == manual
// let the user extract the errorneous redirect URL
if (request.redirect !== 'manual') {
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
finalize();
return;
}
}
// HTTP fetch step 5.5
switch (request.redirect) {
case 'error':
reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
finalize();
return;
case 'manual':
// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
if (locationURL !== null) {
// handle corrupted header
try {
headers.set('Location', locationURL);
} catch (err) {
// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
reject(err);
}
}
break;
case 'follow':
// HTTP-redirect fetch step 2
if (locationURL === null) {
break;
}
// HTTP-redirect fetch step 5
if (request.counter >= request.follow) {
reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 6 (counter increment)
// Create a new Request object.
const requestOpts = {
headers: new Headers(request.headers),
follow: request.follow,
counter: request.counter + 1,
agent: request.agent,
compress: request.compress,
method: request.method,
body: request.body,
signal: request.signal,
timeout: request.timeout,
size: request.size
};
if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
requestOpts.headers.delete(name);
}
}
// HTTP-redirect fetch step 9
if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 11
if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
requestOpts.method = 'GET';
requestOpts.body = undefined;
requestOpts.headers.delete('content-length');
}
// HTTP-redirect fetch step 15
resolve(fetch(new Request(locationURL, requestOpts)));
finalize();
return;
}
}
// prepare response
res.once('end', function () {
if (signal) signal.removeEventListener('abort', abortAndFinalize);
});
let body = res.pipe(new PassThrough$1());
const response_options = {
url: request.url,
status: res.statusCode,
statusText: res.statusMessage,
headers: headers,
size: request.size,
timeout: request.timeout,
counter: request.counter
};
// HTTP-network fetch step 12.1.1.3
const codings = headers.get('Content-Encoding');
// HTTP-network fetch step 12.1.1.4: handle content codings
// in following scenarios we ignore compression support
// 1. compression support is disabled
// 2. HEAD request
// 3. no Content-Encoding header
// 4. no content response (204)
// 5. content not modified response (304)
if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
response = new Response(body, response_options);
resolve(response);
return;
}
// For Node v6+
// Be less strict when decoding compressed responses, since sometimes
// servers send slightly invalid responses that are still accepted
// by common browsers.
// Always using Z_SYNC_FLUSH is what cURL does.
const zlibOptions = {
flush: zlib.Z_SYNC_FLUSH,
finishFlush: zlib.Z_SYNC_FLUSH
};
// for gzip
if (codings == 'gzip' || codings == 'x-gzip') {
body = body.pipe(zlib.createGunzip(zlibOptions));
response = new Response(body, response_options);
resolve(response);
return;
}
// for deflate
if (codings == 'deflate' || codings == 'x-deflate') {
// handle the infamous raw deflate response from old servers
// a hack for old IIS and Apache servers
const raw = res.pipe(new PassThrough$1());
raw.once('data', function (chunk) {
// see http://stackoverflow.com/questions/37519828
if ((chunk[0] & 0x0F) === 0x08) {
body = body.pipe(zlib.createInflate());
} else {
body = body.pipe(zlib.createInflateRaw());
}
response = new Response(body, response_options);
resolve(response);
});
raw.on('end', function () {
// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.
if (!response) {
response = new Response(body, response_options);
resolve(response);
}
});
return;
}
// for br
if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
body = body.pipe(zlib.createBrotliDecompress());
response = new Response(body, response_options);
resolve(response);
return;
}
// otherwise, use response as-is
response = new Response(body, response_options);
resolve(response);
});
writeToStream(req, request);
});
}
function fixResponseChunkedTransferBadEnding(request, errorCallback) {
let socket;
request.on('socket', function (s) {
socket = s;
});
request.on('response', function (response) {
const headers = response.headers;
if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {
response.once('close', function (hadError) {
// tests for socket presence, as in some situations the
// the 'socket' event is not triggered for the request
// (happens in deno), avoids `TypeError`
// if a data listener is still present we didn't end cleanly
const hasDataListener = socket && socket.listenerCount('data') > 0;
if (hasDataListener && !hadError) {
const err = new Error('Premature close');
err.code = 'ERR_STREAM_PREMATURE_CLOSE';
errorCallback(err);
}
});
}
});
}
function destroyStream(stream, err) {
if (stream.destroy) {
stream.destroy(err);
} else {
// node < 8
stream.emit('error', err);
stream.end();
}
}
/**
* Redirect code matching
*
* @param Number code Status code
* @return Boolean
*/
fetch.isRedirect = function (code) {
return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
};
// expose Promise
fetch.Promise = global.Promise;
var lib = {
__proto__: null,
'default': fetch,
Headers: Headers,
Request: Request,
Response: Response,
FetchError: FetchError
};
function wrapFetchForNode(fetch) {
// Support schemaless URIs on the server for parity with the browser.
// https://github.com/matthew-andrews/isomorphic-fetch/pull/10
return function (u, options) {
if (typeof u === 'string' && u.slice(0, 2) === '//') {
return fetch('https:' + u, options);
}
return fetch(u, options);
};
}
var fetchNode = function (context) {
// Support webpack module import weirdness.
var fetchFn = lib.default ? lib.default : lib;
// This modifies the global `node-fetch` object, which isn't great, since
// different callers to `fetch-ponyfill` which pass a different Promise
// implementation would each expect to have their implementation used. But,
// given the way `node-fetch` is implemented, this is the only way to make
// it work at all.
if (context && context.Promise) {
fetchFn.Promise = context.Promise;
}
return {
fetch: wrapFetchForNode(fetchFn),
Headers: lib.Headers,
Request: lib.Request,
Response: lib.Response
};
};
//@ts-nocheck
// import pkg from '../../package.json';
fetchNode();
/**
* Generate ID
*
* @access protected
* @memberof module:@citation-js/core.util
*
* @param {Array<String>} list - old ID list
* @param {String} prefix - ID prefix
*
* @return {String} CSL ID
*/
function fetchId(list, prefix) {
let id;
while (id === undefined || list.includes(id)) {
id = `${prefix}${Math.random().toString().slice(2)}`;
}
return id;
}
// @ts-nocheck
/**
* @memberof module:@citation-js/core.util
* @param {Object} [data={}] - initial values
*/
class Register {
constructor(data = {}) {
this.data = data;
}
/**
* @param {String} key
* @param {*} value
* @return {Register} this
*/
set(key, value) {
this.data[key] = value;
return this;
}
/**
* @param {String} key
* @param {*} value
* @return {Register} this
*/
add(...args) {
return this.set(...args);
}
/**
* @param {String} key
* @return {Register} this
*/
delete(key) {
delete this.data[key];
return this;
}
/**
* @param {String} key
* @return {Register} this
*/
remove(...args) {
return this.delete(...args);
}
/**
* @param {String} key
* @return {*} value
*/
get(key) {
return this.data[key];
}
/**
* @param {String} key
* @return {Boolean} register has key
*/
has(key) {
return Object.prototype.hasOwnProperty.call(this.data, key);
}
/**
* @return {Array<String>} list of keys
*/
list() {
return Object.keys(this.data);
}
}
// @ts-nocheck
/**
* @typedef module:@citation-js/core.util.Grammar~ruleName
* @type {String}
*/
/**
* @callback module:@citation-js/core.util.Grammar~rule
* @this module:@citation-js/core.util.Grammar
*/
/**
* @memberof module:@citation-js/core.util
*
* @param {Object<module:@citation-js/core.util.Grammar~ruleName,module:@citation-js/core.util.Grammar~rule>} rules
* @param {Object} state
*/
class Grammar {
constructor(rules, state) {
this.rules = rules;
this.defaultState = state;
this.mainRule = Object.keys(rules)[0];
this.log = [];
}
/**
* @param iterator - lexer supporting formatError() and next()
* @param [mainRule] - defaults to the first rule
* @return result of the main rule
*/
parse(iterator, mainRule) {
this.lexer = iterator;
this.token = this.lexer.next();
this.state = deepCopy(this.defaultState);
this.log = [];
return this.consumeRule(mainRule || this.mainRule);
}
/**
* @return {Boolean} true if there are no more tokens
*/
matchEndOfFile() {
return !this.token;
}
/**
* @param {String} type - a token type
* @return {Boolean} true if the current token has the given type
*/
matchToken(type) {
return this.token && type === this.token.type;
}
/**
* @param {String} [type] - a token type
* @param {Boolean} [optional=false] - false if it should throw an error if the type does not match
* @return {Object} token information
* @throws {SyntaxError} detailed syntax error if the current token is not the expected type or if there are no tokens left
*/
consumeToken(type, optional) {
const token = this.token;
if (!type || token && token.type === type) {
this.token = this.lexer.next();
return token;
} else if (optional) {
return undefined;
} else {
const got = token ? `"${token.type}"` : 'EOF';
const error = new SyntaxError(this.lexer.formatError(token, `expected "${type}", got ${got}`));
error.message += ` (${this.log.join('->')})`;
throw error;
}
}
/**
* @param {String} rule - a rule name
* @return whatever the rule function returns
*/
consumeRule(rule) {
this.log.push(rule);
const result = this.rules[rule].call(this);
this.log.pop();
return result;
}
}
// @ts-nocheck
/**
* Mapping unit.
*
* @typedef {Object} module:@citation-js/core.util.Translator~statement
* @property {String|Array<String>} [source] - properties to source value from
* @property {String|Array<String>} [target] - properties the value should go to
* @property {Object} [convert] - convert serialized or nested values
* @property {module:@citation-js/core.util.Translator~convertProp} [convert.toTarget] - function to convert source prop to target
* @property {module:@citation-js/core.util.Translator~convertProp} [convert.toSource] - function to convert target prop to source
* @property {Object} [when] - conditions as to when this statement should apply
* @property {module:@citation-js/core.util.Translator~condition} [when.source]
* @property {module:@citation-js/core.util.Translator~condition} [when.target]
*/
/**
* In the case of toTarget, source is input and target is output. In the case of
* toSource, source is output and target is input.
*
* @callback module:@citation-js/core.util.Translator~convertProp
* @param {...*} input - input values
* @return {Array|*} If output is an array and multiple output properties are
* specified, the output is divided over those properties.
*/
/**
* A top-level Boolean enables or disables a mapping unit in a given direction.
* Otherwise, individual properties are checked with an object specifying the
* property name and one of four things:
*
* - A boolean, checking for presence of the property
* - An array of values for checking whether the property value is in them
* - A value that should match with the property value
* - A predicate function taking in the value and returning a boolean
*
* All conditions have to be fulfilled for the mapping unit to be enabled.
*
* @typedef {Boolean|Object<String,Boolean|Array<*>|module:@citation-js/core.util.Translator~conditionPropPredicate|*>} module:@citation-js/core.util.Translator~condition
*/
/**
* Return, based on a property, whether a mapping should apply.
*
* @callback module:@citation-js/core.util.Translator~conditionPropPredicate
* @param {*} input - input value
* @return {Boolean}
*/
/**
* Return, whether a mapping should apply.
*
* @callback module:@citation-js/core.util.Translator~conditionPredicate
* @param {Object} input - input
* @return {Boolean}
*/
/**
* @access private
* @memberof module:@citation-js/core.util.Translator
* @param {module:@citation-js/core.util.Translator~condition} condition
* @return {module:@citation-js/core.util.Translator~conditionPredicate}
*/
function createConditionEval(condition) {
return function conditionEval(input) {
if (typeof condition === 'boolean') {
return condition;
}
return Object.keys(condition).every(prop => {
const value = condition[prop];
if (value === true) {
return prop in input;
} else if (value === false) {
return !(prop in input);
} else if (typeof value === 'function') {
return value(input[prop]);
} else if (Array.isArray(value)) {
return value.includes(input[prop]);
} else {
return input[prop] === value;
}
});
};
}
/**
* @access private
* @typedef {Object} module:@citation-js/core.util.Translator~normalizedStatement
* @property {Array<String>} inputProp
* @property {Array<String>} outputProp
* @property {module:@citation-js/core.util.Translator~convertProp} convert
* @property {module:@citation-js/core.util.Translator~conditionPredicate} condition
*/
/**
* @access private
* @memberof module:@citation-js/core.util.Translator
* @param {module:@citation-js/core.util.Translator~statement} prop
* @param {Boolean} toSource
* @return {module:@citation-js/core.util.Translator~normalizedStatement} normalized one-directional object
*/
function parsePropStatement(prop, toSource) {
let inputProp;
let outputProp;
let convert;
let condition;
if (typeof prop === 'string') {
inputProp = outputProp = prop;
} else if (prop) {
inputProp = toSource ? prop.target : prop.source;
outputProp = toSource ? prop.source : prop.target;
if (prop.convert) {
convert = toSource ? prop.convert.toSource : prop.convert.toTarget;
}
if (prop.when) {
condition = toSource ? prop.when.target : prop.when.source;
if (condition != null) {
condition = createConditionEval(condition);
}
}
} else {
return null;
}
inputProp = [].concat(inputProp).filter(Boolean);
outputProp = [].concat(outputProp).filter(Boolean);
return {
inputProp,
outputProp,
convert,
condition
};
}
/**
* Return, whether a mapping should apply.
*
* @callback module:@citation-js/core.util.Translator~convert
* @param {Object} input - input
* @return {Object} output
*/
/**
* @access private
* @memberof module:@citation-js/core.util.Translator
* @param {Array<module:@citation-js/core.util.Translator~statement>} props
* @param {Boolean} toSource
* @return {module:@citation-js/core.util.Translator~convert} converter
*/
function createConverter(props, toSource) {
toSource = toSource === Translator.CONVERT_TO_SOURCE;
props = props.map(prop => parsePropStatement(prop, toSource)).filter(Boolean);
return function converter(input) {
const output = {};
for (const {
inputProp,
outputProp,
convert,
condition
} of props) {
// Skip when no output will be assigned
if (outputProp.length === 0) {
continue;
// Skip when requested by the requirements of the prop converter
} else if (condition && !condition(input)) {
continue;
// Skip when none of the required props are in the input data
// NOTE: if no input is required, do not skip
} else if (inputProp.length !== 0 && inputProp.every(prop => !(prop in input))) {
continue;
}
let outputData = inputProp.map(prop => input[prop]);
if (convert) {
try {
const converted = convert.apply(input, outputData);
outputData = outputProp.length === 1 ? [converted] : converted;
} catch (cause) {
throw new Error(`Failed to convert ${inputProp} to ${outputProp}`, {
cause
});
}
}
outputProp.forEach((prop, index) => {
const value = outputData[index];
if (value !== undefined) {
output[prop] = value;
}
});
}
return output;
};
}
/**
* @memberof module:@citation-js/core.util
*
* @param {Array<module:@citation-js/core.util.Translator~statement>} props
*
* @todo proper merging (?)
* @todo 'else' conditions
*/
class Translator {
constructor(props) {
/**
* @type {module:@citation-js/core.util.Translator~convert}
*/
this.convertToSource = createConverter(props, Translator.CONVERT_TO_SOURCE);
/**
* @type {module:@citation-js/core.util.Translator~convert}
*/
this.convertToTarget = createConverter(props, Translator.CONVERT_TO_TARGET);
}
}
/**
* @memberof module:@citation-js/core.util.Translator
* @property {Symbol} CONVERT_TO_SOURCE
*/
Translator.CONVERT_TO_SOURCE = Symbol('convert to source');
/**
* @memberof module:@citation-js/core.util.Translator
* @property {Symbol} CONVERT_TO_TARGET
*/
Translator.CONVERT_TO_TARGET = Symbol('convert to target');
// @ts-nocheck
/**
* @access private
* @param {Array<Object>} graph
* @return {String}
*/
function prepareParseGraph(graph) {
return graph
// collapse continuous iterations of the same type
.reduce((array, next) => {
const last = array[array.length - 1];
if (last && last.type === next.type) {
last.count = last.count + 1 || 2;
} else {
array.push(next);
}
return array;
}, [])
// presentation
.map(element => (element.count > 1 ? element.count + 'x ' : '') + element.type).join(' -> ');
}
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
* @constructor ChainParser
*
* @param {module:@citation-js/core~InputData} input
* @param {module:@citation-js/core~InputOptions} options
*/
class ChainParser {
constructor(input, options = {}) {
this.options = Object.assign({
generateGraph: true,
forceType: type(input),
maxChainLength: 10,
strict: true,
target: '@csl/list+object'
}, options);
this.type = this.options.forceType;
this.data = typeof input === 'object' ? deepCopy(input) : input;
this.graph = [{
type: this.type,
data: input
}];
this.iteration = 0;
}
/**
* After a round of data parsing, update type information and check targets.
*
* @access public
* @return {Boolean} Whether this is the last iteration or not
*/
iterate() {
if (this.iteration !== 0) {
const typeInfo = get$4(this.type);
if (typeInfo && typeInfo.outputs) {
this.type = typeInfo.outputs;
} else {
this.type = type(this.data);
}
this.graph.push({
type: this.type
});
}
if (this.error || this.type === this.options.target) {
return false;
} else if (this.iteration >= this.options.maxChainLength) {
this.error = new RangeError(`Max. number of parsing iterations reached (${prepareParseGraph(this.graph)})`);
return false;
} else {
this.iteration++;
return true;
}
}
/**
* Finish the iteration and return parsed data.
*
* @access public
* @return Array<module:@citation-js/core~CSL>
*/
end() {
if (this.error) {
logger.error('[core]', this.error.message);
if (this.options.strict !== false) {
throw this.error;
} else {
return [];
}
} else if (this.options.target === '@csl/list+object') {
return upgradeCsl(this.data).map(this.options.generateGraph ? entry => applyGraph(entry, this.graph) : removeGraph);
} else {
return this.data;
}
}
}
/**
* Parse input until success.
*
* @access protected
* @method chain
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
* @param {module:@citation-js/core~InputOptions} [options] - options
*
* @return {Array<module:@citation-js/core~CSL>} The parsed input
*/
const chain = (...args) => {
const chain = new ChainParser(...args);
while (chain.iterate()) {
try {
chain.data = data(chain.data, chain.type);
} catch (e) {
chain.error = e;
}
}
return chain.end();
};
/**
* Parse input once.
*
* @access protected
* @method chainLink
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
*
* @return {module:@citation-js/core~InputData} The parsed input
*/
const chainLink = input => {
const type$1 = type(input);
const output = type$1.match(/array|object/) ? deepCopy(input) : input;
return data(output, type$1);
};
/**
* Parse input until success. (async)
*
* @access protected
* @method chainAsync
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
* @param {module:@citation-js/core~InputOptions} [options] - options
*
* @return {Promise<Array<module:@citation-js/core~CSL>>} The parsed input
*/
const chainAsync = async (...args) => {
const chain = new ChainParser(...args);
while (chain.iterate()) {
chain.data = await dataAsync(chain.data, chain.type).catch(e => {
chain.error = e;
});
}
return chain.end();
};
/**
* Parse input once. (async)
*
* @access protected
* @method chainLinkAsync
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - The input data
*
* @return {Promise<module:@citation-js/core~InputData>} The parsed input
*/
const chainLinkAsync = async input => {
const type$1 = type(input);
const output = type$1.match(/array|object/) ? deepCopy(input) : input;
return dataAsync(output, type$1);
};
// @ts-nocheck
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @typedef {Object<module:@citation-js/core.plugins.input~format,module:@citation-js/core.plugins.input~parse>} parsers
*/
const parsers = {};
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @typedef {Object<module:@citation-js/core.plugins.input~format,module:@citation-js/core.plugins.input~parseAsync>} asyncParsers
*/
const asyncParsers = {};
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @typedef {Object<module:@citation-js/core.plugins.input~format,module:@citation-js/core.plugins.input~parse>} nativeParsers
*/
const nativeParsers = {
'@csl/object': input => [input],
'@csl/list+object': input => input,
'@else/list+object': input => input.map(chain).flat(),
'@invalid': () => {
throw new Error('This format is not supported or recognized');
}
};
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @typedef {Object<module:@citation-js/core.plugins.input~format,module:@citation-js/core.plugins.input~parseAsync>} nativeAsyncParsers
*/
const nativeAsyncParsers = {
'@else/list+object': async input => (await Promise.all(input.map(chainAsync))).flat()
};
/**
* @access public
* @method data
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
* @param {module:@citation-js/core.plugins.input~format} type - input type
*
* @return {*} parsed data
* @return {Null} if no parser available
*/
function data(input, type) {
if (typeof parsers[type] === 'function') {
return parsers[type](input);
} else {
throw new Error('This format is not supported or recognized');
// throw new TypeError(`No synchronous parser found for ${type}`)
}
}
/**
* @access public
* @method dataAsync
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
* @param {module:@citation-js/core.plugins.input~format} type - input type
*
* @return {Promise} parsed data
* @return {Promise<Null>} if no parser available
*/
async function dataAsync(input, type) {
if (typeof asyncParsers[type] === 'function') {
return asyncParsers[type](input);
} else if (typeof nativeAsyncParsers[type] === 'function') {
return nativeAsyncParsers[type](input);
} else if (hasDataParser(type, false)) {
return data(input, type);
} else {
throw new TypeError(`No parser found for ${type}`);
}
}
/**
* @access protected
* @method addDataParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format
* @param {module:@citation-js/core.plugins.input~parse|module:@citation-js/core.plugins.input~parseAsync} parser
* @param {Object} [options={}]
* @param {Boolean} [options.async=false]
*/
function addDataParser(format, {
parser,
async
}) {
if (async) {
asyncParsers[format] = parser;
} else {
parsers[format] = parser;
}
}
/**
* @access public
* @method hasDataParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} type
* @param {Boolean} [async=false] - check only for async, or only sync
*
* @return {Boolean} parser exists
*/
function hasDataParser(type, async) {
return async ? asyncParsers[type] || nativeAsyncParsers[type] : parsers[type] || nativeParsers[type];
}
/**
* @access public
* @method removeDataParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} type
* @param {Boolean} [async=false]
*/
function removeDataParser(type, async) {
delete (async ? asyncParsers : parsers)[type];
}
/**
* @access public
* @method listDataParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {Boolean} [async=false]
*/
function listDataParser(async) {
return Object.keys(async ? asyncParsers : parsers);
}
// @ts-nocheck
/**
* @access private
* @type {Object<module:@citation-js/core.plugins.input~format, Object>}
*/
const formats$3 = {};
/**
* See the relevant tutorial: {@tutorial input_plugins}
*
* @access public
* @method add
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format - input format name
* @param {module:@citation-js/core.plugins.input~parsers} parsers - parsers
*
* @tutorial input_plugins
*/
function add$5(format, parsers) {
const formatParser = new FormatParser(format, parsers);
formatParser.validate();
const index = formats$3[format] || (formats$3[format] = {});
if (formatParser.typeParser) {
addTypeParser(format, formatParser.typeParser);
index.type = true;
}
if (formatParser.dataParser) {
addDataParser(format, formatParser.dataParser);
index.data = true;
}
if (formatParser.asyncDataParser) {
addDataParser(format, formatParser.asyncDataParser);
index.asyncData = true;
}
if (parsers.outputs) {
index.outputs = parsers.outputs;
}
}
/**
* @access public
* @method get
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format - input format name
* @returns {Object} index
*/
function get$4(format) {
return formats$3[format];
}
/**
* @access public
* @method remove
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format - input format name
*/
function remove$4(format) {
const index = formats$3[format];
if (!index) {
return;
}
if (index.type) {
removeTypeParser(format);
}
if (index.data) {
removeDataParser(format);
}
if (index.asyncData) {
removeDataParser(format, true);
}
delete formats$3[format];
}
/**
* @access public
* @method has
* @memberof module:@citation-js/core.plugins.input
* @param {module:@citation-js/core.plugins.input~format} format - input format name
* @returns {Boolean} input format is registered
*/
function has$4(format) {
return format in formats$3;
}
/**
* @access public
* @method list
* @memberof module:@citation-js/core.plugins.input
* @returns {Array<module:@citation-js/core.plugins.input~format>} input format is registered
*/
function list$4() {
return Object.keys(formats$3);
}
/**
* @namespace input
* @memberof module:@citation-js/core.plugins
*/
/**
* @namespace util
* @memberof module:@citation-js/core.plugins.input
*/
const util = Object.assign({}, dataType, graph, parser, csl);
var input = {
__proto__: null,
util: util,
add: add$5,
get: get$4,
remove: remove$4,
has: has$4,
list: list$4,
chain: chain,
chainLink: chainLink,
chainAsync: chainAsync,
chainLinkAsync: chainLinkAsync,
type: type,
addTypeParser: addTypeParser,
hasTypeParser: hasTypeParser,
removeTypeParser: removeTypeParser,
listTypeParser: listTypeParser,
treeTypeParser: treeTypeParser,
typeMatcher: typeMatcher,
data: data,
dataAsync: dataAsync,
addDataParser: addDataParser,
hasDataParser: hasDataParser,
removeDataParser: removeDataParser,
listDataParser: listDataParser
};
// @ts-nocheck
/**
* Add an object to the array of objects
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core~InputData} data - The data to add to your object
* @param {module:@citation-js/core~InputOptions} [options] - Options
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated parent object
*/
function add$4(data, options = {}, log = false) {
if (options === true || log === true) {
this.save();
}
this.data.push(...chain(data, options));
this.data.filter(entry => !Object.prototype.hasOwnProperty.call(entry, 'id')).forEach(entry => {
entry.id = fetchId(this.getIds(), 'temp_id_');
});
return this;
}
/**
* Add an object to the array of objects
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core~InputData} data - The data to add to your object
* @param {module:@citation-js/core~InputOptions} [options] - Options
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {Promise<module:@citation-js/core.Cite>} The updated parent object
*/
async function addAsync(data, options = {}, log = false) {
if (options === true || log === true) {
this.save();
}
this.data.push(...(await chainAsync(data, options)));
this.data.filter(entry => !Object.prototype.hasOwnProperty.call(entry, 'id')).forEach(entry => {
entry.id = fetchId(this.getIds(), 'temp_id_');
});
return this;
}
/**
* Recreate a `Cite` object with almost any kind of data, and manipulate it with its default methods.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core~InputData} data - Replacement data
* @param {module:@citation-js/core~InputOptions} [options] - Options
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated parent object
*/
function set(data, options = {}, log = false) {
if (options === true || log === true) {
this.save();
}
this.data = [];
return typeof options !== 'boolean' ? this.add(data, options) : this.add(data);
}
/**
* Recreate a `Cite` object with almost any kind of data, and manipulate it with its default methods.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core~InputData} data - Replacement data
* @param {module:@citation-js/core~InputOptions} [options] - Options
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {Promise<module:@citation-js/core.Cite>} The updated parent object
*/
async function setAsync(data, options = {}, log = false) {
if (options === true || log === true) {
this.save();
}
this.data = [];
return typeof options !== 'boolean' ? this.addAsync(data, options) : this.addAsync(data);
}
/**
* Reset a `Cite` object.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated, empty parent object (except the log, the log lives)
*/
function reset(log) {
if (log) {
this.save();
}
this.data = [];
this._options = {};
return this;
}
var set$1 = {
__proto__: null,
add: add$4,
addAsync: addAsync,
set: set,
setAsync: setAsync,
reset: reset
};
// @ts-nocheck
/**
* @module output/label
*/
/**
* Get a label from CSL data
*
* @access protected
* @method getLabel
* @todo flavors/formats
*
* @param {CSL} entry - Input CSL
*
* @return {String} The label
*/
function getLabel(entry) {
if ('citation-label' in entry) {
return entry['citation-label'];
}
let res = '';
if (entry.author) {
res += entry.author[0].family || entry.author[0].literal;
}
if (entry.issued && entry.issued['date-parts'] && entry.issued['date-parts'][0]) {
res += entry.issued['date-parts'][0][0];
}
if (entry['year-suffix']) {
res += entry['year-suffix'];
} else if (entry.title) {
res += entry.title.replace(/<\/?.*?>/g, '').match(/^(?:(?:the|a|an)\s+)?(\S+)/i)[1];
}
return res;
}
var label = {
label(data) {
return data.reduce((object, entry) => {
object[entry.id] = getLabel(entry);
return object;
}, {});
}
};
/**
* @callback module:@citation-js/core.Cite#sort~sort
* @param {module:@citation-js/core~CSL} a - element a
* @param {module:@citation-js/core~CSL} b - element b
* @return {Number} positive for a > b, negative for b > a, zero for a = b
*/
/**
* Get value for comparing
*
* @access private
* @method getComparisonValue
*
* @param {module:@citation-js/core~CSL} obj - obj
* @param {String} prop - The prop in question
* @param {Boolean} label - Prop is label
*
* @return {String|Number} something to compare
*/
function getComparisonValue(obj, prop, label = prop === 'label') {
let value = label ? getLabel(obj) : obj[prop];
switch (prop) {
case 'author':
case 'editor':
return value.map(name => name.literal || name.family || format$8(name));
case 'accessed':
case 'issued':
return value['date-parts'][0];
case 'page':
return value.split('-').map(num => parseInt(num));
case 'edition':
case 'issue':
case 'volume':
value = parseInt(value);
return !isNaN(value) ? value : -Infinity;
default:
return value || -Infinity;
}
}
/**
* Compares props
*
* @access private
* @method compareProp
*
* @param {module:@citation-js/core~CSL} entryA
* @param {module:@citation-js/core~CSL} entryB
* @param {String} prop - The prop in question. Prepend ! to sort the other way around.
* @param {Boolean} flip - Override flip
*
* @return {Number} positive for a > b, negative for b > a, zero for a = b (flips if prop has !)
*/
function compareProp(entryA, entryB, prop, flip = /^!/.test(prop)) {
prop = prop.replace(/^!/, '');
const a = getComparisonValue(entryA, prop);
const b = getComparisonValue(entryB, prop);
return (flip ? -1 : 1) * (a > b ? 1 : a < b ? -1 : 0);
}
/**
* Generates a sorting callback based on props.
*
* @access private
* @method getSortCallback
*
* @param {...String} props - How to sort
*
* @return {module:@citation-js/core.Cite#sort~sort} sorting callback
*/
function getSortCallback(...props) {
return (a, b) => {
const keys = props.slice();
let output = 0;
while (!output && keys.length) {
output = compareProp(a, b, keys.shift());
}
return output;
};
}
/**
* Sort the dataset
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core.Cite#sort~sort|Array<String>} [method=[]] - How to sort
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated parent object
*/
function sort(method = [], log) {
if (log) {
this.save();
}
this.data.sort(typeof method === 'function' ? method : getSortCallback(...method, 'label'));
return this;
}
var sort$1 = {
__proto__: null,
sort: sort
};
// @ts-nocheck
/**
* @callback module:@citation-js/core.plugins.output~formatter
* @param {Array<module:@citation-js/core~InputData>} data
* @return {String} output
*/
/**
* @typedef module:@citation-js/core.plugins.output~formatterName
* @type String
*/
/**
* Validate input arguments
*
* @access private
* @memberof module:@citation-js/core.plugins.output
*
* @param {String} name - output format name
* @param {module:@citation-js/core.plugins.output~formatter} formatter - outputting function
* @throws {TypeError} Invalid output format name
* @throws {TypeError} Invalid formatter
*/
function validate$2(name, formatter) {
if (typeof name !== 'string') {
throw new TypeError(`Invalid output format name, expected string, got ${typeof name}`);
} else if (typeof formatter !== 'function') {
throw new TypeError(`Invalid formatter, expected function, got ${typeof formatter}`);
}
}
/**
* @access public
* @memberof module:@citation-js/core.plugins.output
* @constant register
*
* @type module:@citation-js/core.util.Register
*/
const register$1 = new Register();
/**
* Add output plugin.
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method add
*
* @param {module:@citation-js/core.plugins.output~formatterName} name - output format name
* @param {module:@citation-js/core.plugins.output~formatter} formatter - outputting function
* @throws {TypeError} validation errors
*/
function add$3(name, formatter) {
validate$2(name, formatter);
register$1.set(name, formatter);
}
/**
* Remove output plugin.
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method remove
*
* @param {module:@citation-js/core.plugins.output~formatterName} name - output format name
*/
function remove$3(name) {
register$1.remove(name);
}
/**
* Check if output plugin exists.
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method has
*
* @param {module:@citation-js/core.plugins.output~formatterName} name - output format name
* @return {Boolean} register has plugin
*/
function has$3(name) {
return register$1.has(name);
}
/**
* List output plugins.
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method list
*
* @return {Array<String>} list of plugins
*/
function list$3() {
return register$1.list();
}
/**
* Call output plugin
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method format
*
* @param {module:@citation-js/core.plugins.output~formatterName} name - output format name
* @param {Array<module:@citation-js/core~CSL>} data - all entries
* @param {...*} options - output options
*/
function format$7(name, data, ...options) {
if (!register$1.has(name)) {
throw new Error(`Output format "${name}" unavailable`);
}
return register$1.get(name)(data, ...options);
}
var output$2 = {
__proto__: null,
register: register$1,
add: add$3,
remove: remove$3,
has: has$3,
list: list$3,
format: format$7
};
// @ts-nocheck
/**
* Get a list of the data entry IDs, in the order of that list
*
* @access public
* @method getIds
* @memberof module:@citation-js/core.Cite#
*
* @return {Array<String>} List of IDs
*/
function getIds() {
return this.data.map(entry => entry.id);
}
/**
* Get formatted data from your object.
*
* @access public
* @method format
* @memberof module:@citation-js/core.Cite#
*
* @param {String} format - format module name
* @param {...*} options - module options (see relevant documentation)
*
* @return {String|Array<Object>} formatted data
*/
function format$6(format, ...options) {
return format$7(format, parseCsl(this.data), ...options);
}
/**
* Get formatted data from your object.
*
* @access public
* @method get
* @memberof module:@citation-js/core.Cite#
* @tutorial output
* @deprecated use {@link module:@citation-js/core.Cite#format}
*
* @param {module:@citation-js/core~OutputOptions} [options={}] - Output options
*
* @return {String|Array<Object>} The formatted data
*/
/* istanbul ignore next: deprecated */
function get$2(options = {}) {
validateOutputOptions(options);
const parsedOptions = Object.assign({}, this.defaultOptions, this._options.output, options);
const {
type,
style
} = parsedOptions;
const [styleType, styleFormat] = style.split('-');
const newStyle = styleType === 'citation' ? 'bibliography' : styleType === 'csl' ? 'data' : styleType;
const newType = type === 'string' ? 'text' : type === 'json' ? 'object' : type;
let formatOptions;
switch (newStyle) {
case 'bibliography':
{
const {
lang,
append,
prepend
} = parsedOptions;
formatOptions = {
template: styleFormat,
lang,
format: newType,
append,
prepend
};
break;
}
case 'data':
case 'bibtex':
case 'bibtxt':
case 'ndjson':
case 'ris':
formatOptions = {
type: newType
};
break;
default:
throw new Error(`Invalid style "${newStyle}"`);
}
const result = this.format(newStyle, Object.assign(formatOptions, options._newOptions));
const {
format
} = parsedOptions;
if (format === 'real' && newType === 'html' && typeof document !== 'undefined' && typeof document.createElement === 'function') {
const tmp = document.createElement('div');
tmp.innerHTML = result;
return tmp.firstChild;
} else if (format === 'string' && typeof result === 'object') {
return JSON.stringify(result);
} else {
return result;
}
}
var get$3 = {
__proto__: null,
getIds: getIds,
format: format$6,
get: get$2
};
// @ts-nocheck
/**
* @callback module:@citation-js/core.Cite~asyncCallback
* @param {Cite} data - Cite object
*/
/**
* @access public
* @memberof module:@citation-js/core.Cite
*
* @param {module:@citation-js/core~InputData} data - input data
* @param {module:@citation-js/core~InputOptions} [options={}] - cite options
* @param {module:@citation-js/core.Cite~asyncCallback} [callback] - if not given, function returns promise.
*
* @return {Promise<module:@citation-js/core.Cite>} if callback is omitted, returns a promise
*/
function async(data, options, callback) {
if (typeof options === 'function' && !callback) {
callback = options;
options = undefined;
}
const promise = new this().setAsync(data, options);
if (typeof callback === 'function') {
promise.then(callback);
return undefined;
} else {
return promise;
}
}
var staticMethods = {
__proto__: null,
async: async,
validateOutputOptions: validateOutputOptions,
validateOptions: validateOptions
};
//@ts-nocheck
/**
* Create a `Cite` object with almost any kind of data, and manipulate it with its default methods.
*
* @access public
* @constructor Cite
* @memberof module:@citation-js/core
*
* @param {module:@citation-js/core~InputData} data - Input data
* @param {module:@citation-js/core~InputOptions} [options={}] - Input options
*/
function Cite$1(data, options = {}) {
// Making it Scope-Safe
if (!(this instanceof Cite$1)) {
return new Cite$1(data, options);
}
/**
* The default options for the output. See [input options](../#cite.in.options)
*
* @access protected
* @memberof module:@citation-js/core.Cite#
*
* @var {module:@citation-js/core~InputOptions} _options
*/
this._options = options;
/**
* The saved-images-log
*
* @access protected
* @memberof module:@citation-js/core.Cite#
*
* @var {Array<Array<String>>} log
*/
this.log = [];
/**
* The parsed data
*
* @access protected
* @memberof module:@citation-js/core.Cite#
*
* @var {Array<module:@citation-js/core~CSL>} data
*/
this.data = [];
// Modified citation-js to accept an array of objects
// Use add instead of set to retain previous data
data.forEach(d => {
this.add(d, options);
});
// this.set(data, options)
this.options(options);
return this;
}
Object.assign(Cite$1.prototype, log, options$1, set$1, sort$1, get$3);
Cite$1.prototype[Symbol.iterator] = function* () {
yield* this.data;
};
Object.assign(Cite$1, staticMethods);
// @ts-nocheck
/**
* @typedef module:@citation-js/core.plugins.dict~dictName
* @type String
*/
/**
* @typedef module:@citation-js/core.plugins.dict~dict
* @type Object<module:@citation-js/core.plugins.dict~entryName,module:@citation-js/core.plugins.dict~dictEntry>
*/
/**
* @typedef module:@citation-js/core.plugins.dict~entryName
* @type String
*/
/**
* @typedef module:@citation-js/core.plugins.dict~dictEntry
* @type Array<String>
*/
/**
* Validate input arguments
*
* @access private
* @memberof module:@citation-js/core.plugins.dict
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - output format name
* @param {module:@citation-js/core.plugins.dict~dict} formatter - outputting function
* @throws {TypeError} Invalid output format name
* @throws {TypeError} Invalid formatter
*/
function validate$1(name, dict) {
if (typeof name !== 'string') {
throw new TypeError(`Invalid dict name, expected string, got ${typeof name}`);
} else if (typeof dict !== 'object') {
throw new TypeError(`Invalid dict, expected object, got ${typeof dict}`);
}
for (const entryName in dict) {
const entry = dict[entryName];
if (!Array.isArray(entry) || entry.some(part => typeof part !== 'string')) {
throw new TypeError(`Invalid dict entry "${entryName}", expected array of strings`);
}
}
}
/**
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @constant register
*
* @type module:@citation-js/core.util.Register
*/
const register = new Register({
html: {
bibliographyContainer: ['<div class="csl-bib-body">', '</div>'],
entry: ['<div class="csl-entry">', '</div>'],
list: ['<ul style="list-style-type:none">', '</ul>'],
listItem: ['<li>', '</li>']
},
text: {
bibliographyContainer: ['', '\n'],
entry: ['', '\n'],
list: ['\n', ''],
listItem: ['\t', '\n']
}
});
/**
* Add dictionary to register. Can be used by output plugins.
*
* @todo docs
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method add
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - dictionary name
* @param {module:@citation-js/core.plugins.dict~dict} dict - dictionary data
* @throws {TypeError} argument validation error
*/
function add$2(name, dict) {
validate$1(name, dict);
register.set(name, dict);
}
/**
* Remove dictionary.
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method remove
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - output format name
*/
function remove$2(name) {
register.remove(name);
}
/**
* Check if dictionary plugin exists.
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method has
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - output format name
* @return {Boolean} register has plugin
*/
function has$2(name) {
return register.has(name);
}
/**
* List dictionary plugins.
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method list
*
* @return {Array<String>} list of plugins
*/
function list$2() {
return register.list();
}
/**
* Get dictionary data.
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method get
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - output format name
* @return {module:@citation-js/core.plugins.dict~dict} dictionary data
*/
function get$1(name) {
if (!register.has(name)) {
throw new Error(`Dict "${name}" unavailable`);
}
return register.get(name);
}
/**
* Object containing HTML strings for building JSON and BibTeX. Made to match citeproc, for compatibility.
*
* @access protected
* @memberof module:@citation-js/core.plugins.dict
* @deprecated use the new formatting dicts: {@link module:@citation-js/core.plugins.dict}
*/
const htmlDict = {
wr_start: '<div class="csl-bib-body">',
wr_end: '</div>',
en_start: '<div class="csl-entry">',
en_end: '</div>',
ul_start: '<ul style="list-style-type:none">',
ul_end: '</ul>',
li_start: '<li>',
li_end: '</li>'
};
/**
* Object containing text strings for building JSON and BibTeX. Made to match citeproc, for compatibility.
*
* @access protected
* @memberof module:@citation-js/core.plugins.dict
* @deprecated use the new formatting dicts: {@link module:@citation-js/core.plugins.dict}
*/
const textDict = {
wr_start: '',
wr_end: '\n',
en_start: '',
en_end: '\n',
ul_start: '\n',
ul_end: '',
li_start: '\t',
li_end: '\n'
};
var dict = {
__proto__: null,
register: register,
add: add$2,
remove: remove$2,
has: has$2,
list: list$2,
get: get$1,
htmlDict: htmlDict,
textDict: textDict
};
// @ts-nocheck
/**
* @namespace config
* @memberof module:@citation-js/core.plugins
*/
const configs = {};
/**
* @access public
* @method add
* @memberof module:@citation-js/core.plugins.config
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @param {Object} config
*/
function add$1(ref, config) {
configs[ref] = config;
}
/**
* @access public
* @method get
* @memberof module:@citation-js/core.plugins.config
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @return {Object} config
*/
function get(ref) {
return configs[ref];
}
/**
* @access public
* @method has
* @memberof module:@citation-js/core.plugins.config
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @return {Boolean}
*/
function has$1(ref) {
return Object.prototype.hasOwnProperty.call(configs, ref);
}
/**
* @access public
* @method remove
* @memberof module:@citation-js/core.plugins.config
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
*/
function remove$1(ref) {
delete configs[ref];
}
/**
* @access public
* @method list
* @memberof module:@citation-js/core.plugins.config
* @return {Array<module:@citation-js/core.plugins~pluginRef>} list of available plugin configs
*/
function list$1() {
return Object.keys(configs);
}
var config$1 = {
__proto__: null,
add: add$1,
get: get,
has: has$1,
remove: remove$1,
list: list$1
};
// @ts-nocheck
const registers = {
input,
output: output$2,
dict,
config: config$1
};
const indices = {};
/**
* @access public
* @method add
* @memberof module:@citation-js/core.plugins
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @param {module:@citation-js/core.plugins~plugins} [plugins={}]
*/
function add(ref, plugins = {}) {
const mainIndex = indices[ref] = {};
for (const type in plugins) {
if (type === 'config') {
mainIndex.config = {
[ref]: plugins.config
};
registers.config.add(ref, plugins.config);
continue;
}
const typeIndex = mainIndex[type] = {};
const typePlugins = plugins[type];
for (const name in typePlugins) {
const typePlugin = typePlugins[name];
typeIndex[name] = true;
registers[type].add(name, typePlugin);
}
}
}
/**
* @access public
* @method remove
* @memberof module:@citation-js/core.plugins
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
*/
function remove(ref) {
const mainIndex = indices[ref];
for (const type in mainIndex) {
const typeIndex = mainIndex[type];
for (const name in typeIndex) {
registers[type].remove(name);
}
}
delete indices[ref];
}
/**
* @access public
* @method has
* @memberof module:@citation-js/core.plugins
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @returns {Boolean} plugin is registered
*/
function has(ref) {
return ref in indices;
}
/**
* @access public
* @method list
* @memberof module:@citation-js/core.plugins
* @returns {Array<module:@citation-js/core.plugins~pluginRef>} list of registered plugins
*/
function list() {
return Object.keys(indices);
}
var plugins = {
__proto__: null,
add: add,
remove: remove,
has: has,
list: list,
input: input,
output: output$2,
dict: dict,
config: config$1
};
function parse$7() {
return [];
}
// @ts-nocheck
/**
*
* @access private
* @constant substituters
* @default
*/
const substituters = [[/((?:\[|:|,)\s*)'((?:\\'|[^'])*?[^\\])?'(?=\s*(?:\]|}|,))/g, '$1"$2"'], [/((?:(?:"|]|}|\/[gmiuys]|\.|(?:\d|\.|-)*\d)\s*,|{)\s*)(?:"([^":\n]+?)"|'([^":\n]+?)'|([^":\n]+?))(\s*):/g, '$1"$2$3$4"$5:']];
/**
* Parse (in)valid JSON
*
* @access protected
* @method parseJSON
*
* @param {String} str - The input string
*
* @return {Object|Array<Object>|Array<String>} The parsed object
*/
function parseJSON(str) {
if (typeof str !== 'string') {
return JSON.parse(str);
}
try {
return JSON.parse(str);
} catch (e) {
logger.debug('[plugin-common]', 'Invalid JSON, switching to experimental parser');
substituters.forEach(([regex, subst]) => {
str = str.replace(regex, subst);
});
return JSON.parse(str);
}
}
function parse$6(input) {
return input.val() || input.text() || input.html();
}
function parse$5(input) {
return input.value || input.textContent;
}
// @ts-nocheck
const ref$2 = '@else';
const formats$2 = {
'@empty/text': {
parse: parse$7,
parseType: {
dataType: 'String',
predicate: input => input === ''
}
},
'@empty/whitespace+text': {
parse: parse$7,
parseType: {
dataType: 'String',
predicate: /^\s+$/
}
},
'@empty': {
parse: parse$7,
parseType: {
dataType: 'Primitive',
predicate: input => input == null
}
},
'@else/json': {
parse: parseJSON,
parseType: {
dataType: 'String',
predicate: /^\s*(\{[\S\s]*\}|\[[\S\s]*\])\s*$/
}
},
'@else/url': {
parseType: {
dataType: 'String',
predicate: /^https?:\/\/(([\w-]+\.)*[\w-]+)(:\d+)?(\/[^?/]*)*(\?[^#]*)?(#.*)?$/i
}
},
'@else/jquery': {
parse: parse$6,
parseType: {
dataType: 'ComplexObject',
/* istanbul ignore next: not testable in Node */
predicate(input) {
return typeof jQuery !== 'undefined' && input instanceof jQuery;
}
}
},
'@else/html': {
parse: parse$5,
parseType: {
dataType: 'ComplexObject',
/* istanbul ignore next: not testable in Node */
predicate(input) {
return typeof HTMLElement !== 'undefined' && input instanceof HTMLElement;
}
}
}
};
// @ts-nocheck
/**
* Append commas to every item but the last. Should unfortunately, probably be a utility.
*
* @access private
*
* @param {String} item
* @param {Number} index
* @param {Array<String>} array
*
* @return {String} modified item
*/
function appendCommas(string, index, array) {
return string + (index < array.length - 1 ? ',' : '');
}
/**
* Convert a JSON array or object to HTML.
*
* @access private
*
* @param {Object|Array} src - The data
* @param {Cite.get.dict~dict} dict - Dictionary
*
* @return {String} string form
*/
function getJsonObject(src, dict) {
const isArray = Array.isArray(src);
let entries;
if (isArray) {
entries = src.map(entry => getJsonValue(entry, dict));
} else {
entries = Object.keys(src)
// remove values that cannot be stringified, as is custom
.filter(prop => JSON.stringify(src[prop])).map(prop => `"${prop}": ${getJsonValue(src[prop], dict)}`);
}
entries = entries.map(appendCommas).map(entry => dict.listItem.join(entry));
entries = dict.list.join(entries.join(''));
return isArray ? `[${entries}]` : `{${entries}}`;
}
/**
* Convert JSON to HTML.
*
* @access private
*
* @param {*} src - The data
* @param {Cite.get.dict~dict} dict - Dictionary
*
* @return {String} string form
*/
function getJsonValue(src, dict) {
if (typeof src === 'object' && src !== null) {
if (src.length === 0) {
return '[]';
} else if (Object.keys(src).length === 0) {
return '{}';
} else {
return getJsonObject(src, dict);
}
} else {
return JSON.stringify(src);
}
}
/**
* Get a JSON string from CSL
*
* @access protected
* @method getJson
*
* @param {Array<CSL>} src - Input CSL
* @param {Cite.get.dict~dict} dict - Dictionary
*
* @return {String} JSON string
*/
function getJson(src, dict) {
let entries = src.map(entry => getJsonObject(entry, dict));
entries = entries.map(appendCommas).map(entry => dict.entry.join(entry));
entries = entries.join('');
return dict.bibliographyContainer.join(`[${entries}]`);
}
var json = {
data(data, {
type,
format = type || 'text',
version = '1.0.2'
} = {}) {
if (version < '1.0.2') {
data = downgradeCsl(data);
}
if (format === 'object') {
return deepCopy(data);
} else if (format === 'text') {
return JSON.stringify(data, null, 2);
} else {
logger.warn('[core]', 'This feature (JSON output with special formatting) is unstable. See https://github.com/larsgw/citation.js/issues/144');
return getJson(data, get$1(format));
}
},
ndjson(data, {
version = '1.0.2'
} = {}) {
if (version < '1.0.2') {
data = downgradeCsl(data);
}
return data.map(entry => JSON.stringify(entry)).join('\n');
}
};
var output$1 = Object.assign({}, json, label);
add(ref$2, {
input: formats$2,
output: output$1
});
// @ts-nocheck
function nameProps(person) {
const {
firstname,
lastname,
firstName: given = firstname,
lastName: family = lastname
} = person;
if (given && family) {
return {
given,
family
};
} else if (person.name) {
return parse$8(person.name);
}
}
const identifiers = ['PMID', 'PMCID', 'DOI', 'ISBN'
// 'URL' is actually the URL of the record collection, if I understand it correctly,
// and not of the record. Otherwise, it should be included.
];
const journalIdentifiers = ['ISSN'];
function idProps(input, identifiers) {
const output = {};
for (const prop in input) {
const upperCaseProp = prop.toUpperCase();
if (identifiers.includes(upperCaseProp)) {
output[upperCaseProp] = input[prop];
}
}
if (input.identifier) {
for (let {
id,
type = ''
} of input.identifier) {
type = type.toUpperCase();
if (identifiers.includes(type)) {
output[type] = id;
}
}
}
return output;
}
// copied from BibTeX, as BibJSON is based on BibTeX
const typeMap = {
article: 'article',
book: 'book',
booklet: 'book',
proceedings: 'book',
mastersthesis: 'thesis',
inbook: 'chapter',
incollection: 'chapter',
conference: 'paper-conference',
inproceedings: 'paper-conference',
manual: 'report',
misc: 'document',
online: 'website',
patent: 'patent',
phdthesis: 'thesis',
techreport: 'report',
unpublished: 'manuscript'
};
function quickscrapeSpecificProps() {
return {
type: 'article-journal'
};
}
function generalProps(input) {
const output = {
type: typeMap[input.type] || 'document',
title: input.title
};
if (input.author) {
output.author = input.author.map(nameProps).filter(Boolean);
}
if (input.editor) {
output.editor = input.editor.map(nameProps).filter(Boolean);
}
if (input.reviewer) {
if (input.author) {
output['reviewed-author'] = output.author;
}
output.author = input.reviewer.map(nameProps).filter(Boolean);
}
/* istanbul ignore next: no examples found */
if (Array.isArray(input.keywords)) {
output.keyword = input.keywords.join();
} else if (input.keywords) {
output.keyword = input.keywords;
}
if (input.publisher) {
output.publisher = input.publisher.name || input.publisher;
}
if (input.date && input.date.published) {
output.issued = parse$9(input.date.published);
} else if (input.year) {
output.issued = {
'date-parts': [[+input.year]]
};
}
if (input.date && input.date.submitted) {
output.submitted = parse$9(input.date.submitted);
}
if (input.journal) {
const journal = input.journal;
if (journal.name) {
output['container-title'] = journal.name;
}
if (journal.volume) {
output.volume = journal.volume;
}
if (journal.issue) {
output.issue = journal.issue;
}
Object.assign(output, idProps(journal, journalIdentifiers));
if (journal.firstpage) {
output['page-first'] = journal.firstpage;
}
/* istanbul ignore else: no examples found */
if (journal.pages) {
output.page = journal.pages.replace('--', '-');
} else if (journal.firstpage && journal.lastpage) {
output.page = journal.firstpage + '-' + journal.lastpage;
}
}
if (input.link && typeof input.link[0] === 'object') {
output.URL = input.link[0].url;
}
Object.assign(output, idProps(input, identifiers));
if (input.cid) {
output.id = input.cid;
} else if (output.DOI) {
output.id = output.DOI;
}
return output;
}
/**
* Parse ContentMine quickscrape data
*
* @access protected
* @memberof module:@citation-js/plugin-bibjson.parsers.json
* @param {Object} data - The input data
* @return {Array<CSL>} The formatted input data
*/
const parseContentMine = function parseContentMine(data) {
return Object.assign(generalProps(data), quickscrapeSpecificProps());
};
/**
* Parse BibJSON data
*
* @access protected
* @memberof module:@citation-js/plugin-bibjson.parsers.json
* @param {Object} data - The input data
* @return {Array<CSL>} The formatted input data
*/
const parseBibJson = function parseBibJson(data) {
return generalProps(data);
};
/**
* ## Formats
*
* ### BibJSON
*
* This plugin adds input support for the [BibJSON format](http://okfnlabs.org/bibjson/), with three variants:
*
* * collections, where the records are extracted and parsed
* * records, which are parsed
* * records of the [quickscrape](https://github.com/ContentMine/quickscrape) variant, which are parsed
*
* @module module:@citation-js/plugin-bibjson
*/
const scraperLinks = ['fulltext_html', 'fulltext_xml', 'fulltext_pdf'];
const authorNameFields = ['name', 'lastname', 'lastName', 'firstname', 'firstName'];
/**
* @constant {module:@citation-js/core.plugins~pluginRef} ref
* @memberof module:@citation-js/plugin-bibjson
* @default '@bibjson'
*/
const ref$1 = '@bibjson';
/**
* @namespace formats
* @type module:@citation-js/core.plugins.input~format,module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibjson
*/
const formats$1 = {
/**
* Object with quickscrape-style BibJSON.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibjson.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@bibjson/quickscrape+record+object': {
parse: parseContentMine,
parseType: {
propertyConstraint: {
props: 'link',
value(links) {
return scraperLinks.some(link => links.find(({
type
}) => type === link));
}
},
extends: '@bibjson/record+object'
}
},
/**
* Object with BibJSON.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibjson.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@bibjson/record+object': {
parse: parseBibJson,
parseType: {
dataType: 'SimpleObject',
propertyConstraint: [{
props: 'title'
}, {
props: ['author', 'editor'],
match: 'some',
value(authors) {
return Array.isArray(authors) && authors[0] && authorNameFields.some(field => field in authors[0]);
}
}]
}
},
/**
* Array of {@link module:@citation-js/plugin-bibjson.formats."@bibjson/record+object"|BibJSON objects}.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibjson.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@bibjson/collection+object': {
parse(collection) {
return collection.records;
},
parseType: {
dataType: 'SimpleObject',
propertyConstraint: [{
props: 'metadata',
value(metadata) {
return 'collection' in metadata;
}
}, {
props: 'records',
value(records) {
return Array.isArray(records);
}
}]
}
}
};
add(ref$1, {
input: formats$1
});
var moo = createCommonjsModule(function (module) {
(function (root, factory) {
if (module.exports) {
module.exports = factory();
} else {
root.moo = factory();
}
})(commonjsGlobal, function () {
var hasOwnProperty = Object.prototype.hasOwnProperty;
var toString = Object.prototype.toString;
var hasSticky = typeof new RegExp().sticky === 'boolean';
/***************************************************************************/
function isRegExp(o) {
return o && toString.call(o) === '[object RegExp]';
}
function isObject(o) {
return o && typeof o === 'object' && !isRegExp(o) && !Array.isArray(o);
}
function reEscape(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
function reGroups(s) {
var re = new RegExp('|' + s);
return re.exec('').length - 1;
}
function reCapture(s) {
return '(' + s + ')';
}
function reUnion(regexps) {
if (!regexps.length) return '(?!)';
var source = regexps.map(function (s) {
return "(?:" + s + ")";
}).join('|');
return "(?:" + source + ")";
}
function regexpOrLiteral(obj) {
if (typeof obj === 'string') {
return '(?:' + reEscape(obj) + ')';
} else if (isRegExp(obj)) {
// TODO: consider /u support
if (obj.ignoreCase) throw new Error('RegExp /i flag not allowed');
if (obj.global) throw new Error('RegExp /g flag is implied');
if (obj.sticky) throw new Error('RegExp /y flag is implied');
if (obj.multiline) throw new Error('RegExp /m flag is implied');
return obj.source;
} else {
throw new Error('Not a pattern: ' + obj);
}
}
function pad(s, length) {
if (s.length > length) {
return s;
}
return Array(length - s.length + 1).join(" ") + s;
}
function lastNLines(string, numLines) {
var position = string.length;
var lineBreaks = 0;
while (true) {
var idx = string.lastIndexOf("\n", position - 1);
if (idx === -1) {
break;
} else {
lineBreaks++;
}
position = idx;
if (lineBreaks === numLines) {
break;
}
if (position === 0) {
break;
}
}
var startPosition = lineBreaks < numLines ? 0 : position + 1;
return string.substring(startPosition).split("\n");
}
function objectToRules(object) {
var keys = Object.getOwnPropertyNames(object);
var result = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var thing = object[key];
var rules = [].concat(thing);
if (key === 'include') {
for (var j = 0; j < rules.length; j++) {
result.push({
include: rules[j]
});
}
continue;
}
var match = [];
rules.forEach(function (rule) {
if (isObject(rule)) {
if (match.length) result.push(ruleOptions(key, match));
result.push(ruleOptions(key, rule));
match = [];
} else {
match.push(rule);
}
});
if (match.length) result.push(ruleOptions(key, match));
}
return result;
}
function arrayToRules(array) {
var result = [];
for (var i = 0; i < array.length; i++) {
var obj = array[i];
if (obj.include) {
var include = [].concat(obj.include);
for (var j = 0; j < include.length; j++) {
result.push({
include: include[j]
});
}
continue;
}
if (!obj.type) {
throw new Error('Rule has no type: ' + JSON.stringify(obj));
}
result.push(ruleOptions(obj.type, obj));
}
return result;
}
function ruleOptions(type, obj) {
if (!isObject(obj)) {
obj = {
match: obj
};
}
if (obj.include) {
throw new Error('Matching rules cannot also include states');
}
// nb. error and fallback imply lineBreaks
var options = {
defaultType: type,
lineBreaks: !!obj.error || !!obj.fallback,
pop: false,
next: null,
push: null,
error: false,
fallback: false,
value: null,
type: null,
shouldThrow: false
};
// Avoid Object.assign(), so we support IE9+
for (var key in obj) {
if (hasOwnProperty.call(obj, key)) {
options[key] = obj[key];
}
}
// type transform cannot be a string
if (typeof options.type === 'string' && type !== options.type) {
throw new Error("Type transform cannot be a string (type '" + options.type + "' for token '" + type + "')");
}
// convert to array
var match = options.match;
options.match = Array.isArray(match) ? match : match ? [match] : [];
options.match.sort(function (a, b) {
return isRegExp(a) && isRegExp(b) ? 0 : isRegExp(b) ? -1 : isRegExp(a) ? +1 : b.length - a.length;
});
return options;
}
function toRules(spec) {
return Array.isArray(spec) ? arrayToRules(spec) : objectToRules(spec);
}
var defaultErrorRule = ruleOptions('error', {
lineBreaks: true,
shouldThrow: true
});
function compileRules(rules, hasStates) {
var errorRule = null;
var fast = Object.create(null);
var fastAllowed = true;
var unicodeFlag = null;
var groups = [];
var parts = [];
// If there is a fallback rule, then disable fast matching
for (var i = 0; i < rules.length; i++) {
if (rules[i].fallback) {
fastAllowed = false;
}
}
for (var i = 0; i < rules.length; i++) {
var options = rules[i];
if (options.include) {
// all valid inclusions are removed by states() preprocessor
throw new Error('Inheritance is not allowed in stateless lexers');
}
if (options.error || options.fallback) {
// errorRule can only be set once
if (errorRule) {
if (!options.fallback === !errorRule.fallback) {
throw new Error("Multiple " + (options.fallback ? "fallback" : "error") + " rules not allowed (for token '" + options.defaultType + "')");
} else {
throw new Error("fallback and error are mutually exclusive (for token '" + options.defaultType + "')");
}
}
errorRule = options;
}
var match = options.match.slice();
if (fastAllowed) {
while (match.length && typeof match[0] === 'string' && match[0].length === 1) {
var word = match.shift();
fast[word.charCodeAt(0)] = options;
}
}
// Warn about inappropriate state-switching options
if (options.pop || options.push || options.next) {
if (!hasStates) {
throw new Error("State-switching options are not allowed in stateless lexers (for token '" + options.defaultType + "')");
}
if (options.fallback) {
throw new Error("State-switching options are not allowed on fallback tokens (for token '" + options.defaultType + "')");
}
}
// Only rules with a .match are included in the RegExp
if (match.length === 0) {
continue;
}
fastAllowed = false;
groups.push(options);
// Check unicode flag is used everywhere or nowhere
for (var j = 0; j < match.length; j++) {
var obj = match[j];
if (!isRegExp(obj)) {
continue;
}
if (unicodeFlag === null) {
unicodeFlag = obj.unicode;
} else if (unicodeFlag !== obj.unicode && options.fallback === false) {
throw new Error('If one rule is /u then all must be');
}
}
// convert to RegExp
var pat = reUnion(match.map(regexpOrLiteral));
// validate
var regexp = new RegExp(pat);
if (regexp.test("")) {
throw new Error("RegExp matches empty string: " + regexp);
}
var groupCount = reGroups(pat);
if (groupCount > 0) {
throw new Error("RegExp has capture groups: " + regexp + "\nUse (?: … ) instead");
}
// try and detect rules matching newlines
if (!options.lineBreaks && regexp.test('\n')) {
throw new Error('Rule should declare lineBreaks: ' + regexp);
}
// store regex
parts.push(reCapture(pat));
}
// If there's no fallback rule, use the sticky flag so we only look for
// matches at the current index.
//
// If we don't support the sticky flag, then fake it using an irrefutable
// match (i.e. an empty pattern).
var fallbackRule = errorRule && errorRule.fallback;
var flags = hasSticky && !fallbackRule ? 'ym' : 'gm';
var suffix = hasSticky || fallbackRule ? '' : '|';
if (unicodeFlag === true) flags += "u";
var combined = new RegExp(reUnion(parts) + suffix, flags);
return {
regexp: combined,
groups: groups,
fast: fast,
error: errorRule || defaultErrorRule
};
}
function compile(rules) {
var result = compileRules(toRules(rules));
return new Lexer({
start: result
}, 'start');
}
function checkStateGroup(g, name, map) {
var state = g && (g.push || g.next);
if (state && !map[state]) {
throw new Error("Missing state '" + state + "' (in token '" + g.defaultType + "' of state '" + name + "')");
}
if (g && g.pop && +g.pop !== 1) {
throw new Error("pop must be 1 (in token '" + g.defaultType + "' of state '" + name + "')");
}
}
function compileStates(states, start) {
var all = states.$all ? toRules(states.$all) : [];
delete states.$all;
var keys = Object.getOwnPropertyNames(states);
if (!start) start = keys[0];
var ruleMap = Object.create(null);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
ruleMap[key] = toRules(states[key]).concat(all);
}
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var rules = ruleMap[key];
var included = Object.create(null);
for (var j = 0; j < rules.length; j++) {
var rule = rules[j];
if (!rule.include) continue;
var splice = [j, 1];
if (rule.include !== key && !included[rule.include]) {
included[rule.include] = true;
var newRules = ruleMap[rule.include];
if (!newRules) {
throw new Error("Cannot include nonexistent state '" + rule.include + "' (in state '" + key + "')");
}
for (var k = 0; k < newRules.length; k++) {
var newRule = newRules[k];
if (rules.indexOf(newRule) !== -1) continue;
splice.push(newRule);
}
}
rules.splice.apply(rules, splice);
j--;
}
}
var map = Object.create(null);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
map[key] = compileRules(ruleMap[key], true);
}
for (var i = 0; i < keys.length; i++) {
var name = keys[i];
var state = map[name];
var groups = state.groups;
for (var j = 0; j < groups.length; j++) {
checkStateGroup(groups[j], name, map);
}
var fastKeys = Object.getOwnPropertyNames(state.fast);
for (var j = 0; j < fastKeys.length; j++) {
checkStateGroup(state.fast[fastKeys[j]], name, map);
}
}
return new Lexer(map, start);
}
function keywordTransform(map) {
// Use a JavaScript Map to map keywords to their corresponding token type
// unless Map is unsupported, then fall back to using an Object:
var isMap = typeof Map !== 'undefined';
var reverseMap = isMap ? new Map() : Object.create(null);
var types = Object.getOwnPropertyNames(map);
for (var i = 0; i < types.length; i++) {
var tokenType = types[i];
var item = map[tokenType];
var keywordList = Array.isArray(item) ? item : [item];
keywordList.forEach(function (keyword) {
if (typeof keyword !== 'string') {
throw new Error("keyword must be string (in keyword '" + tokenType + "')");
}
if (isMap) {
reverseMap.set(keyword, tokenType);
} else {
reverseMap[keyword] = tokenType;
}
});
}
return function (k) {
return isMap ? reverseMap.get(k) : reverseMap[k];
};
}
/***************************************************************************/
var Lexer = function (states, state) {
this.startState = state;
this.states = states;
this.buffer = '';
this.stack = [];
this.reset();
};
Lexer.prototype.reset = function (data, info) {
this.buffer = data || '';
this.index = 0;
this.line = info ? info.line : 1;
this.col = info ? info.col : 1;
this.queuedToken = info ? info.queuedToken : null;
this.queuedText = info ? info.queuedText : "";
this.queuedThrow = info ? info.queuedThrow : null;
this.setState(info ? info.state : this.startState);
this.stack = info && info.stack ? info.stack.slice() : [];
return this;
};
Lexer.prototype.save = function () {
return {
line: this.line,
col: this.col,
state: this.state,
stack: this.stack.slice(),
queuedToken: this.queuedToken,
queuedText: this.queuedText,
queuedThrow: this.queuedThrow
};
};
Lexer.prototype.setState = function (state) {
if (!state || this.state === state) return;
this.state = state;
var info = this.states[state];
this.groups = info.groups;
this.error = info.error;
this.re = info.regexp;
this.fast = info.fast;
};
Lexer.prototype.popState = function () {
this.setState(this.stack.pop());
};
Lexer.prototype.pushState = function (state) {
this.stack.push(this.state);
this.setState(state);
};
var eat = hasSticky ? function (re, buffer) {
// assume re is /y
return re.exec(buffer);
} : function (re, buffer) {
// assume re is /g
var match = re.exec(buffer);
// will always match, since we used the |(?:) trick
if (match[0].length === 0) {
return null;
}
return match;
};
Lexer.prototype._getGroup = function (match) {
var groupCount = this.groups.length;
for (var i = 0; i < groupCount; i++) {
if (match[i + 1] !== undefined) {
return this.groups[i];
}
}
throw new Error('Cannot find token type for matched text');
};
function tokenToString() {
return this.value;
}
Lexer.prototype.next = function () {
var index = this.index;
// If a fallback token matched, we don't need to re-run the RegExp
if (this.queuedGroup) {
var token = this._token(this.queuedGroup, this.queuedText, index);
this.queuedGroup = null;
this.queuedText = "";
return token;
}
var buffer = this.buffer;
if (index === buffer.length) {
return; // EOF
}
// Fast matching for single characters
var group = this.fast[buffer.charCodeAt(index)];
if (group) {
return this._token(group, buffer.charAt(index), index);
}
// Execute RegExp
var re = this.re;
re.lastIndex = index;
var match = eat(re, buffer);
// Error tokens match the remaining buffer
var error = this.error;
if (match == null) {
return this._token(error, buffer.slice(index, buffer.length), index);
}
var group = this._getGroup(match);
var text = match[0];
if (error.fallback && match.index !== index) {
this.queuedGroup = group;
this.queuedText = text;
// Fallback tokens contain the unmatched portion of the buffer
return this._token(error, buffer.slice(index, match.index), index);
}
return this._token(group, text, index);
};
Lexer.prototype._token = function (group, text, offset) {
// count line breaks
var lineBreaks = 0;
if (group.lineBreaks) {
var matchNL = /\n/g;
var nl = 1;
if (text === '\n') {
lineBreaks = 1;
} else {
while (matchNL.exec(text)) {
lineBreaks++;
nl = matchNL.lastIndex;
}
}
}
var token = {
type: typeof group.type === 'function' && group.type(text) || group.defaultType,
value: typeof group.value === 'function' ? group.value(text) : text,
text: text,
toString: tokenToString,
offset: offset,
lineBreaks: lineBreaks,
line: this.line,
col: this.col
};
// nb. adding more props to token object will make V8 sad!
var size = text.length;
this.index += size;
this.line += lineBreaks;
if (lineBreaks !== 0) {
this.col = size - nl + 1;
} else {
this.col += size;
}
// throw, if no rule with {error: true}
if (group.shouldThrow) {
var err = new Error(this.formatError(token, "invalid syntax"));
throw err;
}
if (group.pop) this.popState();else if (group.push) this.pushState(group.push);else if (group.next) this.setState(group.next);
return token;
};
if (typeof Symbol !== 'undefined' && Symbol.iterator) {
var LexerIterator = function (lexer) {
this.lexer = lexer;
};
LexerIterator.prototype.next = function () {
var token = this.lexer.next();
return {
value: token,
done: !token
};
};
LexerIterator.prototype[Symbol.iterator] = function () {
return this;
};
Lexer.prototype[Symbol.iterator] = function () {
return new LexerIterator(this);
};
}
Lexer.prototype.formatError = function (token, message) {
if (token == null) {
// An undefined token indicates EOF
var text = this.buffer.slice(this.index);
var token = {
text: text,
offset: this.index,
lineBreaks: text.indexOf('\n') === -1 ? 0 : 1,
line: this.line,
col: this.col
};
}
var numLinesAround = 2;
var firstDisplayedLine = Math.max(token.line - numLinesAround, 1);
var lastDisplayedLine = token.line + numLinesAround;
var lastLineDigits = String(lastDisplayedLine).length;
var displayedLines = lastNLines(this.buffer, this.line - token.line + numLinesAround + 1).slice(0, 5);
var errorLines = [];
errorLines.push(message + " at line " + token.line + " col " + token.col + ":");
errorLines.push("");
for (var i = 0; i < displayedLines.length; i++) {
var line = displayedLines[i];
var lineNo = firstDisplayedLine + i;
errorLines.push(pad(String(lineNo), lastLineDigits) + " " + line);
if (lineNo === token.line) {
errorLines.push(pad("", lastLineDigits + token.col + 1) + "^");
}
}
return errorLines.join("\n");
};
Lexer.prototype.clone = function () {
return new Lexer(this.states, this.state);
};
Lexer.prototype.has = function (tokenType) {
return true;
};
return {
compile: compile,
states: compileStates,
error: Object.freeze({
error: true
}),
fallback: Object.freeze({
fallback: true
}),
keywords: keywordTransform
};
});
});
const required$1 = {
biblatex: {
article: ['author', 'title', 'journaltitle', ['year', 'date']],
book: ['author', 'title', ['year', 'date']],
mvbook: ['author', 'title', ['year', 'date']],
inbook: ['author', 'title', 'booktitle', ['year', 'date']],
booklet: [['author', 'editor'], 'title', ['year', 'date']],
collection: ['editor', 'title', ['year', 'date']],
mvcollection: ['editor', 'title', ['year', 'date']],
incollection: ['author', 'title', 'booktitle', ['year', 'date']],
dataset: [['author', 'editor'], 'title', ['year', 'date']],
online: [['author', 'editor'], 'title', ['year', 'date'], ['doi', 'eprint', 'url']],
patent: ['author', 'title', 'number', ['year', 'date']],
periodical: ['editor', 'title', ['year', 'date']],
proceedings: ['title', ['year', 'date']],
mvproceedings: ['title', ['year', 'date']],
inproceedings: ['author', 'title', 'booktitle', ['year', 'date']],
report: ['author', 'title', 'type', 'institution', ['year', 'date']],
thesis: ['author', 'title', 'type', 'institution', ['year', 'date']],
unpublished: ['author', 'title', ['year', 'date']],
conference: ['author', 'title', 'booktitle', ['year', 'date']],
electronic: [['author', 'editor'], 'title', ['year', 'date'], ['doi', 'eprint', 'url']],
mastersthesis: ['author', 'title', 'institution', ['year', 'date']],
phdthesis: ['author', 'title', 'institution', ['year', 'date']],
techreport: ['author', 'title', 'institution', ['year', 'date']],
www: [['author', 'editor'], 'title', ['year', 'date'], ['doi', 'eprint', 'url']]
},
bibtex: {
article: ['author', 'title', 'journal', 'year'],
book: [['author', 'editor'], 'title', 'publisher', 'year'],
booklet: ['title'],
inbook: [['author', 'editor'], 'title', ['chapter', 'pages'], 'publisher', 'year'],
incollection: ['author', 'title', 'booktitle', 'publisher', 'year'],
inproceedings: ['author', 'title', 'booktitle', 'year'],
mastersthesis: ['author', 'title', 'school', 'year'],
phdthesis: ['author', 'title', 'school', 'year'],
proceedings: ['title', 'year'],
techreport: ['author', 'title', 'institution', 'year'],
unpublished: ['author', 'title', 'note']
}
};
const fieldTypes$1 = {
abstract: ['field', 'literal'],
addendum: ['field', 'literal'],
afterword: ['list', 'name'],
annotation: ['field', 'literal'],
annotator: ['list', 'name'],
author: ['list', 'name'],
authortype: ['field', 'key'],
bookauthor: ['list', 'name'],
bookpagination: ['field', 'key'],
booksubtitle: ['field', 'literal'],
booktitle: ['field', 'title'],
booktitleaddon: ['field', 'literal'],
chapter: ['field', 'literal'],
commentator: ['list', 'name'],
date: ['field', 'date'],
doi: ['field', 'verbatim'],
edition: ['field', 'literal'],
editor: ['list', 'name'],
editora: ['list', 'name'],
editorb: ['list', 'name'],
editorc: ['list', 'name'],
editortype: ['field', 'key'],
editoratype: ['field', 'key'],
editorbtype: ['field', 'key'],
editorctype: ['field', 'key'],
eid: ['field', 'literal'],
entrysubtype: ['field', 'literal'],
eprint: ['field', 'verbatim'],
eprintclass: ['field', 'literal'],
eprinttype: ['field', 'literal'],
eventdate: ['field', 'date'],
eventtitle: ['field', 'title'],
eventtitleaddon: ['field', 'literal'],
file: ['field', 'verbatim'],
foreword: ['list', 'name'],
holder: ['list', 'name'],
howpublished: ['field', 'literal'],
indextitle: ['field', 'literal'],
institution: ['list', 'literal'],
introduction: ['list', 'name'],
isan: ['field', 'literal'],
isbn: ['field', 'literal'],
ismn: ['field', 'literal'],
isrn: ['field', 'literal'],
issn: ['field', 'literal'],
issue: ['field', 'literal'],
issuesubtitle: ['field', 'literal'],
issuetitle: ['field', 'literal'],
iswc: ['field', 'literal'],
journalsubtitle: ['field', 'literal'],
journaltitle: ['field', 'literal'],
label: ['field', 'literal'],
language: ['list', 'key'],
library: ['field', 'literal'],
location: ['list', 'literal'],
mainsubtitle: ['field', 'literal'],
maintitle: ['field', 'title'],
maintitleaddon: ['field', 'literal'],
month: ['field', 'literal'],
nameaddon: ['field', 'literal'],
note: ['field', 'literal'],
number: ['field', 'literal'],
organization: ['list', 'literal'],
origdate: ['field', 'date'],
origlanguage: ['list', 'key'],
origlocation: ['list', 'literal'],
origpublisher: ['list', 'literal'],
origtitle: ['field', 'title'],
pages: ['field', 'range'],
pagetotal: ['field', 'literal'],
pagination: ['field', 'key'],
part: ['field', 'literal'],
publisher: ['list', 'literal'],
pubstate: ['field', 'key'],
reprinttitle: ['field', 'literal'],
series: ['field', 'title'],
shortauthor: ['list', 'name'],
shorteditor: ['list', 'name'],
shorthand: ['field', 'literal'],
shorthandintro: ['field', 'literal'],
shortjournal: ['field', 'literal'],
shortseries: ['field', 'literal'],
shorttitle: ['field', 'title'],
subtitle: ['field', 'literal'],
title: ['field', 'title'],
titleaddon: ['field', 'literal'],
translator: ['list', 'name'],
type: ['field', 'title'],
url: ['field', 'uri'],
urldate: ['field', 'date'],
venue: ['field', 'literal'],
version: ['field', 'literal'],
volume: ['field', 'integer'],
volumes: ['field', 'integer'],
year: ['field', 'literal'],
crossref: ['field', 'entry key'],
entryset: ['separated', 'literal'],
execute: ['field', 'code'],
gender: ['field', 'gender'],
langid: ['field', 'identifier'],
langidopts: ['field', 'literal'],
ids: ['separated', 'entry key'],
indexsorttitle: ['field', 'literal'],
keywords: ['separated', 'literal'],
options: ['separated', 'options'],
presort: ['field', 'string'],
related: ['separated', 'literal'],
relatedoptions: ['separated', 'literal'],
relatedtype: ['field', 'identifier'],
relatedstring: ['field', 'literal'],
sortkey: ['field', 'literal'],
sortname: ['list', 'name'],
sortshorthand: ['field', 'literal'],
sorttitle: ['field', 'literal'],
sortyear: ['field', 'integer'],
xdata: ['separated', 'entry key'],
xref: ['field', 'entry key'],
namea: ['list', 'name'],
nameb: ['list', 'name'],
namec: ['list', 'name'],
nameatype: ['field', 'key'],
namebtype: ['field', 'key'],
namectype: ['field', 'key'],
lista: ['list', 'literal'],
listb: ['list', 'literal'],
listc: ['list', 'literal'],
listd: ['list', 'literal'],
liste: ['list', 'literal'],
listf: ['list', 'literal'],
usera: ['field', 'literal'],
userb: ['field', 'literal'],
userc: ['field', 'literal'],
userd: ['field', 'literal'],
usere: ['field', 'literal'],
userf: ['field', 'literal'],
verba: ['field', 'literal'],
verbb: ['field', 'literal'],
verbc: ['field', 'literal'],
address: ['list', 'literal'],
annote: ['field', 'literal'],
archiveprefix: ['field', 'literal'],
journal: ['field', 'literal'],
key: ['field', 'literal'],
pdf: ['field', 'verbatim'],
primaryclass: ['field', 'literal'],
school: ['list', 'literal'],
numpages: ['field', 'integer'],
pmid: ['field', 'literal'],
pmcid: ['field', 'literal']
};
const unicode$2 = {
diacritics: {
'`': '̀',
"'": '́',
'^': '̂',
'~': '̃',
'=': '̄',
u: '̆',
'.': '̇',
'"': '̈',
r: '̊',
H: '̋',
v: '̌',
b: '̲',
d: '̣',
c: '̧',
k: '̨',
t: '͡',
textcommabelow: '̦'
},
commands: {
textquotesingle: "'",
textasciigrave: '`',
textquotedbl: '"',
textdollar: '$',
textless: '<',
textgreater: '>',
textbackslash: '\\',
textasciicircum: '^',
textunderscore: '_',
textbraceleft: '{',
textbar: '|',
textbraceright: '}',
textasciitilde: '~',
textexclamdown: '¡',
textcent: '¢',
textsterling: '£',
textcurrency: '¤',
textyen: '¥',
textbrokenbar: '¦',
textsection: '§',
textasciidieresis: '¨',
textcopyright: '©',
textordfeminine: 'ª',
guillemetleft: '«',
guillemotleft: '«',
textlnot: '¬',
textregistered: '®',
textasciimacron: '¯',
textdegree: '°',
textpm: '±',
texttwosuperior: '²',
textthreesuperior: '³',
textasciiacute: '´',
textmu: 'µ',
textparagraph: '¶',
textperiodcentered: '·',
textonesuperior: '¹',
textordmasculine: 'º',
guillemetright: '»',
guillemotright: '»',
textonequarter: '¼',
textonehalf: '½',
textthreequarters: '¾',
textquestiondown: '¿',
AE: 'Æ',
DH: 'Ð',
texttimes: '×',
O: 'Ø',
TH: 'Þ',
ss: 'ß',
ae: 'æ',
dh: 'ð',
textdiv: '÷',
o: 'ø',
th: 'þ',
DJ: 'Đ',
dj: 'đ',
i: 'ı',
IJ: 'IJ',
ij: 'ij',
L: 'Ł',
l: 'ł',
NG: 'Ŋ',
ng: 'ŋ',
OE: 'Œ',
oe: 'œ',
textflorin: 'ƒ',
j: 'ȷ',
textasciicaron: 'ˇ',
textasciibreve: '˘',
textacutedbl: '˝',
textgravedbl: '˵',
texttildelow: '˷',
textbaht: '฿',
SS: 'ẞ',
textcompwordmark: '',
textendash: '',
textemdash: '—',
textbardbl: '‖',
textquoteleft: '',
textquoteright: '',
quotesinglbase: '',
textquotedblleft: '“',
textquotedblright: '”',
quotedblbase: '„',
textdagger: '†',
textdaggerdbl: '‡',
textbullet: '•',
textellipsis: '…',
textperthousand: '‰',
textpertenthousand: '‱',
guilsinglleft: '',
guilsinglright: '',
textreferencemark: '※',
textinterrobang: '‽',
textfractionsolidus: '',
textlquill: '⁅',
textrquill: '⁆',
textdiscount: '⁒',
textcolonmonetary: '₡',
textlira: '₤',
textnaira: '₦',
textwon: '₩',
textdong: '₫',
texteuro: '€',
textpeso: '₱',
textcelsius: '℃',
textnumero: '№',
textcircledP: '℗',
textrecipe: '℞',
textservicemark: '℠',
texttrademark: '™',
textohm: 'Ω',
textmho: '℧',
textestimated: '',
textleftarrow: '←',
textuparrow: '↑',
textrightarrow: '→',
textdownarrow: '↓',
textminus: '',
Hwithstroke: 'Ħ',
hwithstroke: 'ħ',
textasteriskcentered: '',
textsurd: '√',
textlangle: '〈',
textrangle: '〉',
textblank: '␢',
textvisiblespace: '␣',
textopenbullet: '◦',
textbigcircle: '◯',
textmusicalnote: '♪',
textmarried: '⚭',
textdivorced: '⚮',
textinterrobangdown: '⸘',
textcommabelow: null,
copyright: '©',
Gamma: 'Γ',
Delta: 'Δ',
Theta: 'Θ',
Lambda: 'Λ',
Xi: 'Ξ',
Pi: 'Π',
Sigma: 'Σ',
Phi: 'Φ',
Psi: 'Ψ',
Omega: 'Ω',
alpha: 'α',
beta: 'β',
gamma: 'γ',
delta: 'δ',
varepsilon: 'ε',
zeta: 'ζ',
eta: 'η',
theta: 'θ',
iota: 'ι',
kappa: 'κ',
lambda: 'λ',
mu: 'μ',
nu: 'ν',
xi: 'ξ',
pi: 'π',
rho: 'ρ',
varsigma: 'ς',
sigma: 'σ',
tau: 'τ',
upsilon: 'υ',
varphi: 'φ',
chi: 'χ',
psi: 'ψ',
omega: 'ω',
vartheta: 'ϑ',
Upsilon: 'ϒ',
phi: 'ϕ',
varpi: 'ϖ',
varrho: 'ϱ',
epsilon: 'ϵ'
}
};
const required = required$1;
const fieldTypes = fieldTypes$1;
const diacritics = unicode$2.diacritics;
const commands = unicode$2.commands;
// Adapted from astrocite-bibtex (accessed 2018-02-22)
// https://github.com/dsifford/astrocite/blob/668a9e4/packages/astrocite-bibtex/src/constants.ts#L112-L148
const defaultStrings = {
jan: '01',
feb: '02',
mar: '03',
apr: '04',
may: '05',
jun: '06',
jul: '07',
aug: '08',
sep: '09',
oct: '10',
nov: '11',
dec: '12',
acmcs: 'ACM Computing Surveys',
acta: 'Acta Informatica',
cacm: 'Communications of the ACM',
ibmjrd: 'IBM Journal of Research and Development',
ibmsj: 'IBM Systems Journal',
ieeese: 'IEEE Transactions on Software Engineering',
ieeetc: 'IEEE Transactions on Computers',
ieeetcad: 'IEEE Transactions on Computer-Aided Design of Integrated Circuits',
ipl: 'Information Processing Letters',
jacm: 'Journal of the ACM',
jcss: 'Journal of Computer and System Sciences',
scp: 'Science of Computer Programming',
sicomp: 'SIAM Journal on Computing',
tocs: 'ACM Transactions on Computer Systems',
tods: 'ACM Transactions on Database Systems',
tog: 'ACM Transactions on Graphics',
toms: 'ACM Transactions on Mathematical Software',
toois: 'ACM Transactions on Office Information Systems',
toplas: 'ACM Transactions on Programming Languages and Systems',
tcs: 'Theoretical Computer Science'
};
const formattingEnvs = {
it: 'italics',
itshape: 'italics',
sl: 'italics',
slshape: 'italics',
em: 'italics',
bf: 'bold',
bfseries: 'bold',
sc: 'smallcaps',
scshape: 'smallcaps',
// Font selection
rm: undefined,
sf: undefined,
tt: undefined
};
const formattingCommands = {
textit: 'italics',
textsl: 'italics',
emph: 'italics',
mkbibitalic: 'italics',
mkbibemph: 'italics',
textbf: 'bold',
strong: 'bold',
mkbibbold: 'bold',
textsc: 'smallcaps',
textsuperscript: 'superscript',
textsubscript: 'subscript',
enquote: 'quotes',
mkbibquote: 'quotes',
// Font selection
textmd: undefined,
textrm: undefined,
textsf: undefined,
texttt: undefined,
textup: undefined
};
const formatting = {
italics: ['<i>', '</i>'],
bold: ['<b>', '</b>'],
superscript: ['<sup>', '</sup>'],
subscript: ['<sub>', '</sub>'],
smallcaps: ['<span style="font-variant:small-caps;">', '</span>'],
nocase: ['<span class="nocase">', '</span>'],
quotes: ['\u201C', '\u201D']
};
// Partly adapted from retorquere/bibtex-parser (2020-11-16)
// https://github.com/retorquere/bibtex-parser/blob/7ad73df/index.ts
const argumentCommands = {
ElsevierGlyph(glyph) {
return String.fromCharCode(parseInt(glyph, 16));
},
href(url, text) {
return url;
},
url(url) {
return url;
}
};
const ligaturePattern = /---?|''|``|~/g;
const ligatures = {
'--': '\u2013',
'---': '\u2014',
'``': '\u201C',
"''": '\u201D',
'~': '\u00A0'
};
const mathScriptFormatting = {
'^': 'superscript',
sp: 'superscript',
_: 'subscript',
sb: 'subscript',
mathrm: undefined
};
/* eslint-disable quote-props */
const mathScripts = {
'^': {
0: '\u2070',
1: '\u00B9',
2: '\u00B2',
3: '\u00B3',
4: '\u2074',
5: '\u2075',
6: '\u2076',
7: '\u2077',
8: '\u2078',
9: '\u2079',
'+': '\u207A',
'-': '\u207B',
'=': '\u207C',
'(': '\u207D',
')': '\u207E',
i: '\u2071',
n: '\u207F'
},
_: {
0: '\u2080',
1: '\u2081',
2: '\u2082',
3: '\u2083',
4: '\u2084',
5: '\u2085',
6: '\u2086',
7: '\u2087',
8: '\u2088',
9: '\u2089',
'+': '\u208A',
'-': '\u208B',
'=': '\u208C',
'(': '\u208D',
')': '\u208E',
a: '\u2090',
e: '\u2091',
o: '\u2092',
x: '\u2093',
'\u0259': '\u2094',
h: '\u2095',
k: '\u2096',
l: '\u2097',
m: '\u2098',
n: '\u2099',
s: '\u209A',
p: '\u209B',
t: '\u209C'
}
};
/* eslint-enable quote-props */
// Adapted from retorquere/bibtex-parser (2020-10-15)
// https://github.com/retorquere/bibtex-parser/blob/0c8bd92/index.ts#L416-L441
const sentenceCaseLanguages = ['american', 'british', 'canadian', 'english', 'australian', 'newzealand', 'usenglish', 'ukenglish', 'en', 'eng', 'en-au', 'en-bz', 'en-ca', 'en-cb', 'en-gb', 'en-ie', 'en-jm', 'en-nz', 'en-ph', 'en-tt', 'en-us', 'en-za', 'en-zw', 'anglais'];
var constants = {
__proto__: null,
required: required,
fieldTypes: fieldTypes,
diacritics: diacritics,
commands: commands,
defaultStrings: defaultStrings,
formattingEnvs: formattingEnvs,
formattingCommands: formattingCommands,
formatting: formatting,
argumentCommands: argumentCommands,
ligaturePattern: ligaturePattern,
ligatures: ligatures,
mathScriptFormatting: mathScriptFormatting,
mathScripts: mathScripts,
sentenceCaseLanguages: sentenceCaseLanguages
};
const identifier = /[a-zA-Z_][a-zA-Z0-9_:-]*/;
const whitespace = {
comment: /%.*/,
whitespace: {
match: /\s+/,
lineBreaks: true
}
};
const lexer$1 = moo.states({
main: {
junk: {
match: /@[cC][oO][mM][mM][eE][nN][tT].+|[^@]+/,
lineBreaks: true
},
at: {
match: '@',
push: 'entry'
}
},
entry: _extends({}, whitespace, {
otherEntryType: {
match: /[sS][tT][rR][iI][nN][gG]|[pP][rR][eE][aA][mM][bB][lL][eE]/,
next: 'otherEntryContents'
},
dataEntryType: {
match: identifier,
next: 'dataEntryContents'
}
}),
otherEntryContents: _extends({}, whitespace, {
lbrace: {
match: /[{(]/,
next: 'fields'
}
}),
dataEntryContents: _extends({}, whitespace, {
lbrace: {
match: /[{(]/,
next: 'dataEntryContents'
},
label: /[^,\s]+/,
comma: {
match: ',',
next: 'fields'
}
}),
fields: _extends({}, whitespace, {
identifier,
number: /-?\d+/,
hash: '#',
equals: '=',
comma: ',',
quote: {
match: '"',
push: 'quotedLiteral'
},
lbrace: {
match: '{',
push: 'bracedLiteral'
},
rbrace: {
match: /[})]/,
pop: true
}
}),
quotedLiteral: {
lbrace: {
match: '{',
push: 'bracedLiteral'
},
quote: {
match: '"',
pop: true
},
text: {
match: /(?:\\[\\{]|[^{"])+/,
lineBreaks: true
}
},
bracedLiteral: {
lbrace: {
match: '{',
push: 'bracedLiteral'
},
rbrace: {
match: '}',
pop: true
},
text: {
match: /(?:\\[\\{}]|[^{}])+/,
lineBreaks: true
}
}
});
const delimiters = {
'(': ')',
'{': '}'
};
const bibtexGrammar = new Grammar({
Main() {
const entries = [];
while (true) {
while (this.matchToken('junk')) {
this.consumeToken('junk');
}
if (this.matchEndOfFile()) {
break;
}
entries.push(this.consumeRule('Entry'));
}
return entries.filter(Boolean);
},
_() {
let oldToken;
while (oldToken !== this.token) {
oldToken = this.token;
this.consumeToken('whitespace', true);
this.consumeToken('comment', true);
}
},
Entry() {
this.consumeToken('at');
this.consumeRule('_');
const type = (this.matchToken('otherEntryType') ? this.consumeToken('otherEntryType') : this.consumeToken('dataEntryType')).value.toLowerCase();
this.consumeRule('_');
const openBrace = this.consumeToken('lbrace').value;
this.consumeRule('_');
let result;
if (type === 'string') {
const [key, value] = this.consumeRule('Field');
this.state.strings[key] = value;
} else if (type === 'preamble') {
this.consumeRule('Expression');
} else {
const label = this.consumeToken('label').value;
this.consumeRule('_');
this.consumeToken('comma');
this.consumeRule('_');
const properties = this.consumeRule('EntryBody');
result = {
type,
label,
properties
};
}
this.consumeRule('_');
const closeBrace = this.consumeToken('rbrace').value;
if (closeBrace !== delimiters[openBrace]) {
logger.warn('[plugin-bibtex]', `entry started with "${openBrace}", but ends with "${closeBrace}"`);
}
return result;
},
EntryBody() {
const properties = {};
while (this.matchToken('identifier')) {
const [field, value] = this.consumeRule('Field');
properties[field] = value;
this.consumeRule('_');
if (this.consumeToken('comma', true)) {
this.consumeRule('_');
} else {
break;
}
}
return properties;
},
Field() {
const field = this.consumeToken('identifier').value.toLowerCase();
this.consumeRule('_');
this.consumeToken('equals');
this.consumeRule('_');
const value = this.consumeRule('Expression');
return [field, value];
},
Expression() {
let output = this.consumeRule('ExpressionPart');
this.consumeRule('_');
while (this.matchToken('hash')) {
this.consumeToken('hash');
this.consumeRule('_');
output += this.consumeRule('ExpressionPart').toString();
this.consumeRule('_');
}
return output;
},
ExpressionPart() {
if (this.matchToken('identifier')) {
return this.state.strings[this.consumeToken('identifier').value.toLowerCase()] || '';
} else if (this.matchToken('number')) {
return parseInt(this.consumeToken('number'));
} else if (this.matchToken('quote')) {
return this.consumeRule('QuoteString');
} else {
return this.consumeRule('BracketString');
}
},
QuoteString() {
let output = '';
this.consumeToken('quote');
while (!this.matchToken('quote')) {
output += this.consumeRule('Text');
}
this.consumeToken('quote');
return output;
},
BracketString() {
let output = '';
this.consumeToken('lbrace');
while (!this.matchToken('rbrace')) {
output += this.consumeRule('Text');
}
this.consumeToken('rbrace');
return output;
},
Text() {
if (this.matchToken('lbrace')) {
return `{${this.consumeRule('BracketString')}}`;
} else {
return this.consumeToken('text').value;
}
}
}, {
strings: defaultStrings
});
function parse$4(text) {
return bibtexGrammar.parse(lexer$1.reset(text));
}
/**
* @access private
* @constant bibTxtRegex
* @default
*/
const bibTxtRegex = {
splitEntries: /\n\s*(?=\[)/g,
parseEntry: /^\[(.+?)\]\s*(?:\n([\s\S]+))?$/,
splitPairs: /((?=.)\s)*\n\s*/g,
splitPair: /:(.*)/
};
/**
* Parse single Bib.TXT entry
*
* @access private
* @method parseBibTxtEntry
*
* @param {String} entry - The input data
*
* @return {Object} Array of BibTeX-JSON
*/
const parseBibTxtEntry = entry => {
const [, label, pairs] = entry.match(bibTxtRegex.parseEntry) || [];
if (!label || !pairs) {
return {};
} else {
const out = {
type: 'book',
label,
properties: {}
};
pairs.trim().split(bibTxtRegex.splitPairs).filter(v => v).forEach(pair => {
let [key, value] = pair.split(bibTxtRegex.splitPair);
/* istanbul ignore else */
if (value) {
key = key.trim();
value = value.trim();
if (key === 'type') {
out.type = value;
} else {
out.properties[key] = value;
}
}
});
return out;
}
};
/**
* Parse Bib.TXT data
*
* @access private
* @method parseBibTxt
*
* @param {String} src - The input data
*
* @return {Array<Object>} Array of BibTeX-JSON
*/
const parseBibTxt = src => src.trim().split(bibTxtRegex.splitEntries).map(parseBibTxtEntry);
const biblatexTypes = {
source: {
article: 'article-journal',
book: 'book',
mvbook: 'book',
inbook: 'chapter',
bookinbook: 'book',
booklet: 'book',
collection: 'book',
mvcollection: 'book',
incollection: 'chapter',
dataset: 'dataset',
online: 'webpage',
patent: 'patent',
periodical: 'article-journal',
proceedings: 'book',
mvproceedings: 'book',
inproceedings: 'paper-conference',
reference: 'book',
mvreference: 'book',
inreference: 'entry',
report: 'report',
software: 'book',
thesis: 'thesis',
unpublished: 'manuscript',
artwork: 'graphic',
audio: 'song',
image: 'figure',
jurisdiction: 'legal_case',
legislation: 'legislation',
legal: 'treaty',
letter: 'personal_communication',
movie: 'motion_picture',
music: 'musical_score',
review: 'review',
video: 'motion_picture',
conference: 'paper-conference',
electronic: 'webpage',
mastersthesis: 'thesis',
phdthesis: 'thesis',
techreport: 'report',
www: 'webpage'
},
target: {
article: 'article',
'article-journal': 'article',
'article-magazine': 'article',
'article-newspaper': 'article',
bill: 'legislation',
book: 'book',
broadcast: 'audio',
chapter: 'inbook',
dataset: 'dataset',
entry: 'inreference',
'entry-dictionary': 'inreference',
'entry-encyclopedia': 'inreference',
figure: 'artwork',
graphic: 'artwork',
interview: 'audio',
legal_case: 'jurisdiction',
legislation: 'legislation',
manuscript: 'unpublished',
motion_picture: 'movie',
musical_score: 'music',
'paper-conference': 'inproceedings',
patent: 'patent',
personal_communication: 'letter',
post: 'online',
'post-weblog': 'online',
report: 'report',
review: 'review',
'review-book': 'review',
song: 'music',
speech: 'audio',
thesis: 'thesis',
treaty: 'legal',
webpage: 'online'
}
};
const bibtexTypes = {
source: {
article: 'article-journal',
book: 'book',
booklet: 'book',
conference: 'paper-conference',
inbook: 'chapter',
incollection: 'chapter',
inproceedings: 'paper-conference',
mastersthesis: 'thesis',
phdthesis: 'thesis',
proceedings: 'book',
techreport: 'report',
unpublished: 'manuscript'
},
target: {
article: 'article',
'article-journal': 'article',
'article-magazine': 'article',
'article-newspaper': 'article',
book: 'book',
chapter: 'inbook',
manuscript: 'unpublished',
'paper-conference': 'inproceedings',
report: 'techreport',
review: 'article',
'review-book': 'article'
}
};
var config = {
constants,
types: {
biblatex: biblatexTypes,
bibtex: bibtexTypes
},
parse: {
biblatex: true,
strict: false,
sentenceCase: 'never'
},
format: {
useIdAsLabel: false
}
};
//@ts-nocheck
const stopWords = new Set(['the', 'a', 'an']);
const unsafeChars = /(?:<\/?.*?>|[\u0020-\u002F\u003A-\u0040\u005B-\u005E\u0060\u007B-\u007F])+/g;
const unicode$1 = /[^\u0020-\u007F]+/g;
function firstWord(text) {
if (!text) {
return '';
} else {
return text.normalize('NFKD').replace(unicode$1, '').split(unsafeChars).find(word => word.length && !stopWords.has(word.toLowerCase()));
}
}
const name = new Translator([{
source: 'given',
target: 'given'
}, {
source: 'family',
target: 'family'
}, {
source: 'suffix',
target: 'suffix'
}, {
source: 'prefix',
target: 'non-dropping-particle'
}, {
source: 'family',
target: 'literal',
when: {
source: false,
target: {
family: false,
given: false
}
}
}]);
const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
const TYPE = 'BibTeX type';
const LABEL = 'BibTeX label';
const MONTHS = {
jan: 1,
feb: 2,
mar: 3,
apr: 4,
may: 5,
jun: 6,
jul: 7,
aug: 8,
sep: 9,
oct: 10,
nov: 11,
dec: 12,
january: 1,
february: 2,
march: 3,
april: 4,
may: 5,
june: 6,
july: 7,
august: 8,
september: 9,
october: 10,
november: 11,
december: 12
};
const TYPE_KEYS = {
bathesis: "Bachelor's thesis",
mathesis: "Master's thesis",
phdthesis: 'PhD thesis',
candthesis: 'Candidate thesis',
techreport: 'technical report',
resreport: 'research report',
software: 'computer software',
datacd: 'data cd',
audiocd: 'audio cd',
patent: 'patent',
patentde: 'German patent',
patenteu: 'European patent',
patentfr: 'French patent',
patentuk: 'British patent',
patentus: 'U.S. patent',
patreq: 'patent request',
patreqde: 'German patent request',
patreqeu: 'European patent request',
patreqfr: 'French patent request',
patrequk: 'British patent request',
patrequs: 'U.S. patent request'
};
const STANDARD_NUMBERS_PATTERN = /(^(?:ISAN )?(?:[0-9a-f]{4}-){4}[0-9a-z](?:-(?:[0-9a-f]{4}-){2}[0-9a-z])?$)|(^(?:979-?0-?|M-?)(?:\d{9}|(?=[\d-]{11}$)\d+-\d+-\d)$)|(^ISRN .{1,36}$)|(^(?:ISWC )?T-?\d{9}-?\d$)/i;
function parseDate(date) {
const parts = date.split('T')[0].replace(/[?~%]$/, '').split('-');
const year = +parts[0].replace(/^Y(?=-?\d{4}\d+)/, '').replace(/X/g, '0');
const month = +parts[1];
const day = +parts[2];
if (!month || month > 20) {
return [year];
} else if (!day) {
return [year, month];
} else {
return [year, month, day];
}
}
function parseMonth(value) {
if (value == null) {
return [];
}
if (+value) {
return [parseInt(value, 10)];
}
value = value.trim().toLowerCase();
if (value in MONTHS) {
return [MONTHS[value]];
}
const parts = value.split(/\s+/);
let month;
let day;
if (parts[0] in MONTHS) {
month = MONTHS[parts[0]];
day = parseInt(parts[1]);
} else if (parts[1] in MONTHS) {
month = MONTHS[parts[1]];
day = parseInt(parts[0]);
}
return day ? [month, day] : month ? [month] : [];
}
function formatLabel(author, issued, suffix, title) {
let label = '';
if (author && author[0]) {
label += firstWord(author[0].family || author[0].literal);
}
if (issued && issued['date-parts'] && issued['date-parts'][0]) {
label += issued['date-parts'][0][0];
}
if (suffix) {
label += suffix;
} else if (title) {
label += firstWord(title);
}
return label;
}
const Converters = {
PICK: {
toTarget(...args) {
return args.find(Boolean);
},
toSource(value) {
return [value];
}
},
DATE: {
toTarget(date) {
const parts = date.split('/').map(part => part && part !== '..' ? parseDate(part) : undefined);
return isNaN(parts[0][0]) ? {
literal: date
} : {
'date-parts': parts
};
},
toSource(date) {
if ('date-parts' in date) {
return date['date-parts'].map(datePart => datePart.map(datePart => datePart.toString().padStart(2, '0')).join('-')).join('/');
}
}
},
YEAR_MONTH: {
toTarget(year, month, day) {
if (isNaN(+year)) {
return {
literal: year
};
} else if (!isNaN(+day) && !isNaN(+month)) {
return {
'date-parts': [[+year, +month, +day]]
};
} else {
return {
'date-parts': [[+year, ...parseMonth(month)]]
};
}
},
toSource(date) {
if ('date-parts' in date) {
const [year, month, day] = date['date-parts'][0];
return [year.toString(), month ? day ? `${months[month - 1]} ${day}` : month : undefined];
}
}
},
EPRINT: {
toTarget(id, type) {
if (type === 'pubmed') {
return id;
}
},
toSource(id) {
return [id, 'pubmed'];
}
},
HOW_PUBLISHED: {
toTarget(howPublished) {
if (howPublished.startsWith('http')) {
return howPublished;
}
}
},
KEYWORDS: {
toTarget(list) {
return list.join(',');
},
toSource(list) {
return list.split(',');
}
},
LABEL: {
toTarget(label) {
return [label, label];
},
toSource(id, label, author, issued, suffix, title) {
let safeId;
if (id === null) {
safeId = 'null';
} else if (id === undefined) {
safeId = 'undefined';
} else {
safeId = id.toString().replace(unsafeChars, '');
}
if (config.format.useIdAsLabel) {
return safeId;
}
if (label && !unsafeChars.test(label)) {
return label;
} else {
return formatLabel(author, issued, suffix, title) || safeId;
}
}
},
NAMES: {
toTarget(list) {
return list.map(name.convertToTarget);
},
toSource(list) {
return list.map(name.convertToSource);
}
},
STANDARD_NUMBERS: {
toTarget(...args) {
return args.find(Boolean);
},
toSource(number) {
const match = number.toString().match(STANDARD_NUMBERS_PATTERN);
return match ? match.slice(1, 5) : [];
}
},
STATUS: {
toSource(state) {
if (/^(inpreparation|submitted|forthcoming|inpress|prepublished)$/i.test(state)) {
return state;
}
}
},
TITLE: {
toTarget(title, subtitle, addon) {
if (subtitle) {
title += ': ' + subtitle;
}
return title;
},
toSource(title) {
return [title];
}
}
};
const nonSpec = [{
source: 'note',
target: 'accessed',
when: {
source: false,
target: {
note: false,
addendum: false
}
},
convert: {
toSource(accessed) {
return `[Online; accessed ${format$9(accessed)}]`;
}
}
}, {
source: 'numpages',
target: 'number-of-pages',
when: {
source: {
pagetotal: false
},
target: false
}
}, {
source: 'pmid',
target: 'PMID',
when: {
source: {
eprinttype(type) {
return type !== 'pmid';
},
archiveprefix(type) {
return type !== 'pmid';
}
},
target: false
}
}, {
source: 'pmcid',
target: 'PMCID',
when: {
target: false
}
}, {
source: 's2id',
target: 'custom',
convert: {
toTarget(S2ID) {
return {
S2ID
};
},
toSource({
S2ID
}) {
return S2ID;
}
}
}];
const aliases = [{
source: 'annote',
target: 'annote',
when: {
source: {
annotation: false
},
target: false
}
}, {
source: 'address',
target: 'publisher-place',
convert: Converters.PICK,
when: {
source: {
location: false
},
target: false
}
}, {
source: ['eprint', 'archiveprefix'],
target: 'PMID',
convert: Converters.EPRINT,
when: {
source: {
eprinttype: false
},
target: false
}
}, {
source: 'journal',
target: 'container-title',
when: {
source: {
maintitle: false,
booktitle: false,
journaltitle: false
},
target: false
}
}, {
source: 'school',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
institution: false,
organization: false,
publisher: false
},
target: false
}
}];
var biblatex = new Translator([...aliases, ...nonSpec, {
source: 'abstract',
target: 'abstract'
}, {
source: 'urldate',
target: 'accessed',
convert: Converters.DATE
}, {
source: 'annotation',
target: 'annote'
}, {
source: 'author',
target: 'author',
convert: Converters.NAMES
}, {
source: 'library',
target: 'call-number'
}, {
source: 'chapter',
target: 'chapter-number'
}, {
source: 'bookauthor',
target: 'container-author',
convert: Converters.NAMES
},
// Regarding maintitle, booktitle & journaltitle:
// When importing, maintitle is preferred, since it represents the
// larger container. When exporting, booktitle is preferred since
// it is more common, unless number-of-volumes is present indicating a
// multi-volume book.
// journaltitle is only used for articles.
{
source: ['maintitle', 'mainsubtitle', 'maintitleaddon'],
target: 'container-title',
when: {
source: true,
target: {
'number-of-volumes': true
}
},
convert: Converters.TITLE
}, {
source: ['booktitle', 'booksubtitle', 'booktitleaddon'],
target: 'container-title',
when: {
source: {
maintitle: false
},
target: {
'number-of-volumes': false,
type(type) {
return !type || !type.startsWith('article');
}
}
},
convert: Converters.TITLE
}, {
source: ['journaltitle', 'journalsubtitle', 'journaltitleaddon'],
target: 'container-title',
when: {
source: {
[TYPE]: 'article'
},
target: {
type: ['article', 'article-newspaper', 'article-journal', 'article-magazine']
}
},
convert: Converters.TITLE
}, {
source: 'shortjournal',
target: 'container-title-short',
when: {
source: {
[TYPE]: 'article'
},
target: {
type: ['article', 'article-newspaper', 'article-journal', 'article-magazine']
}
}
}, {
source: 'shortjournal',
target: 'journalAbbreviation',
when: {
source: false,
target: {
'container-title-short': false
}
}
}, {
source: 'number',
target: 'collection-number',
when: {
source: {
[TYPE]: ['book', 'mvbook', 'inbook', 'bookinbook', 'suppbook', 'collection', 'mvcollection', 'incollection', 'suppcollection', 'manual', 'suppperiodical', 'proceedings', 'mvproceedings', 'refererence']
},
target: {
type: ['bill', 'book', 'broadcast', 'chapter', 'dataset', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'figure', 'graphic', 'interview', 'legislation', 'legal_case', 'manuscript', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'post', 'post-weblog', 'personal_communication', 'review', 'review-book', 'song', 'speech', 'thesis', 'treaty', 'webpage']
}
}
}, {
source: 'series',
target: 'collection-title'
}, {
source: 'shortseries',
target: 'collection-title-short'
}, {
source: 'doi',
target: 'DOI'
}, {
source: 'edition',
target: 'edition'
}, {
source: 'editor',
target: 'editor',
convert: Converters.NAMES
}, {
source: [TYPE, 'entrysubtype', 'type'],
target: ['type', 'genre'],
convert: {
toTarget(type, subtype, typeKey) {
if (!typeKey) {
if (type === 'mastersthesis') {
typeKey = 'mathesis';
}
if (type === 'phdthesis') {
typeKey = 'phdthesis';
}
if (type === 'techreport') {
typeKey = 'techreport';
}
}
return [biblatexTypes.source[type] || 'document', typeKey || subtype];
},
toSource(type, genre) {
const sourceType = biblatexTypes.target[type] || 'misc';
return genre in TYPE_KEYS ? [sourceType, undefined, genre] : [sourceType, genre];
}
}
}, {
source: TYPE,
when: {
target: {
type: false
}
},
convert: {
toSource() {
return 'misc';
}
}
}, {
source: 'eventdate',
target: 'event-date',
convert: Converters.DATE
}, {
source: 'venue',
target: 'event-place'
}, {
source: ['eventtitle', 'eventtitleaddon'],
target: 'event-title',
convert: Converters.EVENT_TITLE
}, {
source: ['eventtitle', 'eventtitleaddon'],
target: 'event',
convert: Converters.EVENT_TITLE,
when: {
source: false,
target: {
'event-title': false
}
}
}, {
source: LABEL,
target: ['id', 'citation-key', 'author', 'issued', 'year-suffix', 'title'],
convert: Converters.LABEL
}, {
source: 'isbn',
target: 'ISBN'
}, {
source: 'issn',
target: 'ISSN'
}, {
source: 'issue',
target: 'issue',
when: {
source: {
number: false,
[TYPE]: ['article', 'periodical']
},
target: {
issue(issue) {
return typeof issue === 'string' && !issue.match(/\d+/);
},
type: ['article', 'article-journal', 'article-newspaper', 'article-magazine', 'periodical']
}
}
}, {
source: 'number',
target: 'issue',
when: {
source: {
[TYPE]: ['article', 'periodical', 'inproceedings']
},
target: {
issue(issue) {
return issue && (typeof issue === 'number' || issue.match(/\d+/));
},
type: ['article', 'article-journal', 'article-newspaper', 'article-magazine', 'paper-conference', 'periodical']
}
}
}, {
source: 'date',
target: 'issued',
convert: Converters.DATE
}, {
source: ['year', 'month', 'day'],
target: 'issued',
convert: Converters.YEAR_MONTH,
when: {
source: {
date: false
},
target: false
}
}, {
source: 'location',
target: 'jurisdiction',
when: {
source: {
type: 'patent'
},
target: {
type: 'patent'
}
}
}, {
source: 'keywords',
target: 'keyword',
convert: Converters.KEYWORDS
}, {
source: 'language',
target: 'language',
convert: Converters.PICK
}, {
source: 'langid',
target: 'language',
when: {
source: {
language: false
},
target: false
}
}, {
source: 'note',
target: 'note'
}, {
source: 'addendum',
target: 'note',
when: {
source: {
note: false
},
target: false
}
}, {
source: 'eid',
target: 'number',
when: {
target: {
type: ['article-journal']
}
}
}, {
source: ['isan', 'ismn', 'isrn', 'iswc'],
target: 'number',
convert: Converters.STANDARD_NUMBERS,
when: {
source: {
[TYPE](type) {
return type !== 'patent';
}
},
target: {
type(type) {
return type !== 'patent';
}
}
}
}, {
source: 'number',
target: 'number',
when: {
source: {
[TYPE]: ['patent', 'report', 'techreport', 'legislation']
},
target: {
type: ['patent', 'report', 'legislation']
}
}
}, {
source: 'origdate',
target: 'original-date',
convert: Converters.DATE
}, {
source: 'origlocation',
target: 'original-publisher-place',
convert: Converters.PICK
}, {
source: 'origpublisher',
target: 'original-publisher',
convert: Converters.PICK
}, {
source: 'origtitle',
target: 'original-title'
}, {
source: 'pages',
target: 'page',
when: {
source: {
bookpagination: [undefined, 'page']
}
},
convert: Converters.PAGES
}, {
source: 'pagetotal',
target: 'number-of-pages'
}, {
source: 'part',
target: 'part-number'
}, {
source: ['eprint', 'eprinttype'],
target: 'PMID',
convert: Converters.EPRINT
}, {
source: 'location',
target: 'publisher-place',
convert: Converters.PICK
}, {
source: 'publisher',
target: 'publisher',
convert: Converters.PICK,
when: {
source: true,
target: {
// All except:
// - thesis, report: institution
// - webpage: organization
type: ['article', 'article-journal', 'article-magazine', 'article-newspaper', 'bill', 'book', 'broadcast', 'chapter', 'classic', 'collection', 'dataset', 'document', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'event', 'figure', 'graphic', 'hearing', 'interview', 'legal_case', 'legislation', 'manuscript', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'paper-conference', 'patent', 'performance', 'periodical', 'personal_communication', 'post', 'post-weblog', 'regulation', 'review', 'review-book', 'software', 'song', 'speech', 'standard', 'treaty']
}
}
}, {
source: 'organization',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
publisher: false
},
target: {
type: 'webpage' // TODO paper-conference?
}
}
}, {
source: 'institution',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
publisher: false,
organization: false
},
target: {
type: ['report', 'thesis']
}
}
}, {
source: 'howpublished',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
howpublished(howPublished) {
return howPublished && !howPublished.startsWith('http');
},
publisher: false,
organization: false,
institution: false
},
target: {
type: 'manuscript'
}
}
}, {
source: ['pages', 'bookpagination'],
target: 'section',
when: {
source: {
bookpagination: 'section'
},
target: {
page: false
}
},
convert: {
toTarget(section) {
return section;
},
toSource(section) {
return [section, 'section'];
}
}
}, {
source: 'pubstate',
target: 'status',
convert: Converters.STATUS
}, {
source: 'shorttitle',
target: 'title-short'
}, {
source: 'shorttitle',
target: 'shortTitle',
when: {
source: false,
target: {
'title-short': false
}
}
}, {
source: ['title', 'subtitle', 'titleaddon'],
target: 'title',
convert: Converters.TITLE
}, {
source: 'translator',
target: 'translator',
convert: Converters.NAMES
}, {
source: 'url',
target: 'URL'
}, {
source: 'howpublished',
target: 'URL',
convert: Converters.HOW_PUBLISHED,
when: {
source: {
url: false
},
target: false
}
}, {
source: 'version',
target: 'version'
}, {
source: 'volume',
target: 'volume'
}, {
source: 'volumes',
target: 'number-of-volumes'
}, {
source: ['issuetitle', 'issuesubtitle', 'issuetitleaddon'],
target: 'volume-title',
convert: Converters.TITLE
}]);
var bibtex = new Translator([{
source: 'note',
target: 'accessed',
when: {
source: false,
target: {
note: false
}
},
convert: {
toSource(accessed) {
return `[Online; accessed ${format$9(accessed)}]`;
}
}
}, {
source: 'annote',
target: 'annote'
}, {
source: 'address',
target: 'publisher-place',
convert: Converters.PICK
}, {
source: 'author',
target: 'author',
convert: Converters.NAMES
}, {
source: 'chapter',
target: 'chapter-number'
}, {
source: 'number',
target: 'collection-number',
when: {
source: {
[TYPE]: ['book', 'mvbook', 'inbook', 'collection', 'mvcollection', 'incollection', 'suppcollection', 'manual', 'suppperiodical', 'proceedings', 'mvproceedings', 'refererence']
},
target: {
type: ['bill', 'book', 'broadcast', 'chapter', 'dataset', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'figure', 'graphic', 'interview', 'legislation', 'legal_case', 'manuscript', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'post', 'post-weblog', 'personal_communication', 'review', 'review-book', 'song', 'speech', 'thesis', 'treaty', 'webpage']
}
}
}, {
source: 'series',
target: 'collection-title'
}, {
source: 'booktitle',
target: 'container-title',
when: {
target: {
type: ['chapter', 'paper-conference']
}
}
}, {
source: 'journal',
target: 'container-title',
when: {
source: {
[TYPE]: 'article'
},
target: {
type: ['article', 'article-newspaper', 'article-journal', 'article-magazine']
}
}
}, {
source: 'edition',
target: 'edition'
}, {
source: 'editor',
target: 'editor',
convert: Converters.NAMES
}, {
source: LABEL,
target: ['id', 'citation-key', 'author', 'issued', 'year-suffix', 'title'],
convert: Converters.LABEL
}, {
source: 'number',
target: 'issue',
when: {
source: {
[TYPE]: ['article', 'periodical', 'inproceedings']
},
target: {
issue(issue) {
return typeof issue === 'number' || typeof issue === 'string' && issue.match(/\d+/);
},
type: ['article', 'article-journal', 'article-newspaper', 'article-magazine', 'paper-conference', 'periodical']
}
}
}, {
source: ['year', 'month', 'day'],
target: 'issued',
convert: Converters.YEAR_MONTH
}, {
source: 'note',
target: 'note'
}, {
source: 'number',
target: 'number',
when: {
source: {
[TYPE]: ['patent', 'report', 'techreport']
},
target: {
type: ['patent', 'report']
}
}
}, {
source: 'pages',
target: 'page',
convert: Converters.PAGES
}, {
source: 'publisher',
target: 'publisher',
convert: Converters.PICK,
when: {
target: {
// All except manuscript, paper-conference, techreport and thesis
type: ['article', 'article-journal', 'article-magazine', 'article-newspaper', 'bill', 'book', 'broadcast', 'chapter', 'classic', 'collection', 'dataset', 'document', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'event', 'figure', 'graphic', 'hearing', 'interview', 'legal_case', 'legislation', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'patent', 'performance', 'periodical', 'personal_communication', 'post', 'post-weblog', 'regulation', 'review', 'review-book', 'software', 'song', 'speech', 'standard', 'treaty', 'webpage']
}
}
}, {
source: 'organization',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
publisher: false
},
target: {
type: 'paper-conference'
}
}
}, {
source: 'institution',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
publisher: false,
organization: false
},
target: {
type: 'report'
}
}
}, {
source: 'school',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
institution: false,
organization: false,
publisher: false
},
target: {
type: 'thesis'
}
}
}, {
source: 'howpublished',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
howpublished(howPublished) {
return howPublished && !howPublished.startsWith('http');
},
publisher: false,
organization: false,
institution: false,
school: false
},
target: {
type: 'manuscript'
}
}
}, {
source: 'title',
target: 'title'
}, {
source: [TYPE, 'type'],
target: ['type', 'genre'],
convert: {
toTarget(sourceType, subType) {
/* istanbul ignore next */
const type = bibtexTypes.source[sourceType] || 'document';
if (subType) {
return [type, subType];
} else if (sourceType === 'mastersthesis') {
return [type, "Master's thesis"];
} else if (sourceType === 'phdthesis') {
return [type, 'PhD thesis'];
} else {
return [type];
}
},
toSource(targetType, genre) {
const type = bibtexTypes.target[targetType] || 'misc';
if (/^(master'?s|diploma) thesis$/i.test(genre)) {
return ['mastersthesis'];
} else if (/^(phd|doctoral) thesis$/i.test(genre)) {
return ['phdthesis'];
} else {
return [type, genre];
}
}
}
}, {
source: TYPE,
when: {
target: {
type: false
}
},
convert: {
toSource() {
return 'misc';
}
}
}, {
source: 'howpublished',
target: 'URL',
convert: Converters.HOW_PUBLISHED,
when: {
target: {
publisher: false
}
}
}, {
source: 'volume',
target: 'volume'
}]);
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
var target = _objectWithoutPropertiesLoose(source, excluded);
var key, i;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, 'string');
return typeof key === 'symbol' ? key : String(key);
}
function _toPrimitive(input, hint) {
if (typeof input !== 'object' || input === null) return input;
var prim = input[Symbol.toPrimitive];
if (prim !== undefined) {
var res = prim.call(input, hint || 'default');
if (typeof res !== 'object') return res;
throw new TypeError('@@toPrimitive must return a primitive value.');
}
return (hint === 'string' ? String : Number)(input);
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) {
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function crossref(entry, registry) {
if (entry.crossref in registry) {
const parent = registry[entry.crossref].properties;
if (parent === entry) {
return entry;
}
return Object.assign({}, crossref(parent, registry), entry);
}
return entry;
}
function _parse(input, spec) {
const registry = {};
for (const entry of input) {
registry[entry.label] = entry;
}
return input.map(({
type,
label,
properties
}) => spec.convertToTarget(_objectSpread({
[TYPE]: type,
[LABEL]: label
}, crossref(properties, registry))));
}
function _format(input, spec) {
return input.map(entry => {
const _spec$convertToSource = spec.convertToSource(entry),
{
[TYPE]: type,
[LABEL]: label
} = _spec$convertToSource,
properties = _objectWithoutProperties(_spec$convertToSource, [TYPE, LABEL].map(_toPropertyKey));
return {
type,
label,
properties
};
});
}
function parseBibtex$1(input) {
return _parse(input, bibtex);
}
function formatBibtex$1(input) {
return _format(input, bibtex);
}
function parse$3(input) {
return _parse(input, biblatex);
}
function format$5(input) {
return _format(input, biblatex);
}
// @ts-nocheck
/**
* @access private
* @param {String}
* @returns {Boolean|null} true if uppercase, false if lowercase, null if neither
*/
function getStringCase(string) {
const a = string.toUpperCase();
const b = string.toLowerCase();
for (let i = 0; i < string.length; i++) {
if (a[i] !== b[i]) {
return a[i] === string[i];
}
}
return null;
}
/**
* @access private
* @param {Array<Object>} parts
* @return {String|undefined}
*/
function formatNameParts(parts) {
if (parts.length === 0) {
return undefined;
}
let piece = '';
while (parts.length > 1) {
const {
value,
hyphenated
} = parts.shift();
piece += value + (hyphenated ? '-' : ' ');
}
const output = piece + parts[0].value;
return output[0] && output;
}
/**
* @access private
* @param {Array<Object>} parts
* @param {Boolean} [orderGiven=true] - also consider the given name
* @return {Array<String>}
*/
function orderNameParts(parts, /* istanbul ignore next */orderGiven = true) {
const given = [];
const undecided = [];
if (orderGiven) {
while (parts.length > 1 && parts[0].upperCase !== false) {
given.push(...undecided);
undecided.length = 0;
while (parts.length > 1 && parts[0].upperCase !== false && !parts[0].hyphenated) {
given.push(parts.shift());
}
while (parts.length > 0 && parts[0].upperCase !== false && parts[0].hyphenated) {
undecided.push(parts.shift());
}
}
}
const prefix = [];
const family = [];
while (parts.length > 1) {
prefix.push(...family);
family.length = 0;
while (parts.length > 1 && parts[0].upperCase === false) {
prefix.push(parts.shift());
}
while (parts.length > 0 && parts[0].upperCase !== false) {
family.push(parts.shift());
}
}
if (undecided.length) {
family.unshift(...undecided);
}
if (parts.length) {
family.push(parts[0]);
}
return [formatNameParts(given), formatNameParts(prefix), formatNameParts(family)];
}
/**
* @access private
* @param {Array<Array<Object>>} pieces
* @return {Object}
*/
function orderNamePieces(pieces) {
if (pieces[0][0].label) {
const _name = {};
for (const [{
value,
label
}] of pieces) {
_name[label] = value;
}
return _name;
}
const name = {};
const [given, prefix, family] = orderNameParts(pieces[0], pieces.length === 1);
if (family) {
name.family = family;
}
if (prefix) {
name.prefix = prefix;
}
if (pieces.length === 3) {
name.given = formatNameParts(pieces[2]);
name.suffix = formatNameParts(pieces[1]);
} else if (pieces.length === 2) {
name.given = formatNameParts(pieces[1]);
} else if (given) {
name.given = given;
}
return name;
}
const text = {
command: {
match: /\\(?:[a-zA-Z]+|.) */,
type: moo.keywords({
commandBegin: '\\begin',
commandEnd: '\\end'
}),
value: s => s.slice(1).trim()
},
lbrace: {
match: '{',
push: 'bracedLiteral'
},
mathShift: {
match: '$',
push: 'mathLiteral'
},
whitespace: {
match: /[\s]+|~/,
lineBreaks: true,
// \xa0 = Non-breakable space
value(token) {
return token === '~' ? '\xa0' : ' ';
}
}
};
const lexer = moo.states({
stringLiteral: _extends({}, text, {
text: /[^{$}\s~\\]+/
}),
namesLiteral: _extends({
and: /\s+[aA][nN][dD]\s+/,
comma: ',',
hyphen: '-',
equals: '='
}, text, {
text: /[^{$}\s~\\,=-]+/
}),
listLiteral: _extends({
and: /\s+and\s+/
}, text, {
text: /[^{$}\s~\\]+/
}),
separatedLiteral: _extends({
comma: ','
}, text, {
text: /[^{$}\s~\\,]+/
}),
bracedLiteral: _extends({}, text, {
rbrace: {
match: '}',
pop: true
},
text: /[^{$}\s~\\]+/
}),
mathLiteral: _extends({}, text, {
mathShift: {
match: '$',
pop: true
},
script: /[\^_]/,
text: /[^{$}\s~\\^_]+/
})
});
function flattenConsString(string) {
return string;
}
function applyFormatting(text, format) {
if (format in formatting) {
return text && formatting[format].join(text);
} else {
return text;
}
}
const valueGrammar = new Grammar({
String() {
let output = '';
while (!this.matchEndOfFile()) {
output += this.consumeRule('Text');
}
return flattenConsString(output);
},
StringNames() {
const list = [];
while (true) {
this.consumeToken('whitespace', true);
list.push(this.consumeRule('Name'));
this.consumeToken('whitespace', true);
if (this.matchEndOfFile()) {
return list;
} else {
this.consumeToken('and');
}
}
},
Name() {
const pieces = [];
while (true) {
pieces.push(this.consumeRule('NamePiece'));
if (this.matchEndOfFile() || this.matchToken('and')) {
return orderNamePieces(pieces);
} else {
this.consumeToken('comma');
this.consumeToken('whitespace', true);
}
}
},
NamePiece() {
const parts = [];
while (true) {
const part = this.consumeRule('NameToken');
if (part.label) {
part.label = formatNameParts([...parts, {
value: part.label
}]);
return [part];
}
parts.push(part);
if (this.matchEndOfFile() || this.matchToken('and') || this.matchToken('comma')) {
return parts;
} else {
while (this.matchToken('hyphen') || this.matchToken('whitespace')) {
this.consumeToken();
}
}
}
},
NameToken() {
let upperCase = null;
let value = '';
while (true) {
// If needed, test regular text for case
if (upperCase === null && this.matchToken('text')) {
const text = this.consumeToken().value;
value += text;
upperCase = getStringCase(text);
// If end of name part, return up
} else if (this.matchEndOfFile() || this.matchToken('and') || this.matchToken('comma') || this.matchToken('whitespace')) {
return {
value,
upperCase
};
// Same for hyphen, but note it is hyphenated
} else if (this.matchToken('hyphen')) {
return {
value,
upperCase,
hyphenated: true
};
// If equals we are in BibLaTeX extended mode
// 'family=Last, given=First, prefix=von'
} else if (this.matchToken('equals')) {
this.consumeToken('equals');
const text = this.consumeRule('NamePiece');
if (text[0].label) {
value += '=' + text[0].label;
}
return {
value: formatNameParts(text),
label: value
};
// Else consume other text
} else {
value += this.consumeRule('Text');
}
}
},
StringList() {
const list = [];
while (!this.matchEndOfFile()) {
let output = '';
while (!this.matchEndOfFile() && !this.matchToken('and')) {
output += this.consumeRule('Text');
}
list.push(flattenConsString(output));
this.consumeToken('and', true);
}
return list.length === 1 ? list[0] : list;
},
StringSeparated() {
const list = [];
while (!this.matchEndOfFile()) {
let output = '';
while (!this.matchEndOfFile() && !this.matchToken('comma')) {
output += this.consumeRule('Text');
}
list.push(output.trim());
this.consumeToken('comma', true);
this.consumeToken('whitespace', true);
}
return list;
},
StringVerbatim() {
let output = '';
while (!this.matchEndOfFile()) {
output += this.consumeToken().text;
}
return flattenConsString(output);
},
StringUri() {
const uri = this.consumeRule('StringVerbatim');
try {
if (decodeURI(uri) === uri) {
return encodeURI(uri);
} else {
return uri;
}
} catch (e) {
// malformed URI
return encodeURI(uri);
}
},
StringTitleCase() {
this.state.sentenceCase = true;
let output = '';
while (!this.matchEndOfFile()) {
output += this.consumeRule('Text');
}
return flattenConsString(output);
},
BracketString() {
var _this$state;
let output = '';
this.consumeToken('lbrace');
const sentenceCase = this.state.sentenceCase;
// If the bracket string starts with a command the sentence case behavior
// is maintained within the brackets.
this.state.sentenceCase = sentenceCase && this.matchToken('command');
(_this$state = this.state).partlyLowercase && (_this$state.partlyLowercase = this.state.sentenceCase);
while (!this.matchToken('rbrace')) {
output += this.consumeRule('Text');
}
// topLevel meaning that the bracket string is not top level but a direct
// child of the top level value.
const topLevel = sentenceCase && !this.state.sentenceCase;
// Protect the case of the bracket string if it is a direct child of the top
// level, and the string is partly lowercase.
const protectCase = topLevel && this.state.partlyLowercase;
// Restore the sentence case of the outside of the brackets.
this.state.sentenceCase = sentenceCase;
this.consumeToken('rbrace');
return protectCase ? applyFormatting(output, 'nocase') : output;
},
MathString() {
let output = '';
this.consumeToken('mathShift');
while (!this.matchToken('mathShift')) {
if (this.matchToken('script')) {
const script = this.consumeToken('script').value;
const text = this.consumeRule('Text').split('');
if (text.every(char => char in mathScripts[script])) {
output += text.map(char => mathScripts[script][char]).join('');
} else {
const formatName = mathScriptFormatting[script];
output += formatting[formatName].join(text.join(''));
}
continue;
}
if (this.matchToken('command')) {
const command = this.token.value;
if (command in mathScriptFormatting) {
this.consumeToken('command');
const text = this.consumeRule('BracketString');
output += applyFormatting(text, mathScriptFormatting[command]);
continue;
}
}
output += this.consumeRule('Text');
}
this.consumeToken('mathShift');
return output;
},
Text() {
/* eslint-disable padded-blocks */
if (this.matchToken('lbrace')) {
return this.consumeRule('BracketString');
} else if (this.matchToken('mathShift')) {
return this.consumeRule('MathString');
} else if (this.matchToken('whitespace')) {
return this.consumeToken('whitespace').value;
} else if (this.matchToken('commandBegin')) {
return this.consumeRule('EnclosedEnv');
} else if (this.matchToken('command')) {
return this.consumeRule('Command');
}
/* eslint-enable padded-blocks */
const text = this.consumeToken('text').value.replace(ligaturePattern, ligature => ligatures[ligature]);
const afterPunctuation = this.state.afterPunctuation;
this.state.afterPunctuation = /[?!.:]$/.test(text);
// If the text fragment is not topLevel and has a case, check whether lowercase
if (!this.state.sentenceCase) {
var _this$state2;
(_this$state2 = this.state).partlyLowercase || (_this$state2.partlyLowercase = text === text.toLowerCase() && text !== text.toUpperCase());
return text;
}
// Unicode-safe splitting (as in, accounting for surrogate pairs)
const [first, ...otherCharacters] = text;
const rest = otherCharacters.join('');
const restLowerCase = rest.toLowerCase();
// Word case should be preserved for proper nouns (e.g. those with capital
// letters in other places than the first letter).
if (rest !== restLowerCase) {
return text;
}
if (!afterPunctuation) {
return text.toLowerCase();
}
return first + restLowerCase;
// return first.toUpperCase() + restLowerCase
},
Command() {
const commandToken = this.consumeToken('command');
const command = commandToken.value;
// formatting envs
if (command in formattingEnvs) {
const text = this.consumeRule('Env');
const format = formattingEnvs[command];
return applyFormatting(text, format);
// formatting commands
} else if (command in formattingCommands) {
const text = this.consumeRule('BracketString');
const format = formattingCommands[command];
return applyFormatting(text, format);
// commands
} else if (command in commands) {
return commands[command];
// diacritics
} else if (command in diacritics && !this.matchEndOfFile()) {
const text = this.consumeRule('Text');
const diacritic = text[0] + diacritics[command];
return diacritic.normalize('NFC') + text.slice(1);
// argument commands
} else if (command in argumentCommands) {
const func = argumentCommands[command];
const args = [];
let arity = func.length;
while (arity-- > 0) {
this.consumeToken('whitespace', true);
args.push(this.consumeRule('BracketString'));
}
return func(...args);
// escapes
} else if (/^[&%$#_{}]$/.test(command)) {
return commandToken.text.slice(1);
// unknown commands
} else {
return commandToken.text;
}
},
Env() {
let output = '';
while (!this.matchEndOfFile() && !this.matchToken('rbrace')) {
output += this.consumeRule('Text');
}
return output;
},
EnclosedEnv() {
this.consumeToken('commandBegin');
const beginEnv = this.consumeRule('BracketString');
let output = '';
while (!this.matchToken('commandEnd')) {
output += this.consumeRule('Text');
}
const end = this.consumeToken('commandEnd');
const endEnv = this.consumeRule('BracketString');
if (beginEnv !== endEnv) {
throw new SyntaxError(this.lexer.formatError(end, `environment started with "${beginEnv}", ended with "${endEnv}"`));
}
return applyFormatting(output, formattingEnvs[beginEnv]);
}
}, {
sentenceCase: false,
partlyLowercase: false,
afterPunctuation: true
});
function singleLanguageIsEnglish(language) {
return sentenceCaseLanguages.includes(language.toLowerCase());
}
function isEnglish(languages) {
if (Array.isArray(languages)) {
return languages.every(singleLanguageIsEnglish);
}
return singleLanguageIsEnglish(languages);
}
function getMainRule(fieldType, languages) {
if (fieldType[1] === 'name') {
/* istanbul ignore next: does not exist */
return fieldType[0] === 'list' ? 'StringNames' : 'Name';
}
if (fieldType[1] === 'title') {
const option = config.parse.sentenceCase;
if (option === 'always' || option === 'english' && isEnglish(languages)) {
return 'StringTitleCase';
} else {
return 'String';
}
}
switch (fieldType[0] === 'field' ? fieldType[1] : fieldType[0]) {
case 'list':
return 'StringList';
case 'separated':
return 'StringSeparated';
case 'verbatim':
return 'StringVerbatim';
case 'uri':
return 'StringUri';
case 'title':
case 'literal':
default:
return 'String';
}
}
function getLexerState(fieldType) {
if (fieldType[1] === 'name') {
return 'namesLiteral';
}
switch (fieldType[0]) {
case 'list':
return 'listLiteral';
case 'separated':
return 'separatedLiteral';
case 'field':
default:
return 'stringLiteral';
}
}
function parse$2(text, field, languages = []) {
const fieldType = fieldTypes[field] || [];
return valueGrammar.parse(lexer.reset(text, {
state: getLexerState(fieldType),
line: 0,
col: 0
}), getMainRule(fieldType, languages));
}
function validate(entries, requirements) {
const problems = [];
for (const {
type,
label,
properties
} of entries) {
if (type in requirements) {
const missing = [];
for (const field of requirements[type]) {
if (Array.isArray(field) && !field.some(field => field in properties)) {
missing.push(field.join('/'));
} else if (typeof field === 'string' && !(field in properties)) {
missing.push(field);
}
}
if (missing.length) {
problems.push([label, `missing fields: ${missing.join(', ')}`]);
}
} else {
problems.push([label, `invalid type: "${type}"`]);
}
}
if (problems.length) {
throw new RangeError(['Invalid entries:'].concat(problems.map(([label, problem]) => ` - ${label} has ${problem}`)).join('\n'));
}
}
function parseEntryValues(entry) {
const output = {};
if ('language' in entry.properties) {
output.language = parse$2(entry.properties.language, 'language');
}
for (const property in entry.properties) {
const value = entry.properties[property];
if (value === '') {
continue;
}
output[property] = parse$2(value + '', property, output.language);
}
return _extends({}, entry, {
properties: output
});
}
function parse$1(entries) {
if (config.parse.strict) {
validate(entries, required.biblatex);
}
return parse$3(entries.map(parseEntryValues));
}
function parseBibtex(entries) {
if (config.parse.strict) {
validate(entries, required.bibtex);
}
return parseBibtex$1(entries.map(parseEntryValues));
}
/**
* @constant {module:@citation-js/core.plugins~pluginRef} ref
* @memberof module:@citation-js/plugin-bibtex
* @default '@bibtex'
*/
const ref = '@bibtex';
/**
* @namespace formats
* @type module:@citation-js/core.plugins.input~format,module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex
*/
const formats = {
/**
* BibLaTeX file.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@biblatex/text': {
parse: parse$4,
parseType: {
dataType: 'String',
predicate: /@\s{0,5}[A-Za-z]{1,13}\s{0,5}\{\s{0,5}[^@{}"=,\\\s]{0,100}\s{0,5},[\s\S]*\}/
}
},
/**
* BibLaTeX object.
*
* ```js
* {
* type: '...',
* label: '...',
* properties: {...}
* }
* ```
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@biblatex/entry+object': {
parse(input) {
return parse$1([input]);
},
parseType: {
dataType: 'SimpleObject',
propertyConstraint: {
props: ['type', 'label', 'properties']
}
}
},
/**
* Array of {@link module:@citation-js/plugin-bibtex.formats."@biblatex/entries+list"|BibLaTeX objects}.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@biblatex/entries+list': {
parse: parse$1,
parseType: {
elementConstraint: '@biblatex/entry+object'
}
},
/**
* BibTeX file.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~format} outputs
*/
'@bibtex/text': {
parse: parse$4,
outputs: '@bibtex/entries+list'
},
/**
* BibTeX object.
*
* ```js
* {
* type: '...',
* label: '...',
* properties: {...}
* }
* ```
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
*/
'@bibtex/entry+object': {
parse(input) {
return parseBibtex([input]);
}
},
/**
* Array of {@link module:@citation-js/plugin-bibtex.formats."@bibtex/entries+list"|BibTeX objects}.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
*/
'@bibtex/entries+list': {
parse: parseBibtex
},
/**
* Bib.TXT file.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@bibtxt/text': {
parse: parseBibTxt,
parseType: {
dataType: 'String',
predicate: /^\s*(\[(?!\s*[{[]).*?\]\s*(\n\s*[^[]((?!:)\S)+\s*:\s*.+?\s*)*\s*)+$/
}
}
};
//@ts-nocheck
const unicode = {};
for (const command in commands) {
unicode[commands[command]] = command;
}
for (const diacritic in diacritics) {
unicode[diacritics[diacritic]] = diacritic;
}
for (const ligature in ligatures) {
unicode[ligatures[ligature]] = ligature;
}
const UNSAFE_UNICODE = /[^a-zA-Z0-9\s!"#%&'()*+,\-./:;=?@[\]{}\u0300-\u0308\u030a-\u030c\u0332\u0323\u0327\u0328\u0361\u0326]/g;
const DIACRITIC_PATTERN = /.[\u0300-\u0308\u030a-\u030c\u0332\u0323\u0327\u0328\u0361\u0326]+/g;
const listDelimiters = {
separated: ',',
list: ' and '
};
const richTextMappings = {
i: '\\textit{',
b: '\\textbf{',
sc: '\\textsc{',
sup: '\\textsuperscript{',
sub: '\\textsubscript{',
'span style="font-variant:small-caps;"': '\\textsc{',
'span class="nocase"': '{'
};
function escapeValue(value) {
return value.normalize('NFKD').replace(UNSAFE_UNICODE, char => char in unicode ? unicode[char] in ligatures ? unicode[char] : `\\${unicode[char]}{}` : '').replace(DIACRITIC_PATTERN, match => Array.from(match).reduce((subject, diacritic) => `{\\${unicode[diacritic]} ${subject}}`));
}
function formatRichText(value) {
const closingTags = [];
let tokens = value.split(/<(\/?(?:i|b|sc|sup|sub|span)|span .*?)>/g);
tokens = tokens.map((token, index) => {
if (index % 2 === 0) {
return escapeValue(token);
} else if (token in richTextMappings) {
closingTags.push('/' + token.split(' ')[0]);
return richTextMappings[token];
} else if (token === closingTags[closingTags.length - 1]) {
closingTags.pop();
return '}';
} else {
return '';
}
});
return tokens.join('');
}
function formatName(name) {
if (name.family && !name.prefix && !name.given & !name.suffix) {
return name.family.includes(listDelimiters.list) ? name.family : `{${name.family}}`;
}
const parts = [''];
if (name.prefix && name.family) {
parts[0] += name.prefix + ' ';
}
if (name.family) {
parts[0] += name.family;
}
if (name.suffix) {
parts.push(name.suffix);
parts.push(name.given || '');
} else {
parts.push(name.given);
}
return escapeValue(parts.join(', ').trim());
}
function formatTitle(title) {
return formatRichText(title).split(/(:\s*)/).map((part, i) => i % 2 ? part : part.replace(/(?!^)\b[a-z]*[A-Z].*?\b/g, '{$&}')).join('');
}
function formatSingleValue(value, valueType) {
switch (valueType) {
case 'title':
return formatTitle(value);
case 'literal':
return formatRichText(value.toString());
case 'name':
return formatName(value);
case 'verbatim':
case 'uri':
return value.toString();
default:
return escapeValue(value.toString());
}
}
function formatList(values, valueType, listType) {
const delimiter = listDelimiters[listType];
return values.map(value => {
const formatted = formatSingleValue(value, valueType);
return formatted.includes(delimiter) ? `{${formatted}}` : formatted;
}).join(delimiter);
}
function format$4(field, value) {
if (!(field in fieldTypes)) {
return formatSingleValue(value, 'verbatim');
}
const [listType, valueType] = fieldTypes[field];
if (listType in listDelimiters) {
return formatList(value, valueType, listType);
} else {
return formatSingleValue(value, valueType);
}
}
function formatEntryValues({
type,
label,
properties
}) {
const output = {};
for (const property in properties) {
const value = properties[property];
output[property] = format$4(property, value);
}
return {
type,
label,
properties: output
};
}
function format$3(entries) {
return format$5(entries).map(formatEntryValues);
}
function formatBibtex(entries) {
return formatBibtex$1(entries).map(formatEntryValues);
}
function formatEntry$1({
type,
label,
properties
}, dict) {
const fields = Object.entries(properties).map(([field, value]) => dict.listItem.join(`${field} = {${value}},`));
return dict.entry.join(`@${type}{${label},${dict.list.join(fields.join(''))}}`);
}
function format$2(src, dict) {
const entries = src.map(entry => formatEntry$1(entry, dict)).join('');
return dict.bibliographyContainer.join(entries);
}
function formatEntry({
type,
label,
properties
}, dict) {
const fields = Object.entries(properties).concat([['type', type]]).map(([field, value]) => dict.listItem.join(`${field}: ${value}`));
return dict.entry.join(`[${label}]${dict.list.join(fields.join(''))}`);
}
function format$1(src, dict) {
const entries = src.map(entry => formatEntry(entry, dict)).join('\n');
return dict.bibliographyContainer.join(entries);
}
const factory = function factory(mapper, formatter) {
return function (data, opts = {}) {
const {
type,
format = type || 'text'
} = opts;
data = mapper(data);
if (format === 'object') {
return data;
} else if (has$2(format)) {
return formatter(data, get$1(format), opts);
} else {
throw new RangeError(`Output dictionary "${format}" not available`);
}
};
};
var output = {
bibtex: factory(formatBibtex, format$2),
biblatex: factory(format$3, format$2),
bibtxt: factory(formatBibtex, format$1)
};
add(ref, {
input: formats,
output,
config
});
const defaultLocales = {
'en-US': `<?xml version="1.0" encoding="utf-8"?><locale xmlns="http://purl.org/net/xbiblio/csl" version="1.0" xml:lang="en-US"><info><translator><name>Andrew Dunning</name></translator><translator><name>Sebastian Karcher</name></translator><translator><name>Rintze M. Zelle</name></translator><translator><name>Denis Meier</name></translator><translator><name>Brenton M. Wiernik</name></translator><rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights><updated>2015-10-10T23:31:02+00:00</updated></info><style-options punctuation-in-quote="true"/><date form="text"><date-part name="month" suffix=" "/><date-part name="day" suffix=", "/><date-part name="year"/></date><date form="numeric"><date-part name="month" form="numeric-leading-zeros" suffix="/"/><date-part name="day" form="numeric-leading-zeros" suffix="/"/><date-part name="year"/></date><terms><term name="advance-online-publication">advance online publication</term><term name="album">album</term><term name="audio-recording">audio recording</term><term name="film">film</term><term name="henceforth">henceforth</term><term name="loc-cit">loc. cit.</term><term name="no-place">no place</term><term name="no-place" form="short">n.p.</term><term name="no-publisher">no publisher</term><term name="no-publisher" form="short">n.p.</term><term name="on">on</term><term name="op-cit">op. cit.</term><term name="original-work-published">original work published</term><term name="personal-communication">personal communication</term><term name="podcast">podcast</term><term name="podcast-episode">podcast episode</term><term name="preprint">preprint</term><term name="radio-broadcast">radio broadcast</term><term name="radio-series">radio series</term><term name="radio-series-episode">radio series episode</term><term name="special-issue">special issue</term><term name="special-section">special section</term><term name="television-broadcast">television broadcast</term><term name="television-series">television series</term><term name="television-series-episode">television series episode</term><term name="video">video</term><term name="working-paper">working paper</term><term name="accessed">accessed</term><term name="and">and</term><term name="and others">and others</term><term name="anonymous">anonymous</term><term name="anonymous" form="short">anon.</term><term name="at">at</term><term name="available at">available at</term><term name="by">by</term><term name="circa">circa</term><term name="circa" form="short">c.</term><term name="cited">cited</term><term name="edition"><single>edition</single><multiple>editions</multiple></term><term name="edition" form="short">ed.</term><term name="et-al">et al.</term><term name="forthcoming">forthcoming</term><term name="from">from</term><term name="ibid">ibid.</term><term name="in">in</term><term name="in press">in press</term><term name="internet">internet</term><term name="interview">interview</term><term name="letter">letter</term><term name="no date">no date</term><term name="no date" form="short">n.d.</term><term name="online">online</term><term name="presented at">presented at the</term><term name="reference"><single>reference</single><multiple>references</multiple></term><term name="reference" form="short"><single>ref.</single><multiple>refs.</multiple></term><term name="retrieved">retrieved</term><term name="scale">scale</term><term name="version">version</term><term name="article">preprint</term><term name="article-journal">journal article</term><term name="article-magazine">magazine article</term><term name="article-newspaper">newspaper article</term><term name="bill">bill</term><term name="book">book</term><term name="broadcast">broadcast</term><term name="chapter">book chapter</term><term name="classic">classic</term><term name="collection">collection</term><term name="dataset">dataset</term><term name="document">document</term><term name="entry">entry</term><term name="entry-dictionary">dictionary entry</term><term name="entry-encyclopedia">encyclopedia entry</term><term name="event">event</term><term name="graphic">graphic</term><term name="hearing">hearing</term><term name="interview">interview</term><term name="legal_case">legal case</term><term name="legislation">legislation</term><term name="manuscript">manuscript</term><term name="map">map</term><term name="motion_picture">video recording</term><term name="musical_score">musical score</term><term name="pamphlet">pamphlet</term><term name="paper-conference">conference paper</term><term name="patent">patent</term><term name="performance">performance</term><term name="periodical">periodical</term><term name="personal_communication">personal communication</term><term name="post">post</term><term name="post-weblog">blog post</term><term name="regulation">regulation</term><term name="report">report</term><term name="review">review</term><term name="review-book">book review</term><term name="software">software</term><term name="song">audio recording</term><term name="speech">presentation</term><term name="standard">standard</term><term name="thesis">thesis</term><term name="treaty">treaty</term><term name="webpage">webpage</term><term name="article-journal" form="short">journal art.</term><term name="article-magazine" form="short">mag. art.</term><term name="article-newspaper" form="short">newspaper art.</term><term name="book" form="short">bk.</term><term name="chapter" form="short">bk. chap.</term><term name="document" form="short">doc.</term><term name="graphic" form="short">graph.</term><term name="interview" form="short">interv.</term><term name="manuscript" form="short">MS</term><term name="motion_picture" form="short">video rec.</term><term name="report" form="short">rep.</term><term name="review" form="short">rev.</term><term name="review-book" form="short">bk. rev.</term><term name="song" form="short">audio rec.</term><term name="ad">AD</term><term name="bc">BC</term><term name="bce">BCE</term><term name="ce">CE</term><term name="open-quote">“</term><term name="close-quote">”</term><term name="open-inner-quote"></term><term name="close-inner-quote"></term><term name="page-range-delimiter"></term><term name="colon">:</term><term name="comma">,</term><term name="semicolon">;</term><term name="ordinal">th</term><term name="ordinal-01">st</term><term name="ordinal-02">nd</term><term name="ordinal-03">rd</term><term name="ordinal-11">th</term><term name="ordinal-12">th</term><term name="ordinal-13">th</term><term name="long-ordinal-01">first</term><term name="long-ordinal-02">second</term><term name="long-ordinal-03">third</term><term name="long-ordinal-04">fourth</term><term name="long-ordinal-05">fifth</term><term name="long-ordinal-06">sixth</term><term name="long-ordinal-07">seventh</term><term name="long-ordinal-08">eighth</term><term name="long-ordinal-09">ninth</term><term name="long-ordinal-10">tenth</term><term name="act"><single>act</single><multiple>acts</multiple></term><term name="appendix"><single>appendix</single><multiple>appendices</multiple></term><term name="article-locator"><single>article</single><multiple>articles</multiple></term><term name="canon"><single>canon</single><multiple>canons</multiple></term><term name="elocation"><single>location</single><multiple>locations</multiple></term><term name="equation"><single>equation</single><multiple>equations</multiple></term><term name="rule"><single>rule</single><multiple>rules</multiple></term><term name="scene"><single>scene</single><multiple>scenes</multiple></term><term name="table"><single>table</single><multiple>tables</multiple></term><term name="timestamp"><single></single><multiple></multiple></term><term name="title-locator"><single>title</single><multiple>titles</multiple></term><term name="book"><single>book</single><multiple>books</multiple></term><term name="chapter"><single>chapter</single><multiple>chapters</multiple></term><term name="column"><single>column</single><multiple>columns</multiple></term><term name="figure"><single>figure</single><multiple>figures</multiple></term><term name="folio"><single>folio</single><multiple>folios</multiple></term><term name="issue"><single>number</single><multiple>numbers</multiple></term><term name="line"><single>line</single><multiple>lines</multiple></term><term name="note"><single>note</single><multiple>notes</multiple></term><term name="opus"><single>opus</single><multiple>opera</multiple></term><term name="page"><single>page</single><multiple>pages</multiple></term><term name="number-of-pages"><single>page</single><multiple>pages</multiple></term><term name="paragraph"><single>paragraph</single><multiple>paragraphs</multiple></term><term name="part"><single>part</single><multiple>parts</multiple></term><term name="section"><single>section</single><multiple>sections</multiple></term><term name="sub-verbo"><single>sub verbo</single><multiple>sub verbis</multiple></term><term name="verse"><single>verse</single><multiple>verses</multiple></term><term name="volume"><single>volume</single><multiple>volumes</multiple></term><term name="appendix"><single>app.</single><multiple>apps.</multiple></term><term name="article-locator"><single>art.</single><multiple>arts.</multiple></term><term name="elocation"><single>loc.</single><multiple>locs.</multiple></term><term name="equation"><single>eq.</single><multiple>eqs.</multiple></term><term name="rule"><single>r.</single><multiple>rr.</multiple></term><term name="scene"><single>sc.</single><multiple>scs.</multiple></term><term name="table"><single>tbl.</single><multiple>tbls.</multiple></term><term name="timestamp"><single></single><multiple></multiple></term><term name="title-locator"><single>tit.</single><multiple>tits.</multiple></term><term name="book" form="short"><single>bk.</single><multiple>bks.</multiple></term><term name="chapter" form="short"><single>chap.</single><multiple>chaps.</multiple></term><term name="column" form="short"><single>col.</single><multiple>cols.</multiple></term><term name="figure" form="short"><single>fig.</single><multiple>figs.</multiple></term><term name="folio" form="short"><single>fol.</single><multiple>fols.</multiple></term><term name="issue" form="short"><single>no.</single><multiple>nos.</multiple></term><term name="line" form="short"><single>l.</single><multiple>ll.</multiple></term><term name="note" form="short"><single>n.</single><multiple>nn.</multiple></term><term name="opus" form="short"><single>op.</single><multiple>opp.</multiple></term><term name="page" form="short"><single>p.</single><multiple>pp.</multiple></term><term name="number-of-pages" form="short"><single>p.</single><multiple>pp.</multiple></term><term name="paragraph" form="short"><single>para.</single><multiple>paras.</multiple></term><term name="part" form="short"><single>pt.</single><multiple>pts.</multiple></term><term name="section" form="short"><single>sec.</single><multiple>secs.</multiple></term><term name="sub-verbo" form="short"><single>s.v.</single><multiple>s.vv.</multiple></term><term name="verse" form="short"><single>v.</single><multiple>vv.</multiple></term><term name="volume" form="short"><single>vol.</single><multiple>vols.</multiple></term><term name="paragraph" form="symbol"><single>¶</single><multiple>¶¶</multiple></term><term name="section" form="symbol"><single>§</single><multiple>§§</multiple></term><term name="chair"><single>chair</single><multiple>chairs</multiple></term><term name="compiler"><single>compiler</single><multiple>compilers</multiple></term><term name="contributor"><single>contributor</single><multiple>contributors</multiple></term><term name="curator"><single>curator</single><multiple>curators</multiple></term><term name="executive-producer"><single>executive producer</single><multiple>executive producers</multiple></term><term name="guest"><single>guest</single><multiple>guests</multiple></term><term name="host"><single>host</single><multiple>hosts</multiple></term><term name="narrator"><single>narrator</single><multiple>narrators</multiple></term><term name="organizer"><single>organizer</single><multiple>organizers</multiple></term><term name="performer"><single>performer</single><multiple>performers</multiple></term><term name="producer"><single>producer</single><multiple>producers</multiple></term><term name="script-writer"><single>writer</single><multiple>writers</multiple></term><term name="series-creator"><single>series creator</single><multiple>series creators</multiple></term><term name="director"><single>director</single><multiple>directors</multiple></term><term name="editor"><single>editor</single><multiple>editors</multiple></term><term name="editorial-director"><single>editor</single><multiple>editors</multiple></term><term name="illustrator"><single>illustrator</single><multiple>illustrators</multiple></term><term name="translator"><single>translator</single><multiple>translators</multiple></term><term name="editortranslator"><single>editor &amp; translator</single><multiple>editors &amp; translators</multiple></term><term name="compiler" form="short"><single>comp.</single><multiple>comps.</multiple></term><term name="contributor" form="short"><single>contrib.</single><multiple>contribs.</multiple></term><term name="curator" form="short"><single>cur.</single><multiple>curs.</multiple></term><term name="executive-producer" form="short"><single>exec. prod.</single><multiple>exec. prods.</multiple></term><term name="narrator" form="short"><single>narr.</single><multiple>narrs.</multiple></term><term name="organizer" form="short"><single>org.</single><multiple>orgs.</multiple></term><term name="performer" form="short"><single>perf.</single><multiple>perfs.</multiple></term><term name="producer" form="short"><single>prod.</single><multiple>prods.</multiple></term><term name="script-writer" form="short"><single>writ.</single><multiple>writs.</multiple></term><term name="series-creator" form="short"><single>cre.</single><multiple>cres.</multiple></term><term name="director" form="short"><single>dir.</single><multiple>dirs.</multiple></term><term name="editor" form="short"><single>ed.</single><multiple>eds.</multiple></term><term name="editorial-director" form="short"><single>ed.</single><multiple>eds.</multiple></term><term name="illustrator" form="short"><single>ill.</single><multiple>ills.</multiple></term><term name="translator" form="short"><single>tran.</single><multiple>trans.</multiple></term><term name="editortranslator" form="short"><single>ed. &amp; tran.</single><multiple>eds. &amp; trans.</multiple></term><term name="chair" form="verb">chaired by</term><term name="compiler" form="verb">compiled by</term><term name="contributor" form="verb">with</term><term name="curator" form="verb">curated by</term><term name="executive-producer" form="verb">executive produced by</term><term name="guest" form="verb">with guest</term><term name="host" form="verb">hosted by</term><term name="narrator" form="verb">narrated by</term><term name="organizer" form="verb">organized by</term><term name="performer" form="verb">performed by</term><term name="producer" form="verb">produced by</term><term name="script-writer" form="verb">written by</term><term name="series-creator" form="verb">created by</term><term name="container-author" form="verb">by</term><term name="director" form="verb">directed by</term><term name="editor" form="verb">edited by</term><term name="editorial-director" form="verb">edited by</term><term name="illustrator" form="verb">illustrated by</term><term name="interviewer" form="verb">interview by</term><term name="recipient" form="verb">to</term><term name="reviewed-author" form="verb">by</term><term name="translator" form="verb">translated by</term><term name="editortranslator" form="verb">edited &amp; translated by</term><term name="compiler" form="verb-short">comp. by</term><term name="contributor" form="verb-short">w.</term><term name="curator" form="verb-short">cur. by</term><term name="executive-producer" form="verb-short">exec. prod. by</term><term name="guest" form="verb-short">w. guest</term><term name="host" form="verb-short">hosted by</term><term name="narrator" form="verb-short">narr. by</term><term name="organizer" form="verb-short">org. by</term><term name="performer" form="verb-short">perf. by</term><term name="producer" form="verb-short">prod. by</term><term name="script-writer" form="verb-short">writ. by</term><term name="series-creator" form="verb-short">cre. by</term><term name="director" form="verb-short">dir. by</term><term name="editor" form="verb-short">ed. by</term><term name="editorial-director" form="verb-short">ed. by</term><term name="illustrator" form="verb-short">illus. by</term><term name="translator" form="verb-short">trans. by</term><term name="editortranslator" form="verb-short">ed. &amp; trans. by</term><term name="month-01">January</term><term name="month-02">February</term><term name="month-03">March</term><term name="month-04">April</term><term name="month-05">May</term><term name="month-06">June</term><term name="month-07">July</term><term name="month-08">August</term><term name="month-09">September</term><term name="month-10">October</term><term name="month-11">November</term><term name="month-12">December</term><term name="month-01" form="short">Jan.</term><term name="month-02" form="short">Feb.</term><term name="month-03" form="short">Mar.</term><term name="month-04" form="short">Apr.</term><term name="month-05" form="short">May</term><term name="month-06" form="short">Jun.</term><term name="month-07" form="short">Jul.</term><term name="month-08" form="short">Aug.</term><term name="month-09" form="short">Sep.</term><term name="month-10" form="short">Oct.</term><term name="month-11" form="short">Nov.</term><term name="month-12" form="short">Dec.</term><term name="season-01">Spring</term><term name="season-02">Summer</term><term name="season-03">Autumn</term><term name="season-04">Winter</term></terms></locale>`
};
const locales = new Register(defaultLocales);
const defaultTemplates = {
apa: `<?xml version="1.0" encoding="utf-8"?><style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" page-range-format="expanded"><info><title>American Psychological Association 7th edition</title><title-short>APA</title-short><id>http://www.zotero.org/styles/apa</id><link href="http://www.zotero.org/styles/apa" rel="self"/><link href="http://www.zotero.org/styles/apa-6th-edition" rel="template"/><link href="https://apastyle.apa.org/style-grammar-guidelines/references/examples" rel="documentation"/><author><name>Brenton M. Wiernik</name><email>zotero@wiernik.org</email></author><category citation-format="author-date"/><category field="psychology"/><category field="generic-base"/><updated>2022-01-31T14:30:00+00:00</updated><rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights></info><locale xml:lang="en"><terms><term name="editortranslator" form="short"><single>ed. &amp; trans.</single><multiple>eds. &amp; trans.</multiple></term><term name="translator" form="short">trans.</term><term name="interviewer" form="short"><single>interviewer</single><multiple>interviewers</multiple></term><term name="collection-editor" form="short"><single>ed.</single><multiple>eds.</multiple></term><term name="circa" form="short">ca.</term><term name="bc"> B.C.E.</term><term name="ad"> C.E.</term><term name="letter">personal communication</term><term name="letter" form="short">letter</term><term name="issue" form="long"><single>issue</single><multiple>issues</multiple></term></terms></locale><locale xml:lang="af"><terms><term name="letter">persoonlike kommunikasie</term><term name="letter" form="short">brief</term></terms></locale><locale xml:lang="ar"><terms><term name="letter">اتصال شخصي</term><term name="letter" form="short">خطاب</term></terms></locale><locale xml:lang="bg"><terms><term name="letter">лична комуникация</term><term name="letter" form="short">писмо</term></terms></locale><locale xml:lang="ca"><terms><term name="letter">comunicació personal</term><term name="letter" form="short">carta</term></terms></locale><locale xml:lang="cs"><terms><term name="letter">osobní komunikace</term><term name="letter" form="short">dopis</term></terms></locale><locale xml:lang="cy"><terms><term name="letter">cyfathrebu personol</term><term name="letter" form="short">llythyr</term></terms></locale><locale xml:lang="da"><terms><term name="et-al">et al.</term><term name="letter">personlig kommunikation</term><term name="letter" form="short">brev</term></terms></locale><locale xml:lang="de"><terms><term name="et-al">et al.</term><term name="letter">persönliche Kommunikation</term><term name="letter" form="short">Brief</term></terms></locale><locale xml:lang="el"><terms><term name="letter">προσωπική επικοινωνία</term><term name="letter" form="short">επιστολή</term></terms></locale><locale xml:lang="es"><terms><term name="from">de</term><term name="letter">comunicación personal</term><term name="letter" form="short">carta</term></terms></locale><locale xml:lang="et"><terms><term name="letter">isiklik suhtlus</term><term name="letter" form="short">kiri</term></terms></locale><locale xml:lang="eu"><terms><term name="letter">komunikazio pertsonala</term><term name="letter" form="short">gutuna</term></terms></locale><locale xml:lang="fa"><terms><term name="letter">ارتباط شخصی</term><term name="letter" form="short">نامه</term></terms></locale><locale xml:lang="fi"><terms><term name="letter">henkilökohtainen viestintä</term><term name="letter" form="short">kirje</term></terms></locale><locale xml:lang="fr"><terms><term name="letter">communication personnelle</term><term name="letter" form="short">lettre</term><term name="editor" form="short"><single>éd.</single><multiple>éds.</multiple></term></terms></locale><locale xml:lang="he"><terms><term name="letter">תקשורת אישית</term><term name="letter" form="short">מכתב</term></terms></locale><locale xml:lang="hr"><terms><term name="letter">osobna komunikacija</term><term name="letter" form="short">pismo</term></terms></locale><locale xml:lang="hu"><terms><term name="letter">személyes kommunikáció</term><term name="letter" form="short">levél</term></terms></locale><locale xml:lang="id"><terms><term name="letter">komunikasi pribadi</term><term name="letter" form="short">surat</term></terms></locale><locale xml:lang="is"><terms><term name="letter">persónuleg samskipti</term><term name="letter" form="short">bréf</term></terms></locale><locale xml:lang="it"><terms><term name="letter">comunicazione personale</term><term name="letter" form="short">lettera</term></terms></locale><locale xml:lang="ja"><terms><term name="letter">個人的なやり取り</term><term name="letter" form="short">手紙</term></terms></locale><locale xml:lang="ko"><terms><term name="letter">개인 서신</term><term name="letter" form="short">편지</term></terms></locale><locale xml:lang="la"><terms><term name="letter"/><term name="letter" form="short">epistula</term></terms></locale><locale xml:lang="lt"><terms><term name="letter">communicationis personalis</term><term name="letter" form="short"/></terms></locale><locale xml:lang="lv"><terms><term name="letter">personīga komunikācija</term><term name="letter" form="short">vēstule</term></terms></locale><locale xml:lang="mn"><terms><term name="letter">хувийн харилцаа холбоо</term><term name="letter" form="short">захиа</term></terms></locale><locale xml:lang="nb"><terms><term name="et-al">et al.</term><term name="letter">personlig kommunikasjon</term><term name="letter" form="short">brev</term></terms></locale><locale xml:lang="nl"><terms><term name="et-al">et al.</term><term name="letter">persoonlijke communicatie</term><term name="letter" form="short">brief</term></terms></locale><locale xml:lang="nn"><terms><term name="et-al">et al.</term><term name="letter">personlig kommunikasjon</term><term name="letter" form="short">brev</term></terms></locale><locale xml:lang="pl"><terms><term name="letter">osobista komunikacja</term><term name="letter" form="short">list</term></terms></locale><locale xml:lang="pt"><terms><term name="letter">comunicação pessoal</term><term name="letter" form="short">carta</term></terms></locale><locale xml:lang="ro"><terms><term name="letter">comunicare personală</term><term name="letter" form="short">scrisoare</term></terms></locale><locale xml:lang="ru"><terms><term name="letter">личная переписка</term><term name="letter" form="short">письмо</term></terms></locale><locale xml:lang="sk"><terms><term name="letter">osobná komunikácia</term><term name="letter" form="short">list</term></terms></locale><locale xml:lang="sl"><terms><term name="letter">osebna komunikacija</term><term name="letter" form="short">pismo</term></terms></locale><locale xml:lang="sr"><terms><term name="letter">лична комуникација</term><term name="letter" form="short">писмо</term></terms></locale><locale xml:lang="sv"><terms><term name="letter">personlig kommunikation</term><term name="letter" form="short">brev</term></terms></locale><locale xml:lang="th"><terms><term name="letter">การสื่อสารส่วนบุคคล</term><term name="letter" form="short">จดหมาย</term></terms></locale><locale xml:lang="tr"><terms><term name="letter">kişisel iletişim</term><term name="letter" form="short">mektup</term></terms></locale><locale xml:lang="uk"><terms><term name="letter">особисте спілкування</term><term name="letter" form="short">лист</term></terms></locale><locale xml:lang="vi"><terms><term name="letter">giao tiếp cá nhân</term><term name="letter" form="short">thư</term></terms></locale><locale xml:lang="zh-CN"><terms><term name="letter">的私人交流</term><term name="letter" form="short">信函</term></terms></locale><locale xml:lang="zh-TW"><terms><term name="letter">私人通訊</term><term name="letter" form="short">信函</term></terms></locale><macro name="author-bib"><names variable="composer" delimiter=", "><name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/><substitute><names variable="author"/><names variable="illustrator"/><names variable="director"><name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/><label form="long" prefix=" (" suffix=")" text-case="title"/></names><choose><if variable="container-title"><choose><if type="book entry entry-dictionary entry-encyclopedia" match="any"><choose><if variable="title"><group delimiter=" "><text macro="title"/><text macro="parenthetical"/></group></if><else><text macro="title-and-descriptions"/></else></choose></if></choose></if></choose><names variable="editor" delimiter=", "><name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/><label form="short" prefix=" (" suffix=")" text-case="title"/></names><names variable="editorial-director"><name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/><label form="short" prefix=" (" suffix=")" text-case="title"/></names><names variable="collection-editor"><name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/><label form="short" prefix=" (" suffix=")" text-case="title"/></names><choose><if variable="title"><group delimiter=" "><text macro="title"/><text macro="parenthetical"/></group></if><else><text macro="title-and-descriptions"/></else></choose></substitute></names></macro><macro name="author-intext"><choose><if type="bill legal_case legislation treaty" match="any"><text macro="title-intext"/></if><else-if type="interview personal_communication" match="any"><choose><if variable="archive container-title DOI publisher URL" match="none"><group delimiter=", "><names variable="author"><name and="symbol" delimiter=", " initialize-with=". "/><substitute><text macro="title-intext"/></substitute></names><text term="letter"/></group></if><else><names variable="author" delimiter=", "><name form="short" and="symbol" delimiter=", " initialize-with=". "/><substitute><text macro="title-intext"/></substitute></names></else></choose></else-if><else><names variable="composer" delimiter=", "><name form="short" and="symbol" delimiter=", " initialize-with=". "/><substitute><names variable="author"/><names variable="illustrator"/><names variable="director"/><choose><if variable="container-title"><choose><if type="book entry entry-dictionary entry-encyclopedia" match="any"><text macro="title-intext"/></if></choose></if></choose><names variable="editor"/><names variable="editorial-director"/><text macro="title-intext"/></substitute></names></else></choose></macro><macro name="date-bib"><group delimiter=" " prefix="(" suffix=")"><choose><if is-uncertain-date="issued"><text term="circa" form="short"/></if></choose><group><choose><if variable="issued"><date variable="issued"><date-part name="year"/></date><text variable="year-suffix"/><choose><if type="article-magazine article-newspaper broadcast interview motion_picture pamphlet personal_communication post post-weblog song speech webpage" match="any"><date variable="issued"><date-part prefix=", " name="month"/><date-part prefix=" " name="day"/></date></if><else-if type="paper-conference"><choose><if variable="collection-editor editor editorial-director issue page volume" match="none"><date variable="issued"><date-part prefix=", " name="month"/><date-part prefix=" " name="day"/></date></if></choose></else-if></choose></if><else-if variable="status"><group><text variable="status" text-case="lowercase"/><text variable="year-suffix" prefix="-"/></group></else-if><else><text term="no date" form="short"/><text variable="year-suffix" prefix="-"/></else></choose></group></group></macro><macro name="date-sort-group"><choose><if variable="issued"><text value="1"/></if><else-if variable="status"><text value="2"/></else-if><else><text value="0"/></else></choose></macro><macro name="date-sort-date"><date variable="issued" form="numeric"/></macro><macro name="date-intext"><choose><if variable="issued"><group delimiter="/"><group delimiter=" "><choose><if is-uncertain-date="original-date"><text term="circa" form="short"/></if></choose><date variable="original-date"><date-part name="year"/></date></group><group delimiter=" "><choose><if is-uncertain-date="issued"><text term="circa" form="short"/></if></choose><group><choose><if type="interview personal_communication" match="any"><choose><if variable="archive container-title DOI publisher URL" match="none"><date variable="issued" form="text"/></if><else><date variable="issued"><date-part name="year"/></date></else></choose></if><else><date variable="issued"><date-part name="year"/></date></else></choose><text variable="year-suffix"/></group></group></group></if><else-if variable="status"><text variable="status" text-case="lowercase"/><text variable="year-suffix" prefix="-"/></else-if><else><text term="no date" form="short"/><text variable="year-suffix" prefix="-"/></else></choose></macro><macro name="title-and-descriptions"><choose><if variable="title"><group delimiter=" "><text macro="title"/><text macro="parenthetical"/><text macro="bracketed"/></group></if><else><group delimiter=" "><text macro="bracketed"/><text macro="parenthetical"/></group></else></choose></macro><macro name="title"><choose><if type="post webpage" match="any"><text variable="title" font-style="italic"/></if><else-if variable="container-title" match="any"><text variable="title"/></else-if><else><choose><if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any"><text variable="title" font-style="italic"/></if><else-if type="paper-conference"><choose><if variable="collection-editor editor editorial-director" match="any"><group delimiter=": " font-style="italic"><text variable="title"/><choose><if is-numeric="volume" match="none"><group delimiter=" "><label variable="volume" form="short" text-case="capitalize-first"/><text variable="volume"/></group></if></choose></group></if><else><text variable="title" font-style="italic"/></else></choose></else-if><else><group delimiter=": " font-style="italic"><text variable="title"/><choose><if is-numeric="volume" match="none"><group delimiter=" "><label variable="volume" form="short" text-case="capitalize-first"/><text variable="volume"/></group></if></choose></group></else></choose></else></choose></macro><macro name="title-intext"><choose><if variable="title" match="none"><text macro="bracketed-intext" prefix="[" suffix="]"/></if><else-if type="bill"><choose><if variable="number container-title" match="none"><text variable="title" form="short" font-style="italic" text-case="title"/></if><else-if variable="title"><text variable="title" form="short" text-case="title"/></else-if><else><group delimiter=" "><text variable="genre"/><group delimiter=" "><choose><if variable="chapter-number container-title" match="none"><text term="issue" form="short"/></if></choose><text variable="number"/></group></group></else></choose></else-if><else-if type="legal_case" match="any"><text variable="title" font-style="italic"/></else-if><else-if type="legislation treaty" match="any"><text variable="title" form="short" text-case="title"/></else-if><else-if type="post webpage" match="any"><text variable="title" form="short" font-style="italic" text-case="title"/></else-if><else-if variable="container-title" match="any"><text variable="title" form="short" quotes="true" text-case="title"/></else-if><else><text variable="title" form="short" font-style="italic" text-case="title"/></else></choose></macro><macro name="parenthetical"><group prefix="(" suffix=")"><choose><if type="patent"><group delimiter=" "><text variable="authority" form="short"/><choose><if variable="genre"><text variable="genre" text-case="capitalize-first"/></if><else><text value="patent" text-case="capitalize-first"/></else></choose><group delimiter=" "><text term="issue" form="short" text-case="capitalize-first"/><text variable="number"/></group></group></if><else-if type="post webpage" match="any"><group delimiter="; "><text macro="secondary-contributors"/><text macro="database-location"/><text macro="number"/><text macro="locators-booklike"/></group></else-if><else-if variable="container-title"><group delimiter="; "><text macro="secondary-contributors"/><choose><if type="broadcast graphic map motion_picture song" match="any"><text macro="number"/></if></choose></group></else-if><else><group delimiter="; "><text macro="secondary-contributors"/><text macro="database-location"/><text macro="number"/><text macro="locators-booklike"/></group></else></choose></group></macro><macro name="parenthetical-container"><choose><if variable="container-title" match="any"><group prefix="(" suffix=")"><group delimiter="; "><text macro="database-location"/><choose><if type="broadcast graphic map motion_picture song" match="none"><text macro="number"/></if></choose><text macro="locators-booklike"/></group></group></if></choose></macro><macro name="bracketed"><group prefix="[" suffix="]"><choose><if variable="reviewed-author reviewed-title" type="review review-book" match="any"><group delimiter="; "><group delimiter=", "><group delimiter=" "><choose><if variable="number" match="none"><choose><if variable="genre"><text variable="genre" text-case="capitalize-first"/></if><else-if variable="medium"><text variable="medium" text-case="capitalize-first"/></else-if><else><text value="Review of"/></else></choose></if><else><choose><if variable="medium"><text variable="medium" text-case="capitalize-first"/></if><else><text value="Review of"/></else></choose></else></choose><text macro="reviewed-title"/></group><names variable="reviewed-author"><label form="verb-short" suffix=" "/><name and="symbol" initialize-with=". " delimiter=", "/></names></group><choose><if variable="genre" match="any"><choose><if variable="number" match="none"><text variable="medium" text-case="capitalize-first"/></if></choose></if></choose></group></if><else-if type="thesis"><group delimiter="; "><choose><if variable="number" match="none"><group delimiter=", "><text variable="genre" text-case="capitalize-first"/><choose><if variable="archive DOI URL" match="any"><text variable="publisher"/></if></choose></group></if></choose><text variable="medium" text-case="capitalize-first"/></group></else-if><else-if variable="interviewer" type="interview" match="any"><choose><if variable="title"><text macro="format"/></if><else-if variable="genre"><group delimiter="; "><group delimiter=" "><text variable="genre" text-case="capitalize-first"/><group delimiter=" "><text term="author" form="verb"/><names variable="interviewer"><name and="symbol" initialize-with=". " delimiter=", "/></names></group></group></group></else-if><else-if variable="interviewer"><group delimiter="; "><names variable="interviewer"><label form="verb" suffix=" " text-case="capitalize-first"/><name and="symbol" initialize-with=". " delimiter=", "/></names><text variable="medium" text-case="capitalize-first"/></group></else-if><else><text macro="format"/></else></choose></else-if><else-if type="personal_communication"><choose><if variable="recipient"><group delimiter="; "><group delimiter=" "><choose><if variable="number" match="none"><choose><if variable="genre"><text variable="genre" text-case="capitalize-first"/></if><else-if variable="medium"><text variable="medium" text-case="capitalize-first"/></else-if><else><text term="letter" form="short" text-case="capitalize-first"/></else></choose></if><else><choose><if variable="medium"><text variable="medium" text-case="capitalize-first"/></if><else><text term="letter" form="short" text-case="capitalize-first"/></else></choose></else></choose><names variable="recipient" delimiter=", "><label form="verb" suffix=" "/><name and="symbol" delimiter=", "/></names></group><choose><if variable="genre" match="any"><choose><if variable="number" match="none"><text variable="medium" text-case="capitalize-first"/></if></choose></if></choose></group></if><else><text macro="format"/></else></choose></else-if><else-if variable="composer" type="song" match="all"><group delimiter="; "><choose><if variable="number" match="none"><group delimiter=" "><choose><if variable="genre"><text variable="genre" text-case="capitalize-first"/><names variable="author" prefix="recorded by "><name and="symbol" initialize-with=". " delimiter=", "/></names></if><else-if variable="medium"><text variable="medium" text-case="capitalize-first"/><names variable="author" prefix="recorded by "><name and="symbol" initialize-with=". " delimiter=", "/></names></else-if><else><names variable="author" prefix="Recorded by "><name and="symbol" initialize-with=". " delimiter=", "/></names></else></choose></group></if><else><group delimiter=" "><choose><if variable="medium"><text variable="medium" text-case="capitalize-first"/><names variable="author" prefix="recorded by "><name and="symbol" initialize-with=". " delimiter=", "/></names></if><else><names variable="author" prefix="Recorded by "><name and="symbol" initialize-with=". " delimiter=", "/></names></else></choose></group></else></choose><choose><if variable="genre" match="any"><choose><if variable="number" match="none"><text variable="medium" text-case="capitalize-first"/></if></choose></if></choose></group></else-if><else-if variable="container-title" match="none"><text macro="format"/></else-if><else><choose><if type="paper-conference speech" match="any"><choose><if variable="collection-editor editor editorial-director issue page volume" match="any"><text macro="format"/></if></choose></if><else-if type="book"><choose><if variable="version" match="none"><text macro="format"/></if></choose></else-if><else-if type="report" match="none"><text macro="format"/></else-if></choose></else></choose></group></macro><macro name="bracketed-intext"><group prefix="[" suffix="]"><choose><if variable="reviewed-author reviewed-title" type="review review-book" match="any"><text macro="reviewed-title-intext" prefix="Review of "/></if><else-if variable="interviewer" type="interview" match="any"><names variable="interviewer"><label form="verb" suffix=" " text-case="capitalize-first"/><name and="symbol" initialize-with=". " delimiter=", "/><substitute><text macro="format-intext"/></substitute></names></else-if><else-if type="personal_communication"><choose><if variable="recipient"><group delimiter=" "><choose><if variable="number" match="none"><text variable="genre" text-case="capitalize-first"/></if><else><text term="letter" form="short" text-case="capitalize-first"/></else></choose><names variable="recipient" delimiter=", "><label form="verb" suffix=" "/><name and="symbol" delimiter=", "/></names></group></if><else><text macro="format-intext"/></else></choose></else-if><else><text macro="format-intext"/></else></choose></group></macro><macro name="bracketed-container"><group prefix="[" suffix="]"><choose><if type="paper-conference speech" match="any"><choose><if variable="collection-editor editor editorial-director issue page volume" match="none"><text macro="format"/></if></choose></if><else-if type="book" variable="version" match="all"><text macro="format"/></else-if><else-if type="report"><text macro="format"/></else-if></choose></group></macro><macro name="secondary-contributors"><choose><if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any"><text macro="secondary-contributors-periodical"/></if><else-if type="paper-conference"><choose><if variable="collection-editor editor editorial-director" match="any"><text macro="secondary-contributors-booklike"/></if><else><text macro="secondary-contributors-periodical"/></else></choose></else-if><else><text macro="secondary-contributors-booklike"/></else></choose></macro><macro name="secondary-contributors-periodical"><group delimiter="; "><choose><if variable="title"><names variable="interviewer" delimiter="; "><name and="symbol" initialize-with=". " delimiter=", "/><label form="short" prefix=", " text-case="title"/></names></if></choose><names variable="translator" delimiter="; "><name and="symbol" initialize-with=". " delimiter=", "/><label form="short" prefix=", " text-case="title"/></names></group></macro><macro name="secondary-contributors-booklike"><group delimiter="; "><choose><if variable="title"><names variable="interviewer"><name and="symbol" initialize-with=". " delimiter=", "/><label form="short" prefix=", " text-case="title"/></names></if></choose><choose><if type="post webpage" match="none"><choose><if variable="container-title" match="none"><group delimiter="; "><names variable="container-author"><label form="verb-short" suffix=" " text-case="title"/><name and="symbol" initialize-with=". " delimiter=", "/></names><names variable="editor translator" delimiter="; "><name and="symbol" initialize-with=". " delimiter=", "/><label form="short" prefix=", " text-case="title"/></names></group></if></choose></if><else><group delimiter="; "><names variable="container-author"><label form="verb-short" suffix=" " text-case="title"/><name and="symbol" initialize-with=". " delimiter=", "/></names><names variable="editor translator" delimiter="; "><name and="symbol" initialize-with=". " delimiter=", "/><label form="short" prefix=", " text-case="title"/></names></group></else></choose></group></macro><macro name="database-location"><choose><if variable="archive-place" match="none"><text variable="archive_location"/></if></choose></macro><macro name="number"><choose><if variable="number"><group delimiter=", "><group delimiter=" "><text variable="genre" text-case="title"/><choose><if is-numeric="number"><text term="issue" form="short" text-case="capitalize-first"/><text variable="number"/></if><else><text variable="number"/></else></choose></group><choose><if type="thesis"><choose><if variable="archive DOI URL" match="any"><text variable="publisher"/></if></choose></if></choose></group></if></choose></macro><macro name="locators-booklike"><choose><if type="article-journal article-magazine article-newspaper broadcast interview patent post post-weblog review review-book speech webpage" match="any"/><else-if type="paper-conference"><choose><if variable="collection-editor editor editorial-director" match="any"><group delimiter=", "><text macro="version"/><text macro="edition"/><text macro="volume-booklike"/></group></if></choose></else-if><else><group delimiter=", "><text macro="version"/><text macro="edition"/><text macro="volume-booklike"/></group></else></choose></macro><macro name="version"><choose><if is-numeric="version"><group delimiter=" "><text term="version" text-case="capitalize-first"/><text variable="version"/></group></if><else><text variable="version"/></else></choose></macro><macro name="edition"><choose><if is-numeric="edition"><group delimiter=" "><number variable="edition" form="ordinal"/><label variable="edition" form="short"/></group></if><else><text variable="edition"/></else></choose></macro><macro name="volume-booklike"><group delimiter=", "><choose><if type="report"><group delimiter=" "><text variable="collection-title" text-case="title"/><text variable="collection-number"/></group></if></choose><choose><if variable="volume" match="any"><choose><if is-numeric="volume" match="none"/><else><group delimiter=" "><label variable="volume" form="short" text-case="capitalize-first"/><number variable="volume" form="numeric"/></group></else></choose></if><else><group><text term="volume" form="short" text-case="capitalize-first" suffix=" "/><text term="page-range-delimiter" prefix="1"/><number variable="number-of-volumes" form="numeric"/></group></else></choose><group delimiter=" "><label variable="issue" text-case="capitalize-first"/><text variable="issue"/></group><group delimiter=" "><label variable="page" form="short" suffix=" "/><text variable="page"/></group></group></macro><macro name="reviewed-title"><choose><if variable="reviewed-title"><text variable="reviewed-title" font-style="italic"/></if><else><text variable="title" font-style="italic"/></else></choose></macro><macro name="reviewed-title-intext"><choose><if variable="reviewed-title"><text variable="reviewed-title" form="short" font-style="italic" text-case="title"/></if><else><text variable="title" form="short" font-style="italic" text-case="title"/></else></choose></macro><macro name="format"><choose><if variable="genre medium" match="any"><group delimiter="; "><choose><if variable="number" match="none"><text variable="genre" text-case="capitalize-first"/></if></choose><text variable="medium" text-case="capitalize-first"/></group></if><else-if type="dataset"><text value="Data set"/></else-if><else-if type="book" variable="version" match="all"><text value="Computer software"/></else-if><else-if type="interview personal_communication" match="any"><choose><if variable="archive container-title DOI publisher URL" match="none"><text term="letter" text-case="capitalize-first"/></if><else-if type="interview"><text term="interview" text-case="capitalize-first"/></else-if></choose></else-if><else-if type="map"><text value="Map"/></else-if></choose></macro><macro name="format-intext"><choose><if variable="genre" match="any"><text variable="genre" text-case="capitalize-first"/></if><else-if variable="medium"><text variable="medium" text-case="capitalize-first"/></else-if><else-if type="dataset"><text value="Data set"/></else-if><else-if type="book" variable="version" match="all"><text value="Computer software"/></else-if><else-if type="interview personal_communication" match="any"><choose><if variable="archive container-title DOI publisher URL" match="none"><text term="letter" text-case="capitalize-first"/></if><else-if type="interview"><text term="interview" text-case="capitalize-first"/></else-if></choose></else-if><else-if type="map"><text value="Map"/></else-if></choose></macro><macro name="container"><choose><if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any"><text macro="container-periodical"/></if><else-if type="paper-conference"><choose><if variable="editor editorial-director collection-editor container-author" match="any"><text macro="container-booklike"/></if><else><text macro="container-periodical"/></else></choose></else-if><else-if type="post webpage" match="none"><text macro="container-booklike"/></else-if></choose></macro><macro name="container-periodical"><group delimiter=". "><group delimiter=", "><text variable="container-title" font-style="italic" text-case="title"/><choose><if variable="volume"><group><text variable="volume" font-style="italic"/><text variable="issue" prefix="(" suffix=")"/></group></if><else><text variable="issue" font-style="italic"/></else></choose><choose><if variable="page"><text variable="page"/></if><else><text variable="number" prefix="Article "/></else></choose></group><choose><if variable="issued"><choose><if variable="issue page volume" match="none"><text variable="status" text-case="capitalize-first"/></if></choose></if></choose></group></macro><macro name="container-booklike"><choose><if variable="container-title" match="any"><group delimiter=" "><text term="in" text-case="capitalize-first"/><group delimiter=", "><names variable="editor translator" delimiter=", &amp; "><name and="symbol" initialize-with=". " delimiter=", "/><label form="short" text-case="title" prefix=" (" suffix=")"/><substitute><names variable="editorial-director"/><names variable="collection-editor"/><names variable="container-author"/></substitute></names><group delimiter=": " font-style="italic"><text variable="container-title"/><choose><if is-numeric="volume" match="none"><group delimiter=" "><label variable="volume" form="short" text-case="capitalize-first"/><text variable="volume"/></group></if></choose></group></group><text macro="parenthetical-container"/><text macro="bracketed-container"/></group></if></choose></macro><macro name="publisher"><group delimiter="; "><choose><if type="thesis"><choose><if variable="archive DOI URL" match="none"><text variable="publisher"/></if></choose></if><else-if type="post webpage" match="any"><group delimiter="; "><text variable="container-title" text-case="title"/><text variable="publisher"/></group></else-if><else-if type="paper-conference"><choose><if variable="collection-editor editor editorial-director" match="any"><text variable="publisher"/></if></choose></else-if><else-if type="article-journal article-magazine article-newspaper post-weblog" match="none"><text variable="publisher"/></else-if></choose><group delimiter=", "><choose><if variable="archive-place"><text variable="archive_location"/></if></choose><text variable="archive"/><text variable="archive-place"/></group></group></macro><macro name="access"><choose><if variable="DOI" match="any"><text variable="DOI" prefix="https://doi.org/"/></if><else-if variable="URL"><group delimiter=" "><choose><if variable="issued status" match="none"><group delimiter=" "><text term="retrieved" text-case="capitalize-first"/><date variable="accessed" form="text" suffix=","/><text term="from"/></group></if></choose><text variable="URL"/></group></else-if></choose></macro><macro name="event"><choose><if variable="event"><choose><if variable="collection-editor editor editorial-director issue page volume" match="none"><group delimiter=", "><text variable="event"/><text variable="event-place"/></group></if></choose></if></choose></macro><macro name="publication-history"><choose><if type="patent" match="none"><group prefix="(" suffix=")"><choose><if variable="references"><text variable="references"/></if><else><group delimiter=" "><text value="Original work published"/><choose><if is-uncertain-date="original-date"><text term="circa" form="short"/></if></choose><date variable="original-date"><date-part name="year"/></date></group></else></choose></group></if><else><text variable="references" prefix="(" suffix=")"/></else></choose></macro><macro name="legal-cites"><choose><if type="legal_case"><group delimiter=". "><group delimiter=", "><text variable="title"/><group delimiter=" "><text macro="container-legal"/><text macro="date-legal"/></group><text variable="references"/></group><text macro="access"/></group></if><else-if type="bill"><group delimiter=". "><group delimiter=", "><choose><if variable="number container-title" match="none"><text variable="title" font-style="italic"/></if><else><text variable="title"/></else></choose><group delimiter=" "><text macro="container-legal"/><text macro="date-legal"/><choose><if variable="number container-title" match="none"><names variable="author" prefix="(testimony of " suffix=")"><name and="symbol" delimiter=", "/></names></if><else><text variable="status" prefix="(" suffix=")"/></else></choose></group><text variable="references"/></group><text macro="access"/></group></else-if><else-if type="legislation"><group delimiter=". "><group delimiter=", "><text variable="title"/><group delimiter=" "><text macro="container-legal"/><text macro="date-legal"/><text variable="status" prefix="(" suffix=")"/></group><text variable="references"/></group><text macro="access"/></group></else-if><else-if type="treaty"><group delimiter=", "><text variable="title" text-case="title"/><names variable="author"><name initialize-with="." form="short" delimiter="-"/></names><text macro="date-legal"/><text macro="container-legal"/><text macro="access"/></group></else-if></choose></macro><macro name="date-legal"><choose><if type="legal_case"><group prefix="(" suffix=")" delimiter=" "><text variable="authority"/><choose><if variable="container-title" match="any"><date variable="issued" form="numeric" date-parts="year"/></if><else><date variable="issued" form="text"/></else></choose></group></if><else-if type="bill legislation" match="any"><group prefix="(" suffix=")" delimiter=" "><group delimiter=" "><date variable="original-date"><date-part name="year"/></date><text term="and" form="symbol"/></group><date variable="issued"><date-part name="year"/></date></group></else-if><else-if type="treaty"><date variable="issued" form="text"/></else-if></choose></macro><macro name="container-legal"><choose><if type="legal_case"><group delimiter=" "><choose><if variable="container-title"><group delimiter=" "><text variable="volume"/><text variable="container-title"/><group delimiter=" "><text term="section" form="symbol"/><text variable="section"/></group><choose><if variable="page page-first" match="any"><text variable="page-first"/></if><else><text value="___"/></else></choose></group></if><else><group delimiter=" "><choose><if is-numeric="number"><text term="issue" form="short" text-case="capitalize-first"/></if></choose><text variable="number"/></group></else></choose></group></if><else-if type="bill"><group delimiter=", "><group delimiter=" "><text variable="genre"/><group delimiter=" "><choose><if variable="chapter-number container-title" match="none"><text term="issue" form="short"/></if></choose><text variable="number"/></group></group><text variable="authority"/><text variable="chapter-number"/><group delimiter=" "><text variable="volume"/><text variable="container-title"/><text variable="page-first"/></group></group></else-if><else-if type="legislation"><choose><if variable="number"><group delimiter=", "><text variable="number" prefix="Pub. L. No. "/><group delimiter=" "><text variable="volume"/><text variable="container-title"/><text variable="page-first"/></group></group></if><else><group delimiter=" "><text variable="volume"/><text variable="container-title"/><choose><if variable="section"><group delimiter=" "><text term="section" form="symbol"/><text variable="section"/></group></if><else><text variable="page-first"/></else></choose></group></else></choose></else-if><else-if type="treaty"><group delimiter=" "><number variable="volume"/><text variable="container-title"/><choose><if variable="page page-first" match="any"><text variable="page-first"/></if><else><group delimiter=" "><text term="issue" form="short" text-case="capitalize-first"/><text variable="number"/></group></else></choose></group></else-if></choose></macro><macro name="citation-locator"><group delimiter=" "><choose><if locator="chapter"><label variable="locator" text-case="capitalize-first"/></if><else><label variable="locator" form="short"/></else></choose><text variable="locator"/></group></macro><citation et-al-min="3" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" collapse="year" givenname-disambiguation-rule="primary-name-with-initials"><sort><key macro="author-bib" names-min="3" names-use-first="1"/><key macro="date-sort-group"/><key macro="date-sort-date" sort="ascending"/><key variable="status"/></sort><layout prefix="(" suffix=")" delimiter="; "><group delimiter=", "><text macro="author-intext"/><text macro="date-intext"/><text macro="citation-locator"/></group></layout></citation><bibliography hanging-indent="true" et-al-min="21" et-al-use-first="19" et-al-use-last="true" entry-spacing="0" line-spacing="2"><sort><key macro="author-bib"/><key macro="date-sort-group"/><key macro="date-sort-date" sort="ascending"/><key variable="status"/><key macro="title"/></sort><layout><choose><if type="bill legal_case legislation treaty" match="any"><choose><if variable="DOI URL" match="any"><text macro="legal-cites"/></if><else><text macro="legal-cites" suffix="."/></else></choose></if><else><group delimiter=" "><group delimiter=". " suffix="."><text macro="author-bib"/><text macro="date-bib"/><text macro="title-and-descriptions"/><text macro="container"/><text macro="event"/><text macro="publisher"/></group><text macro="access"/><text macro="publication-history"/></group></else></choose></layout></bibliography></style>`
};
const templates = new Register(defaultTemplates);
// @ts-nocheck
// BEGIN add sys function
const proxied = Symbol.for('proxied');
const getWrapperProxy = function getWrapperProxy(original) {
const proxy = function proxy(state, entry) {
if (state.sys.wrapBibliographyEntry) {
const [prefix, postfix] = state.sys.wrapBibliographyEntry(this.system_id);
entry = [prefix, entry, postfix].join('');
}
return original.call(this, state, entry);
};
proxy[proxied] = true;
return proxy;
};
for (const format in CSL.Output.Formats) {
const original = CSL.Output.Formats[format]['@bibliography/entry'];
/* istanbul ignore if: currently unreachable */
if (!original || original[proxied]) {
continue;
}
CSL.Output.Formats[format]['@bibliography/entry'] = getWrapperProxy(original);
}
// END
/**
* @access private
* @param {String} locale - locale code
* @return {String} locale XML
*/
function retrieveLocale(locale) {
if (locales.has(locale)) {
return locales.get(locale);
}
const unnormalised = locale.replace('-', '_');
if (locales.has(unnormalised)) {
return locales.get(unnormalised);
}
// Should only occur when a cs:style default-locale is unknown
return {};
}
/**
* Object containing CSL Engines
*
* @access private
* @constant
*/
const engines = {};
/**
* Retrieve CSL parsing engine
*
* @access private
*
* @param {String} style - CSL style id
* @param {String} lang - Language code
* @param {String} template - CSL XML template
* @param {module:output/csl~retrieveItem} retrieveItem - Code to retreive item
* @param {module:output/csl~retrieveLocale} retrieveLocale - Code to retreive locale
*
* @return {Object} CSL Engine
*/
const fetchEngine = function fetchEngine(style, locale, styleXml, retrieveItem, retrieveLocale) {
const engineHash = `${style}|${locale}`;
let engine;
if (engines[engineHash] instanceof CSL.Engine) {
engine = engines[engineHash];
engine.sys.retrieveItem = retrieveItem;
engine.sys.wrapBibliographyEntry = undefined;
engine.updateItems([]);
} else {
engine = engines[engineHash] = new CSL.Engine({
retrieveLocale,
retrieveItem
}, styleXml, locale, true);
}
return engine;
};
/**
* Prepare CSL parsing engine
*
* @access private
*
* @param {Array<CSL>} data
* @param {String} templateName
* @param {String} language
* @param {String} format
*
* @return {Object} CSL Engine
*/
const prepareEngine = function prepareEngine(data, style, locale, format) {
if (!CSL.Output.Formats[format] || !CSL.Output.Formats[format]['@bibliography/entry']) {
throw new TypeError(`Cannot find format '${format}'`);
}
const items = data.reduce((store, entry) => {
store[entry.id] = entry;
return store;
}, {});
const template = templates.get(templates.has(style) ? style : 'apa');
locale = locales.has(locale) ? locale : undefined;
const callback = function callback(key) {
if (Object.prototype.hasOwnProperty.call(items, key)) {
return items[key];
} else {
throw new Error(`Cannot find entry with id '${key}'`);
}
};
const engine = fetchEngine(style, locale, template, callback, retrieveLocale);
engine.setOutputFormat(format);
return engine;
};
/**
* Add data-* attribute to a HTML string
*
* @access private
*
* @param {String} string - HTML string
* @param {String} name - attribute name
* @param {String} value - attribute value
*
* @return {String} HTML string with attribute
*/
const getAttributedEntry = (string, name, value) => string.replace(/^\s*<[a-z]+/i, `$& data-${name}="${value}"`);
/**
* Add CSL identifiers to entry
*
* @access private
*
* @param {String} value - HTML string
* @param {String} id - ID
*
* @return {String} HTML string with CSL ID
*/
const getPrefixedEntry = (value, id) => getAttributedEntry(value, 'csl-entry-id', id);
// @ts-nocheck
/**
* Get a rendered affix
*
* @access private
*
* @param {CSL} source - source element
* @param {String|Cite~wrapper} affix
*
* @return {String} Rendered affixs
*/
const getAffix = (source, affix) => typeof affix === 'function' ? affix(source) : affix || '';
/**
* This plugin adds the output format `bibliography`, and accepts the following specific options:
*
* * `prepend` (`String`, `Function`): prepend static or dynamic text to each entry
* * `append` (`String`, `Function`): append static or dynamic text to each entry
* * `nosort` (`Boolean`, default: `false`): do not sort according to the style-defined rules
* * `asEntryArray` (`Boolean`, default: `false`): return an array of entries consisting of an id and the output for that individual entry
*
* Here's an example for `prepend` and `append`:
*
* ```js
* let cite = new Cite({ id: 'a', title: 'Item A' })
*
* cite.format('bibliography', { append: ' [foobar]' })
* // 'Item A. (n.d.). [foobar]\n'
*
* cite.format('bibliography', { prepend (entry) { return `${entry.id}: ` } })
* // 'a: Item A. (n.d.).\n'
* ```
*
* And here's another example, possibly more realistic:
*
* ```js
* let cite = new Cite('Q30000000')
*
* let date = (new Date()).toLocaleDateString()
*
* cite.format('bibliography', {
* format: 'html',
* template: 'apa',
* prepend (entry) {
* return `[${entry.id}]: `
* },
* append: ` [Retrieved on ${date}]`
* })
*
* // `<div class="csl-bib-body">
* // <div data-csl-entry-id="Q30000000" class="csl-entry">
* // [Q30000000]: Miccadei, S., De Leo, R., Zammarchi, E., Natali, P. G., &#38; Civitareale, D. (2002). The Synergistic Activity of Thyroid Transcription Factor 1 and Pax 8 Relies on the Promoter/Enhancer Interplay. <i>Molecular Endocrinology</i>, <i>16</i>(4), 837846. https://doi.org/10.1210/MEND.16.4.0808 [Retrieved on 2018-7-10]
* // </div>
* // </div>`
* ```
*
* This prepends `[$ID]: ` to each entry, where `$ID` is the ID of that entry, and appends ` [Retrieved on $DATE]`, where `$DATE` is today (constant for all entries).
*
* Here's an example for `asEntryArray`:
*
* ```js
* const cite = new Cite([
* { id: 'a', title: 'Item A', issued: { literal: 2021 } },
* { id: 'b', title: 'Item B', issued: { literal: 2021 } }
* ])
*
* cite.format('bibliography', { asEntryArray: true })
* // [
* // [
* // "a"
* // "Item A. (2021).\n"
* // ],
* // [
* // "b"
* // "Item B. (2021).\n"
* // ]
* // ]
* ```
*
* @memberof module:@citation-js/plugin-csl.output
* @implements module:@citation-js/core.plugins.output~formatter
* @method bibliography
*
* @param {Array<CSL>} data
* @param {Object} [options={}]
* @param {String} [options.template='apa']
* @param {String} [options.lang]
* @param {String} [options.format='text']
* @param {Booolean} [options.asEntryArray=false]
* @param {Booolean} [options.nosort=false]
* @param {String|Array<String>} [options.entry]
* @param {Cite~wrapper} [options.prepend]
* @param {Cite~wrapper} [options.append]
*
* @return {String} output
*/
function bibliography(data, options = {}) {
const {
template = 'apa',
lang,
format = 'text',
nosort = false
} = options;
const ids = options.entry ? [].concat(options.entry) : data.map(({
id
}) => id);
data = downgradeCsl(data);
const citeproc = prepareEngine(data, template, lang, format);
const sortedIds = citeproc.updateItems(ids, nosort);
if (options.append || options.prepend) {
const items = data.reduce((items, entry) => {
items[entry.id] = entry;
return items;
}, {});
citeproc.sys.wrapBibliographyEntry = function (id) {
const entry = items[id];
return [getAffix(entry, options.prepend), getAffix(entry, options.append)];
};
}
const bibliography = citeproc.makeBibliography();
const [{
bibstart,
bibend
}, bibBody] = bibliography;
const entries = bibBody.map((element, index) => getPrefixedEntry(element, sortedIds[index]));
if (options.asEntryArray) {
return entries.map((element, index) => [sortedIds[index], element]);
}
return bibstart + entries.join('') + bibend;
}
// @ts-nocheck
/**
* https://citeproc-js.readthedocs.io/en/latest/csl-json/markup.html#cite-items
*
* @typedef {Object} module:@citation-js/plugin-csl.output~CiteItem
* @property {String} id
*/
/**
* https://citeproc-js.readthedocs.io/en/latest/csl-json/markup.html#citations
*
* @typedef {Object} module:@citation-js/plugin-csl.output~Citation
* @property {Array<module:@citation-js/plugin-csl.output~CiteItem>} citationItems
* @property {Object} properties
* @property {Number} properties.noteIndex
*/
/**
* @access private
* @param {String|module:@citation-js/plugin-csl.output~CiteItem} citeItem
* @return {module:@citation-js/plugin-csl.output~CiteItem} citeItem
*/
function prepareCiteItem(citeItem) {
return typeof citeItem === 'object' ? citeItem : {
id: citeItem
};
}
/**
* @access private
* @param {String|Array<String>|Array<module:@citation-js/plugin-csl.output~CiteItem>|module:@citation-js/plugin-csl.output~CiteItem|module:@citation-js/plugin-csl.output~Citation} citation
* @return {module:@citation-js/plugin-csl.output~Citation} citation
*/
function prepareCitation(citation) {
if (citation.citationItems) {
return citation;
}
return {
citationItems: [].concat(citation).map(prepareCiteItem),
properties: {
noteIndex: 0
}
};
}
/**
* @access private
* @param {Array<String>|Array<module:@citation-js/plugin-csl.output~CiteItem>|Array<module:@citation-js/plugin-csl.output~Citation>} [context=[]]
* @return {Array<module:@citation-js/plugin-csl.output~Citation>} citations
*/
function prepareCitations(context) {
if (!context) {
return [];
}
return context.map(prepareCitation);
}
/**
* Here's an example for `entry`:
*
* ```js
* let cite = new Cite([
* { id: 'a', title: 'Item A', issued: { 'date-parts': [[2016]] } },
* { id: 'b', title: 'Item B', issued: { 'date-parts': [[2017]] } },
* { id: 'c', title: 'Item C', issued: { 'date-parts': [[2018]] } }
* ])
*
* cite.format('citation')
* // '(“Item A,” 2016; “Item B,” 2017; “Item C,” 2018)'
*
* cite.format('citation', { entry: ['a', 'b'] })
* // '(“Item A,” 2016; “Item B,” 2017)'
*
* cite.format('citation', { entry: 'a' })
* // '(“Item A,” 2016)'
*
* cite.format('citation', { entry: [{ id: 'a', label: 'page', locator: 123 }] })
* // '(“Item A,” 2016, p. 123)'
* ```
*
* @memberof module:@citation-js/plugin-csl.output
* @implements module:@citation-js/core.plugins.output~formatter
* @method citation
*
* @param {Array<CSL>} data
* @param {Object} [options={}]
* @param {String} [options.template='apa']
* @param {String} [options.lang]
* @param {String} [options.format='text']
* @param {module:@citation-js/plugin-csl.output~Entries} [options.entry] - list of ids or cite-items of entries to include in the citation (defaults to all)
* @param {Array<String>} [options.citationsPre=[]]
* @param {Array<String>} [options.citationsPost=[]]
*
* @return {String} output
*/
function citation(data, options = {}) {
const {
template = 'apa',
lang,
format = 'text'
} = options;
const ids = data.map(({
id
}) => id);
const entries = options.entry ? options.entry : ids;
data = downgradeCsl(data);
const citeproc = prepareEngine(data, template, lang, format);
const before = prepareCitations(options.citationsPre);
const citation = prepareCitation(entries);
const after = prepareCitations(options.citationsPost);
const output = citeproc.rebuildProcessorState([...before, citation, ...after], format, []);
return output[before.length][2];
}
// @ts-nocheck
add('@csl', {
/**
* @namespace output
* @type Object<module:@citation-js/core.plugins.output~formatterName,module:@citation-js/core.plugins.output~formatter>
* @memberof module:@citation-js/plugin-csl
*/
output: {
bibliography,
citation
},
/**
* @namespace config
* @memberof module:@citation-js/plugin-csl
*/
config: {
/**
* The configuration object also exposes an internal method to prepare a Citeproc engine with given data and configuration:
*
* ```js
* let config = plugins.config.get('@csl')
*
* let citeproc = plugins.engine(
* [{ ... }], // data
* 'apa', // style
* 'en-US', // locale
* 'html' // format
* )
*
* let sortedIds = citeproc.updateItems(
* [...] // data ids
* )
* let makeBibliography = citeproc.makeBibliography()
* ```
*
* @memberof module:@citation-js/plugin-csl.config
* @method engine
* @param {module:@citation-js/core~CSL} data
* @param {String} style
* @param {String} locale
* @param {String} format
*/
engine: prepareEngine,
/**
* Different [CSL Locales](https://github.com/citation-style-language/locales) can be registered like this:
*
* ```js
* let language = 'en-GB'
* let locale = '<?xml version="1.0" encoding="utf-8"?><locale ...>...</locale>' // The actual XML file
*
* let config = plugins.config.get('@csl')
* config.locales.add(language, locale)
*
* let example = new Cite(...)
* example.format('bibliography', {
* format: 'html',
* template: 'apa',
* lang: language
* })
* ```
*
* @memberof module:@citation-js/plugin-csl.config
* @var {module:@citation-js/core.util.Register} locales
*/
locales,
/**
* Different [CSL Templates](https://github.com/citation-style-language/styles) can be registered like this:
*
* ```js
* let templateName = 'custom'
* let template = '<?xml version="1.0" encoding="utf-8"?><style ...>...</style>' // The actual XML file
*
* let config = plugins.config.get('@csl')
* config.templates.add(templateName, template)
*
* let example = new Cite(...)
* example.format('bibliography', {
* format: 'html',
* template: templateName,
* lang: 'en-US'
* })
* ```
*
* @memberof module:@citation-js/plugin-csl.config
* @var {module:@citation-js/core.util.Register} templates
*/
templates
}
});
// See https://github.com/nodeca/js-yaml/issues/569
const timestampTag = 'tag:yaml.org,2002:timestamp';
const timestamp = yaml.DEFAULT_SCHEMA.compiledTypeMap.scalar[timestampTag];
const date = new yaml.Type(timestampTag, {
kind: 'scalar',
resolve: timestamp.resolve,
construct: timestamp.construct,
instanceOf: Date,
represent(object) {
return object.toISOString().split('T')[0];
}
});
const CFF_SCHEMA = yaml.DEFAULT_SCHEMA.extend({
implicit: [date],
explicit: []
});
add('@else', {
input: {
'@else/yaml': {
parseType: {
dataType: 'String',
tokenList: {
split: /\n(\s{2})*(-\s)?/,
token: /^[\w-]*: /,
every: false
}
},
parse(file) {
return yaml.load(file, {
json: true
});
}
}
},
output: {
yaml(data) {
return yaml.dump(data, {
schema: CFF_SCHEMA
});
}
}
});
/**
* Format: Citation File Format (CFF) version 1.2.0
* Spec: https://github.com/citation-file-format/citation-file-format/blob/1.2.0/schema-guide.md
*/
const TYPES_TO_TARGET = {
art: 'graphic',
article: 'article-journal',
// more likely
audiovisual: 'motion_picture',
bill: 'bill',
blog: 'post-weblog',
book: 'book',
catalogue: 'collection',
conference: 'event',
'conference-paper': 'paper-conference',
data: 'dataset',
database: 'dataset',
dictionary: 'entry-dictionary',
'edited-work': 'document',
// unmapped
encyclopedia: 'entry-encyclopedia',
'film-broadcast': 'broadcast',
generic: 'document',
'government-document': 'regulation',
grant: 'document',
// unmapped
hearing: 'hearing',
'historical-work': 'classic',
'legal-case': 'legal_case',
'legal-rule': 'legislation',
'magazine-article': 'article-magazine',
manual: 'report',
// substitute presented in the CSL specification
map: 'map',
multimedia: 'motion_picture',
music: 'musical_score',
'newspaper-article': 'article-newspaper',
pamphlet: 'pamphlet',
patent: 'patent',
'personal-communication': 'personal_communication',
proceedings: 'book',
// substitute presented in the CSL specification
report: 'report',
serial: 'periodical',
slides: 'speech',
software: 'software',
'software-code': 'software',
'software-container': 'software',
'software-executable': 'software',
'software-virtual-machine': 'software',
'sound-recording': 'song',
standard: 'standard',
statute: 'legislation',
thesis: 'thesis',
unpublished: 'article',
video: 'motion_picture',
website: 'webpage'
};
const TYPES_TO_SOURCE = {
article: 'article',
'article-journal': 'article',
'article-magazine': 'magazine-article',
'article-newspaper': 'newspaper-article',
bill: 'bill',
book: 'book',
broadcast: 'film-broadcast',
chapter: 'generic',
// unmapped
classic: 'historical-work',
collection: 'catalogue',
dataset: 'data',
document: 'generic',
entry: 'generic',
// unmapped
'entry-dictionary': 'dictionary',
'entry-encyclopedia': 'encyclopedia',
event: 'conference',
figure: 'generic',
// unmapped
graphic: 'art',
hearing: 'hearing',
interview: 'sound-recording',
legal_case: 'legal-case',
legislation: 'statute',
manuscript: 'historical-work',
map: 'map',
motion_picture: 'film-broadcast',
musical_score: 'music',
pamphlet: 'pamphlet',
'paper-conference': 'conference-paper',
patent: 'patent',
performance: 'generic',
// unmapped
periodical: 'serial',
personal_communication: 'personal-communication',
post: 'serial',
'post-weblog': 'blog',
regulation: 'government-document',
report: 'report',
review: 'generic',
// unmapped
'review-book': 'generic',
// unmapped
software: 'software',
song: 'sound-recording',
speech: 'slides',
standard: 'standard',
thesis: 'thesis',
treaty: 'generic',
webpage: 'website'
};
const ENTITY_PROPS = [{
source: 'family-names',
target: 'family'
}, {
source: 'given-names',
target: 'given'
}, {
source: 'name-particle',
target: 'non-dropping-particle'
}, {
source: 'name-suffix',
target: 'suffix'
}, {
source: 'name',
target: 'literal'
}, {
source: 'orcid',
target: '_orcid'
}];
const entity = new Translator(ENTITY_PROPS);
const PROP_CONVERTERS = {
names: {
toTarget(names) {
return names.map(entity.convertToTarget);
},
toSource(names) {
return names.map(entity.convertToSource);
}
},
publisher: {
toTarget({
name,
city,
region,
country
}) {
const place = [city, region, country].filter(Boolean).join(', ');
return [name, place || undefined];
},
toSource(name, place) {
const entity = {
name
};
if (place) {
// Parse the following:
// - Country
// - City, Country
// - City, Region, Country
const parts = place.split(', ');
entity.country = parts.pop();
if (parts.length === 2) {
entity.region = parts.pop();
}
if (parts.length === 1) {
entity.city = parts.pop();
}
}
return entity;
}
},
date: {
toTarget(date) {
if (date instanceof Date) {
return parse$9(date.toISOString());
} else {
return parse$9(new Date(date).toISOString());
}
},
toSource(date) {
if (date.raw) {
return date.raw;
}
const [year, month, day] = date['date-parts'][0];
if (day) {
return new Date(Date.UTC(year, month - 1, day));
} else if (month) {
return new Date(Date.UTC(year, month - 1));
} else {
return new Date(Date.UTC(year));
}
}
}
};
const SHARED_PROPS = ['abstract', {
source: 'authors',
target: 'author',
convert: PROP_CONVERTERS.names
},
// TODO cff: commit
// TODO cff: contact
{
source: 'date-released',
target: 'issued',
when: {
target: {
type: 'software'
}
},
convert: PROP_CONVERTERS.date
}, {
source: 'doi',
target: 'DOI'
}, {
source: 'identifiers',
target: ['DOI', 'ISBN', 'ISSN', 'PMCID', 'PMID', 'URL'],
convert: {
toTarget(identifiers) {
const newIdentifiers = Array(6).fill(undefined);
for (const {
type,
value
} of identifiers) {
if (!this.doi && type === 'doi') {
newIdentifiers[0] = value;
}
if (!this.url && type === 'url') {
newIdentifiers[5] = value;
}
if (type === 'other' && value.startsWith('urn:isbn:')) {
newIdentifiers[1] = value.slice(9);
}
if (type === 'other' && value.startsWith('urn:issn:')) {
newIdentifiers[2] = value.slice(9);
}
if (type === 'other' && value.startsWith('pmcid:')) {
newIdentifiers[3] = value.slice(6);
}
if (type === 'other' && value.startsWith('pmid:')) {
newIdentifiers[4] = value.slice(5);
}
}
return newIdentifiers;
},
toSource(doi, isbn, issn, pmcid, pmid, url) {
return [doi && {
type: 'doi',
value: doi
}, url && {
type: 'url',
value: url
}, isbn && {
type: 'other',
value: `urn:isbn:${isbn}`
}, issn && {
type: 'other',
value: `urn:issn:${issn}`
}, pmcid && {
type: 'other',
value: `pmcid:${pmcid}`
}, pmid && {
type: 'other',
value: `pmid:${pmid}`
}].filter(Boolean);
}
}
}, {
source: 'keywords',
target: 'keyword',
convert: {
toTarget(keywords) {
return keywords.join(',');
},
toSource(keywords) {
return keywords.split(/,\s*/g);
}
}
},
// TODO cff: license
// TODO cff: license-url
// TODO cff: message *
// TODO cff: repository
// TODO cff: repository-code
// TODO cff: repository-artifact
{
source: 'title',
target: 'title',
when: {
source: {
term: false,
entry: false
},
target: {
type(type) {
return !['entry', 'entry-dictionary', 'entry-encyclopedia'].includes(type);
}
}
}
}, {
source: 'title',
target: 'container-title',
when: {
source: {
entry: true,
journal: false
},
target: {
type: ['entry']
}
}
}, {
source: 'title',
target: 'container-title',
when: {
source: {
term: true,
journal: false
},
target: {
type: ['entry-dictionary', 'entry-encyclopedia']
}
}
}, {
source: 'url',
target: 'URL'
}, 'version'];
const MAIN_PROPS = [
// TYPES
{
source: 'type',
target: 'type',
convert: {
toSource(type) {
return type === 'dataset' ? 'dataset' : 'software';
},
toTarget(type) {
return type === 'dataset' ? 'dataset' : 'software';
}
}
},
// Include main mappings
...SHARED_PROPS];
const REF_PROPS = [
// Include main mappings
...SHARED_PROPS,
// ABBREVIATION
{
source: 'abbreviation',
target: 'title-short'
}, {
source: 'abbreviation',
target: 'shortTitle'
},
// COLLECTIONS
// TODO cff: collection-doi
// TODO cff: collection-type
'collection-title',
// COMMUNICATION
{
source: 'recipients',
target: 'recipient',
convert: PROP_CONVERTERS.names
}, {
source: 'senders',
target: 'authors',
convert: PROP_CONVERTERS.names
},
// CONFERENCE
{
source: 'conference',
target: ['event-title', 'event-date', 'event-place', 'event'],
convert: {
toSource(name, date, place, nameFallback) {
const entity = {
name: name || nameFallback
};
if (place) {
entity.location = place;
}
if (date) {
entity['date-start'] = PROP_CONVERTERS.date.toSource(date);
if (date['date-parts'] && date['date-parts'].length === 2) {
entity['date-end'] = PROP_CONVERTERS.date.toSource({
'date-parts': [date['date-parts'][1]]
});
}
}
return entity;
},
toTarget(event) {
return [event.name, parse$9(event['date-start'].toISOString(), event['date-end'].toISOString()), event.location];
}
}
},
// COPYRIGHT
// TODO cff: contact
// TODO cff: copyright
// DATABASE
{
source: 'database',
target: 'source'
},
// TODO cff: database-provider NOTE entity
// DATE
{
source: 'date-accessed',
target: 'accessed',
convert: PROP_CONVERTERS.date
}, {
source: 'date-downloaded',
target: 'accessed',
convert: PROP_CONVERTERS.date,
when: {
source: {
'date-accessed': false
},
target: false
}
}, {
source: 'date-published',
target: 'issued',
convert: PROP_CONVERTERS.date,
when: {
source: {
'date-released': false
},
target() {
return this.type !== 'book' || !this.version;
}
}
}, {
source: ['year', 'month'],
target: 'issued',
when: {
source: {
'date-published': false,
'date-released': false,
year: true
}
},
convert: {
toTarget(year, month) {
const date = month ? [year, month] : [year];
return {
'date-parts': [date]
};
},
toSource(issued) {
const [year, month] = issued['date-parts'][0];
return [year, month];
}
}
}, {
source: 'year-original',
target: 'original-date',
convert: {
toTarget(year) {
return {
'date-parts': [[year]]
};
},
toSource(date) {
return date['date-parts'][0][0];
}
}
},
// EDITION
'edition',
// EDITORS
{
source: 'editors',
target: 'editor',
convert: PROP_CONVERTERS.names
}, {
source: 'editors-series',
target: 'collection-editor',
convert: PROP_CONVERTERS.names
},
// ENTRY
{
source: 'entry',
target: 'title',
when: {
source: {
term: false
},
target: {
type: 'entry'
}
}
}, {
source: 'term',
target: 'title',
when: {
target: {
type: ['entry-dictionary', 'entry-encyclopedia']
}
}
},
// FORMAT
{
source: 'format',
target: 'dimensions'
}, 'medium',
// GENRE
{
source: 'data-type',
target: 'genre',
when: {
target: {
type(type) {
return type !== 'thesis';
}
}
}
}, {
source: 'thesis-type',
target: 'genre',
when: {
source: {
'data-type': false
},
target: {
type: 'thesis'
}
}
},
// IDENTIFIERS
{
source: 'isbn',
target: 'ISBN'
}, {
source: 'issn',
target: 'ISSN'
},
// TODO cff: nihmsid
{
source: 'pmcid',
target: 'PMCID'
},
// ISSUE
'issue',
// JOURNAL
{
source: 'journal',
target: 'container-title'
}, {
source: 'volume-title',
target: 'volume-title'
}, {
source: 'issue-title',
target: 'volume-title',
when: {
source: {
'volume-title': false
},
target: false
}
},
// TODO cff: issue-date
// LANGUAGE
{
source: 'languages',
target: 'language',
when: {
target: true,
// NOTE: possible values not as strict in csl, so test (crudely) if the value is ok first
source: {
language(code) {
return /[a-z]{2,3}/.test(code);
}
}
},
convert: {
// NOTE: CSL can only hold one language
toSource(language) {
return [language];
},
toTarget(languages) {
return languages[0];
}
}
},
// LOCATION
{
source: 'location',
target: ['archive', 'archive-place'],
convert: PROP_CONVERTERS.publisher
},
// LOCATION (CODE)
// TODO cff: filename
// TODO cff: loc-start
// TODO cff: loc-end
// NOTES
{
source: 'notes',
target: 'note',
when: {
source: {
scope: false
}
}
}, {
source: 'scope',
target: 'note',
when: {
target: false
}
},
// NUMBER
'number',
// PATENT
{
source: 'patent-states',
target: 'jurisdiction',
// NOTE: CSL jurisdiction can contain more than just US states
when: {
target: false
},
convert: {
toTarget(states) {
return states.join(', ');
}
}
},
// PUBLISHER
{
source: ['institution', 'department'],
target: ['publisher', 'publisher-place'],
when: {
source: {
publisher: false
},
target: {
type: 'thesis'
}
},
convert: {
toTarget(institution, department) {
const [name, place] = PROP_CONVERTERS.publisher.toTarget(institution);
return [department ? `${department}, ${name}` : name, place];
},
toSource(name, place) {
return [PROP_CONVERTERS.publisher.toSource(name, place)];
}
}
}, {
source: 'publisher',
target: ['publisher', 'publisher-place'],
when: {
target: {
type(type) {
return type !== 'thesis';
}
}
},
convert: PROP_CONVERTERS.publisher
},
// SECTION
'section',
// STATUS
{
source: 'status',
target: 'status',
when: {
source: true,
// NOTE: possible values not as strict in csl, so test if the value is ok first
target: {
status: ['in-preparation', 'abstract', 'submitted', 'in-press', 'advance-online', 'preprint']
}
}
},
// PAGES
{
source: 'start',
target: 'page-first',
when: {
target: {
page: false
}
}
}, {
source: ['start', 'end'],
target: 'page',
convert: {
toTarget(start, end) {
return end ? `${start}-${end}` : start;
},
toSource(page) {
const [start, end] = page.split('-');
return end ? [start, end] : [start];
}
}
}, {
source: 'pages',
target: 'number-of-pages'
},
// TRANSLATORS
{
source: 'translators',
target: 'translator',
convert: PROP_CONVERTERS.names
},
// TYPES
{
source: 'type',
target: 'type',
convert: {
toTarget(type) {
return TYPES_TO_TARGET[type] || 'document';
},
toSource(type) {
if (type === 'book' && this['event-title']) {
return 'proceedings';
}
return TYPES_TO_SOURCE[type] || 'generic';
}
}
},
// VOLUMES
'volume', {
source: 'number-volumes',
target: 'number-of-volumes'
}];
const mainTranslator = new Translator(MAIN_PROPS);
const refTranslator = new Translator(REF_PROPS);
const CFF_VERSION = '1.2.0';
/** Add doi or url as unique id if available to make citation easy */
function addId(entry) {
if ('DOI' in entry) {
entry.id = entry.DOI;
} else if ('URL' in entry) {
entry.id = entry.URL.replace('http://', '').replace('https://', '');
}
}
function parse(input) {
const main = mainTranslator.convertToTarget(input);
if (input['cff-version'] <= '1.1.0') {
main.type = TYPES_TO_TARGET.software;
}
main._cff_mainReference = true;
addId(main);
const output = [main];
if (input['preferred-citation']) {
const preferredCitation = refTranslator.convertToTarget(input['preferred-citation']);
addId(preferredCitation);
output.push(preferredCitation);
}
if (Array.isArray(input.references)) {
output.push(...input.references.map(refTranslator.convertToTarget));
}
return output;
}
function format(input, options = {}) {
input = input.slice();
const {
main,
preferred,
cffVersion = CFF_VERSION,
message = 'Please cite the following works when using this software.'
} = options;
let preferredCitation;
const preferredIndex = input.findIndex(entry => preferred && entry.id === preferred);
if (cffVersion >= '1.2.0' && preferredIndex > -1) {
preferredCitation = refTranslator.convertToSource(...input.splice(preferredIndex, 1));
}
let mainIndex = input.findIndex(entry => main ? entry.id === main : entry._cff_mainReference);
mainIndex = mainIndex > -1 ? mainIndex : 0;
const mainRef = input[mainIndex] ? mainTranslator.convertToSource(...input.splice(mainIndex, 1)) : {};
if (mainRef && cffVersion < '1.2.0') {
delete mainRef.type;
}
const cff = _extends({
'cff-version': cffVersion,
message
}, mainRef);
if (preferredCitation) {
cff['preferred-citation'] = preferredCitation;
}
if (input.length) {
cff.references = input.map(refTranslator.convertToSource);
}
return cff;
}
add('@cff', {
input: {
'@cff/object': {
parseType: {
dataType: 'SimpleObject',
propertyConstraint: {
props: 'cff-version'
}
},
parse
}
},
output: {
cff(data, options = {}) {
const output = format(data, options);
if (options.type === 'object') {
return output;
} else {
return format$7('yaml', output);
}
}
}
});
function clone(obj) {
const copy = {};
for (const key in obj) {
copy[key] = typeof obj[key] === 'object' ? clone(obj[key]) : obj[key];
}
return copy;
}
function Cite(data, opts) {
if (!(this instanceof Cite)) {
return new Cite(data, opts);
}
const self = new Cite$1(data, opts);
this._options = self._options;
this.log = self.log;
this.data = self.data;
}
Cite.plugins = clone(plugins);
export { Cite as default };
//# sourceMappingURL=cite.mjs.map