15316 lines
1.1 MiB
Plaintext
15316 lines
1.1 MiB
Plaintext
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
|
|
if you want to view the source visit the plugins github repository
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var obsidian = require('obsidian');
|
|
var url = require('url');
|
|
var path = require('path');
|
|
var require$$0$1 = require('fs');
|
|
|
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
|
|
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
|
|
|
|
/******************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
|
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
}
|
|
|
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
|
|
function getDefaultExportFromCjs (x) {
|
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
}
|
|
|
|
function getAugmentedNamespace(n) {
|
|
if (n.__esModule) return n;
|
|
var f = n.default;
|
|
if (typeof f == "function") {
|
|
var a = function a () {
|
|
if (this instanceof a) {
|
|
var args = [null];
|
|
args.push.apply(args, arguments);
|
|
var Ctor = Function.bind.apply(f, args);
|
|
return new Ctor();
|
|
}
|
|
return f.apply(this, arguments);
|
|
};
|
|
a.prototype = f.prototype;
|
|
} else a = {};
|
|
Object.defineProperty(a, '__esModule', {value: true});
|
|
Object.keys(n).forEach(function (k) {
|
|
var d = Object.getOwnPropertyDescriptor(n, k);
|
|
Object.defineProperty(a, k, d.get ? d : {
|
|
enumerable: true,
|
|
get: function () {
|
|
return n[k];
|
|
}
|
|
});
|
|
});
|
|
return a;
|
|
}
|
|
|
|
// Generic options
|
|
class AnalyzerOptions {
|
|
constructor(heuristic_replimit) {
|
|
this.heuristic_replimit = heuristic_replimit;
|
|
}
|
|
}
|
|
|
|
// Abstract class
|
|
class Analyzer {
|
|
constructor(analyzerOptions) {
|
|
this.options = analyzerOptions;
|
|
}
|
|
|
|
// Subclasser must implement
|
|
// Return boolean
|
|
isVulnerable(regExp) {
|
|
return false;
|
|
}
|
|
|
|
// Subclass must implement
|
|
// Returns an AttackString or null
|
|
genAttackString(regExp) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
var analyzer$2 = function(re, replimit) {
|
|
// Build an AST
|
|
let myRegExp = null;
|
|
let ast = null;
|
|
try {
|
|
// Construct a RegExp object
|
|
if (re instanceof RegExp) {
|
|
myRegExp = re;
|
|
} else if (typeof re === "string") {
|
|
myRegExp = new RegExp(re);
|
|
} else {
|
|
myRegExp = new RegExp(String(re));
|
|
}
|
|
|
|
// Build an AST
|
|
ast = regexpTree.parse(myRegExp);
|
|
} catch (err) {
|
|
// Invalid or unparseable input
|
|
return false;
|
|
}
|
|
|
|
let currentStarHeight = 0;
|
|
let maxObservedStarHeight = 0;
|
|
|
|
let repetitionCount = 0;
|
|
|
|
regexpTree.traverse(ast, {
|
|
Repetition: {
|
|
pre({ node }) {
|
|
repetitionCount++;
|
|
|
|
currentStarHeight++;
|
|
if (maxObservedStarHeight < currentStarHeight) {
|
|
maxObservedStarHeight = currentStarHeight;
|
|
}
|
|
},
|
|
|
|
post({ node }) {
|
|
currentStarHeight--;
|
|
}
|
|
}
|
|
});
|
|
|
|
return maxObservedStarHeight <= 1 && repetitionCount <= replimit;
|
|
};
|
|
|
|
analyzer$2 = {
|
|
"AnalyzerOptions": AnalyzerOptions,
|
|
"Analyzer": Analyzer,
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to translate `/./s` to `/[\0-\uFFFF]/`.
|
|
*/
|
|
|
|
var compatDotallSTransform = {
|
|
|
|
// Whether `u` flag present. In which case we transform to
|
|
// \u{10FFFF} instead of \uFFFF.
|
|
_hasUFlag: false,
|
|
|
|
// Only run this plugin if we have `s` flag.
|
|
shouldRun: function shouldRun(ast) {
|
|
var shouldRun = ast.flags.includes('s');
|
|
|
|
if (!shouldRun) {
|
|
return false;
|
|
}
|
|
|
|
// Strip the `s` flag.
|
|
ast.flags = ast.flags.replace('s', '');
|
|
|
|
// Whether we have also `u`.
|
|
this._hasUFlag = ast.flags.includes('u');
|
|
|
|
return true;
|
|
},
|
|
Char: function Char(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.kind !== 'meta' || node.value !== '.') {
|
|
return;
|
|
}
|
|
|
|
var toValue = '\\uFFFF';
|
|
var toSymbol = '\uFFFF';
|
|
|
|
if (this._hasUFlag) {
|
|
toValue = '\\u{10FFFF}';
|
|
toSymbol = '\uDBFF\uDFFF';
|
|
}
|
|
|
|
path.replace({
|
|
type: 'CharacterClass',
|
|
expressions: [{
|
|
type: 'ClassRange',
|
|
from: {
|
|
type: 'Char',
|
|
value: '\\0',
|
|
kind: 'decimal',
|
|
symbol: '\0'
|
|
},
|
|
to: {
|
|
type: 'Char',
|
|
value: toValue,
|
|
kind: 'unicode',
|
|
symbol: toSymbol
|
|
}
|
|
}]
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to translate `/(?<name>a)\k<name>/` to `/(a)\1/`.
|
|
*/
|
|
|
|
var compatNamedCapturingGroupsTransform = {
|
|
// To track the names of the groups, and return them
|
|
// in the transform result state.
|
|
//
|
|
// A map from name to number: {foo: 2, bar: 4}
|
|
_groupNames: {},
|
|
|
|
/**
|
|
* Initialises the trasnform.
|
|
*/
|
|
init: function init() {
|
|
this._groupNames = {};
|
|
},
|
|
|
|
|
|
/**
|
|
* Returns extra state, which eventually is returned to
|
|
*/
|
|
getExtra: function getExtra() {
|
|
return this._groupNames;
|
|
},
|
|
Group: function Group(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (!node.name) {
|
|
return;
|
|
}
|
|
|
|
// Record group name.
|
|
this._groupNames[node.name] = node.number;
|
|
|
|
delete node.name;
|
|
delete node.nameRaw;
|
|
},
|
|
Backreference: function Backreference(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.kind !== 'name') {
|
|
return;
|
|
}
|
|
|
|
node.kind = 'number';
|
|
node.reference = node.number;
|
|
delete node.referenceRaw;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove `x` flag `/foo/x` to `/foo/`.
|
|
*
|
|
* Note: other features of `x` flags (whitespace, comments) are
|
|
* already removed at parsing stage.
|
|
*/
|
|
|
|
var compatXFlagTransform = {
|
|
RegExp: function RegExp(_ref) {
|
|
var node = _ref.node;
|
|
|
|
if (node.flags.includes('x')) {
|
|
node.flags = node.flags.replace('x', '');
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var transforms$1 = {
|
|
// "dotAll" `s` flag
|
|
dotAll: compatDotallSTransform,
|
|
|
|
// Named capturing groups.
|
|
namedCapturingGroups: compatNamedCapturingGroupsTransform,
|
|
|
|
// `x` flag
|
|
xFlag: compatXFlagTransform
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* Helper `gen` function calls node type handler.
|
|
*/
|
|
|
|
function gen$1(node) {
|
|
return node ? generator$3[node.type](node) : '';
|
|
}
|
|
|
|
/**
|
|
* AST handler.
|
|
*/
|
|
var generator$3 = {
|
|
RegExp: function RegExp(node) {
|
|
return '/' + gen$1(node.body) + '/' + node.flags;
|
|
},
|
|
Alternative: function Alternative(node) {
|
|
return (node.expressions || []).map(gen$1).join('');
|
|
},
|
|
Disjunction: function Disjunction(node) {
|
|
return gen$1(node.left) + '|' + gen$1(node.right);
|
|
},
|
|
Group: function Group(node) {
|
|
var expression = gen$1(node.expression);
|
|
|
|
if (node.capturing) {
|
|
// A named group.
|
|
if (node.name) {
|
|
return '(?<' + (node.nameRaw || node.name) + '>' + expression + ')';
|
|
}
|
|
|
|
return '(' + expression + ')';
|
|
}
|
|
|
|
return '(?:' + expression + ')';
|
|
},
|
|
Backreference: function Backreference(node) {
|
|
switch (node.kind) {
|
|
case 'number':
|
|
return '\\' + node.reference;
|
|
case 'name':
|
|
return '\\k<' + (node.referenceRaw || node.reference) + '>';
|
|
default:
|
|
throw new TypeError('Unknown Backreference kind: ' + node.kind);
|
|
}
|
|
},
|
|
Assertion: function Assertion(node) {
|
|
switch (node.kind) {
|
|
case '^':
|
|
case '$':
|
|
case '\\b':
|
|
case '\\B':
|
|
return node.kind;
|
|
|
|
case 'Lookahead':
|
|
{
|
|
var assertion = gen$1(node.assertion);
|
|
|
|
if (node.negative) {
|
|
return '(?!' + assertion + ')';
|
|
}
|
|
|
|
return '(?=' + assertion + ')';
|
|
}
|
|
|
|
case 'Lookbehind':
|
|
{
|
|
var _assertion = gen$1(node.assertion);
|
|
|
|
if (node.negative) {
|
|
return '(?<!' + _assertion + ')';
|
|
}
|
|
|
|
return '(?<=' + _assertion + ')';
|
|
}
|
|
|
|
default:
|
|
throw new TypeError('Unknown Assertion kind: ' + node.kind);
|
|
}
|
|
},
|
|
CharacterClass: function CharacterClass(node) {
|
|
var expressions = node.expressions.map(gen$1).join('');
|
|
|
|
if (node.negative) {
|
|
return '[^' + expressions + ']';
|
|
}
|
|
|
|
return '[' + expressions + ']';
|
|
},
|
|
ClassRange: function ClassRange(node) {
|
|
return gen$1(node.from) + '-' + gen$1(node.to);
|
|
},
|
|
Repetition: function Repetition(node) {
|
|
return '' + gen$1(node.expression) + gen$1(node.quantifier);
|
|
},
|
|
Quantifier: function Quantifier(node) {
|
|
var quantifier = void 0;
|
|
var greedy = node.greedy ? '' : '?';
|
|
|
|
switch (node.kind) {
|
|
case '+':
|
|
case '?':
|
|
case '*':
|
|
quantifier = node.kind;
|
|
break;
|
|
case 'Range':
|
|
// Exact: {1}
|
|
if (node.from === node.to) {
|
|
quantifier = '{' + node.from + '}';
|
|
}
|
|
// Open: {1,}
|
|
else if (!node.to) {
|
|
quantifier = '{' + node.from + ',}';
|
|
}
|
|
// Closed: {1,3}
|
|
else {
|
|
quantifier = '{' + node.from + ',' + node.to + '}';
|
|
}
|
|
break;
|
|
default:
|
|
throw new TypeError('Unknown Quantifier kind: ' + node.kind);
|
|
}
|
|
|
|
return '' + quantifier + greedy;
|
|
},
|
|
Char: function Char(node) {
|
|
var value = node.value;
|
|
|
|
switch (node.kind) {
|
|
case 'simple':
|
|
{
|
|
if (node.escaped) {
|
|
return '\\' + value;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
case 'hex':
|
|
case 'unicode':
|
|
case 'oct':
|
|
case 'decimal':
|
|
case 'control':
|
|
case 'meta':
|
|
return value;
|
|
|
|
default:
|
|
throw new TypeError('Unknown Char kind: ' + node.kind);
|
|
}
|
|
},
|
|
UnicodeProperty: function UnicodeProperty(node) {
|
|
var escapeChar = node.negative ? 'P' : 'p';
|
|
var namePart = void 0;
|
|
|
|
if (!node.shorthand && !node.binary) {
|
|
namePart = node.name + '=';
|
|
} else {
|
|
namePart = '';
|
|
}
|
|
|
|
return '\\' + escapeChar + '{' + namePart + node.value + '}';
|
|
}
|
|
};
|
|
|
|
var generator_1 = {
|
|
/**
|
|
* Generates a regexp string from an AST.
|
|
*
|
|
* @param Object ast - an AST node
|
|
*/
|
|
generate: gen$1
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var NON_BINARY_PROP_NAMES_TO_ALIASES = {
|
|
General_Category: 'gc',
|
|
Script: 'sc',
|
|
Script_Extensions: 'scx'
|
|
};
|
|
|
|
var NON_BINARY_ALIASES_TO_PROP_NAMES = inverseMap(NON_BINARY_PROP_NAMES_TO_ALIASES);
|
|
|
|
var BINARY_PROP_NAMES_TO_ALIASES = {
|
|
ASCII: 'ASCII',
|
|
ASCII_Hex_Digit: 'AHex',
|
|
Alphabetic: 'Alpha',
|
|
Any: 'Any',
|
|
Assigned: 'Assigned',
|
|
Bidi_Control: 'Bidi_C',
|
|
Bidi_Mirrored: 'Bidi_M',
|
|
Case_Ignorable: 'CI',
|
|
Cased: 'Cased',
|
|
Changes_When_Casefolded: 'CWCF',
|
|
Changes_When_Casemapped: 'CWCM',
|
|
Changes_When_Lowercased: 'CWL',
|
|
Changes_When_NFKC_Casefolded: 'CWKCF',
|
|
Changes_When_Titlecased: 'CWT',
|
|
Changes_When_Uppercased: 'CWU',
|
|
Dash: 'Dash',
|
|
Default_Ignorable_Code_Point: 'DI',
|
|
Deprecated: 'Dep',
|
|
Diacritic: 'Dia',
|
|
Emoji: 'Emoji',
|
|
Emoji_Component: 'Emoji_Component',
|
|
Emoji_Modifier: 'Emoji_Modifier',
|
|
Emoji_Modifier_Base: 'Emoji_Modifier_Base',
|
|
Emoji_Presentation: 'Emoji_Presentation',
|
|
Extended_Pictographic: 'Extended_Pictographic',
|
|
Extender: 'Ext',
|
|
Grapheme_Base: 'Gr_Base',
|
|
Grapheme_Extend: 'Gr_Ext',
|
|
Hex_Digit: 'Hex',
|
|
IDS_Binary_Operator: 'IDSB',
|
|
IDS_Trinary_Operator: 'IDST',
|
|
ID_Continue: 'IDC',
|
|
ID_Start: 'IDS',
|
|
Ideographic: 'Ideo',
|
|
Join_Control: 'Join_C',
|
|
Logical_Order_Exception: 'LOE',
|
|
Lowercase: 'Lower',
|
|
Math: 'Math',
|
|
Noncharacter_Code_Point: 'NChar',
|
|
Pattern_Syntax: 'Pat_Syn',
|
|
Pattern_White_Space: 'Pat_WS',
|
|
Quotation_Mark: 'QMark',
|
|
Radical: 'Radical',
|
|
Regional_Indicator: 'RI',
|
|
Sentence_Terminal: 'STerm',
|
|
Soft_Dotted: 'SD',
|
|
Terminal_Punctuation: 'Term',
|
|
Unified_Ideograph: 'UIdeo',
|
|
Uppercase: 'Upper',
|
|
Variation_Selector: 'VS',
|
|
White_Space: 'space',
|
|
XID_Continue: 'XIDC',
|
|
XID_Start: 'XIDS'
|
|
};
|
|
|
|
var BINARY_ALIASES_TO_PROP_NAMES = inverseMap(BINARY_PROP_NAMES_TO_ALIASES);
|
|
|
|
var GENERAL_CATEGORY_VALUE_TO_ALIASES = {
|
|
Cased_Letter: 'LC',
|
|
Close_Punctuation: 'Pe',
|
|
Connector_Punctuation: 'Pc',
|
|
Control: ['Cc', 'cntrl'],
|
|
Currency_Symbol: 'Sc',
|
|
Dash_Punctuation: 'Pd',
|
|
Decimal_Number: ['Nd', 'digit'],
|
|
Enclosing_Mark: 'Me',
|
|
Final_Punctuation: 'Pf',
|
|
Format: 'Cf',
|
|
Initial_Punctuation: 'Pi',
|
|
Letter: 'L',
|
|
Letter_Number: 'Nl',
|
|
Line_Separator: 'Zl',
|
|
Lowercase_Letter: 'Ll',
|
|
Mark: ['M', 'Combining_Mark'],
|
|
Math_Symbol: 'Sm',
|
|
Modifier_Letter: 'Lm',
|
|
Modifier_Symbol: 'Sk',
|
|
Nonspacing_Mark: 'Mn',
|
|
Number: 'N',
|
|
Open_Punctuation: 'Ps',
|
|
Other: 'C',
|
|
Other_Letter: 'Lo',
|
|
Other_Number: 'No',
|
|
Other_Punctuation: 'Po',
|
|
Other_Symbol: 'So',
|
|
Paragraph_Separator: 'Zp',
|
|
Private_Use: 'Co',
|
|
Punctuation: ['P', 'punct'],
|
|
Separator: 'Z',
|
|
Space_Separator: 'Zs',
|
|
Spacing_Mark: 'Mc',
|
|
Surrogate: 'Cs',
|
|
Symbol: 'S',
|
|
Titlecase_Letter: 'Lt',
|
|
Unassigned: 'Cn',
|
|
Uppercase_Letter: 'Lu'
|
|
};
|
|
|
|
var GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES = inverseMap(GENERAL_CATEGORY_VALUE_TO_ALIASES);
|
|
|
|
var SCRIPT_VALUE_TO_ALIASES = {
|
|
Adlam: 'Adlm',
|
|
Ahom: 'Ahom',
|
|
Anatolian_Hieroglyphs: 'Hluw',
|
|
Arabic: 'Arab',
|
|
Armenian: 'Armn',
|
|
Avestan: 'Avst',
|
|
Balinese: 'Bali',
|
|
Bamum: 'Bamu',
|
|
Bassa_Vah: 'Bass',
|
|
Batak: 'Batk',
|
|
Bengali: 'Beng',
|
|
Bhaiksuki: 'Bhks',
|
|
Bopomofo: 'Bopo',
|
|
Brahmi: 'Brah',
|
|
Braille: 'Brai',
|
|
Buginese: 'Bugi',
|
|
Buhid: 'Buhd',
|
|
Canadian_Aboriginal: 'Cans',
|
|
Carian: 'Cari',
|
|
Caucasian_Albanian: 'Aghb',
|
|
Chakma: 'Cakm',
|
|
Cham: 'Cham',
|
|
Cherokee: 'Cher',
|
|
Common: 'Zyyy',
|
|
Coptic: ['Copt', 'Qaac'],
|
|
Cuneiform: 'Xsux',
|
|
Cypriot: 'Cprt',
|
|
Cyrillic: 'Cyrl',
|
|
Deseret: 'Dsrt',
|
|
Devanagari: 'Deva',
|
|
Dogra: 'Dogr',
|
|
Duployan: 'Dupl',
|
|
Egyptian_Hieroglyphs: 'Egyp',
|
|
Elbasan: 'Elba',
|
|
Ethiopic: 'Ethi',
|
|
Georgian: 'Geor',
|
|
Glagolitic: 'Glag',
|
|
Gothic: 'Goth',
|
|
Grantha: 'Gran',
|
|
Greek: 'Grek',
|
|
Gujarati: 'Gujr',
|
|
Gunjala_Gondi: 'Gong',
|
|
Gurmukhi: 'Guru',
|
|
Han: 'Hani',
|
|
Hangul: 'Hang',
|
|
Hanifi_Rohingya: 'Rohg',
|
|
Hanunoo: 'Hano',
|
|
Hatran: 'Hatr',
|
|
Hebrew: 'Hebr',
|
|
Hiragana: 'Hira',
|
|
Imperial_Aramaic: 'Armi',
|
|
Inherited: ['Zinh', 'Qaai'],
|
|
Inscriptional_Pahlavi: 'Phli',
|
|
Inscriptional_Parthian: 'Prti',
|
|
Javanese: 'Java',
|
|
Kaithi: 'Kthi',
|
|
Kannada: 'Knda',
|
|
Katakana: 'Kana',
|
|
Kayah_Li: 'Kali',
|
|
Kharoshthi: 'Khar',
|
|
Khmer: 'Khmr',
|
|
Khojki: 'Khoj',
|
|
Khudawadi: 'Sind',
|
|
Lao: 'Laoo',
|
|
Latin: 'Latn',
|
|
Lepcha: 'Lepc',
|
|
Limbu: 'Limb',
|
|
Linear_A: 'Lina',
|
|
Linear_B: 'Linb',
|
|
Lisu: 'Lisu',
|
|
Lycian: 'Lyci',
|
|
Lydian: 'Lydi',
|
|
Mahajani: 'Mahj',
|
|
Makasar: 'Maka',
|
|
Malayalam: 'Mlym',
|
|
Mandaic: 'Mand',
|
|
Manichaean: 'Mani',
|
|
Marchen: 'Marc',
|
|
Medefaidrin: 'Medf',
|
|
Masaram_Gondi: 'Gonm',
|
|
Meetei_Mayek: 'Mtei',
|
|
Mende_Kikakui: 'Mend',
|
|
Meroitic_Cursive: 'Merc',
|
|
Meroitic_Hieroglyphs: 'Mero',
|
|
Miao: 'Plrd',
|
|
Modi: 'Modi',
|
|
Mongolian: 'Mong',
|
|
Mro: 'Mroo',
|
|
Multani: 'Mult',
|
|
Myanmar: 'Mymr',
|
|
Nabataean: 'Nbat',
|
|
New_Tai_Lue: 'Talu',
|
|
Newa: 'Newa',
|
|
Nko: 'Nkoo',
|
|
Nushu: 'Nshu',
|
|
Ogham: 'Ogam',
|
|
Ol_Chiki: 'Olck',
|
|
Old_Hungarian: 'Hung',
|
|
Old_Italic: 'Ital',
|
|
Old_North_Arabian: 'Narb',
|
|
Old_Permic: 'Perm',
|
|
Old_Persian: 'Xpeo',
|
|
Old_Sogdian: 'Sogo',
|
|
Old_South_Arabian: 'Sarb',
|
|
Old_Turkic: 'Orkh',
|
|
Oriya: 'Orya',
|
|
Osage: 'Osge',
|
|
Osmanya: 'Osma',
|
|
Pahawh_Hmong: 'Hmng',
|
|
Palmyrene: 'Palm',
|
|
Pau_Cin_Hau: 'Pauc',
|
|
Phags_Pa: 'Phag',
|
|
Phoenician: 'Phnx',
|
|
Psalter_Pahlavi: 'Phlp',
|
|
Rejang: 'Rjng',
|
|
Runic: 'Runr',
|
|
Samaritan: 'Samr',
|
|
Saurashtra: 'Saur',
|
|
Sharada: 'Shrd',
|
|
Shavian: 'Shaw',
|
|
Siddham: 'Sidd',
|
|
SignWriting: 'Sgnw',
|
|
Sinhala: 'Sinh',
|
|
Sogdian: 'Sogd',
|
|
Sora_Sompeng: 'Sora',
|
|
Soyombo: 'Soyo',
|
|
Sundanese: 'Sund',
|
|
Syloti_Nagri: 'Sylo',
|
|
Syriac: 'Syrc',
|
|
Tagalog: 'Tglg',
|
|
Tagbanwa: 'Tagb',
|
|
Tai_Le: 'Tale',
|
|
Tai_Tham: 'Lana',
|
|
Tai_Viet: 'Tavt',
|
|
Takri: 'Takr',
|
|
Tamil: 'Taml',
|
|
Tangut: 'Tang',
|
|
Telugu: 'Telu',
|
|
Thaana: 'Thaa',
|
|
Thai: 'Thai',
|
|
Tibetan: 'Tibt',
|
|
Tifinagh: 'Tfng',
|
|
Tirhuta: 'Tirh',
|
|
Ugaritic: 'Ugar',
|
|
Vai: 'Vaii',
|
|
Warang_Citi: 'Wara',
|
|
Yi: 'Yiii',
|
|
Zanabazar_Square: 'Zanb'
|
|
};
|
|
|
|
var SCRIPT_VALUE_ALIASES_TO_VALUE = inverseMap(SCRIPT_VALUE_TO_ALIASES);
|
|
|
|
function inverseMap(data) {
|
|
var inverse = {};
|
|
|
|
for (var name in data) {
|
|
if (!data.hasOwnProperty(name)) {
|
|
continue;
|
|
}
|
|
var value = data[name];
|
|
if (Array.isArray(value)) {
|
|
for (var i = 0; i < value.length; i++) {
|
|
inverse[value[i]] = name;
|
|
}
|
|
} else {
|
|
inverse[value] = name;
|
|
}
|
|
}
|
|
|
|
return inverse;
|
|
}
|
|
|
|
function isValidName(name) {
|
|
return NON_BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function isValidValue(name, value) {
|
|
if (isGeneralCategoryName(name)) {
|
|
return isGeneralCategoryValue(value);
|
|
}
|
|
|
|
if (isScriptCategoryName(name)) {
|
|
return isScriptCategoryValue(value);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function isAlias(name) {
|
|
return NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function isGeneralCategoryName(name) {
|
|
return name === 'General_Category' || name == 'gc';
|
|
}
|
|
|
|
function isScriptCategoryName(name) {
|
|
return name === 'Script' || name === 'Script_Extensions' || name === 'sc' || name === 'scx';
|
|
}
|
|
|
|
function isGeneralCategoryValue(value) {
|
|
return GENERAL_CATEGORY_VALUE_TO_ALIASES.hasOwnProperty(value) || GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value);
|
|
}
|
|
|
|
function isScriptCategoryValue(value) {
|
|
return SCRIPT_VALUE_TO_ALIASES.hasOwnProperty(value) || SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value);
|
|
}
|
|
|
|
function isBinaryPropertyName(name) {
|
|
return BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function getCanonicalName(name) {
|
|
if (NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {
|
|
return NON_BINARY_ALIASES_TO_PROP_NAMES[name];
|
|
}
|
|
|
|
if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {
|
|
return BINARY_ALIASES_TO_PROP_NAMES[name];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function getCanonicalValue(value) {
|
|
if (GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value)) {
|
|
return GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES[value];
|
|
}
|
|
|
|
if (SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value)) {
|
|
return SCRIPT_VALUE_ALIASES_TO_VALUE[value];
|
|
}
|
|
|
|
if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(value)) {
|
|
return BINARY_ALIASES_TO_PROP_NAMES[value];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
var parserUnicodeProperties = {
|
|
isAlias: isAlias,
|
|
isValidName: isValidName,
|
|
isValidValue: isValidValue,
|
|
isGeneralCategoryValue: isGeneralCategoryValue,
|
|
isScriptCategoryValue: isScriptCategoryValue,
|
|
isBinaryPropertyName: isBinaryPropertyName,
|
|
getCanonicalName: getCanonicalName,
|
|
getCanonicalValue: getCanonicalValue,
|
|
|
|
NON_BINARY_PROP_NAMES_TO_ALIASES: NON_BINARY_PROP_NAMES_TO_ALIASES,
|
|
NON_BINARY_ALIASES_TO_PROP_NAMES: NON_BINARY_ALIASES_TO_PROP_NAMES,
|
|
|
|
BINARY_PROP_NAMES_TO_ALIASES: BINARY_PROP_NAMES_TO_ALIASES,
|
|
BINARY_ALIASES_TO_PROP_NAMES: BINARY_ALIASES_TO_PROP_NAMES,
|
|
|
|
GENERAL_CATEGORY_VALUE_TO_ALIASES: GENERAL_CATEGORY_VALUE_TO_ALIASES,
|
|
GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES: GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES,
|
|
|
|
SCRIPT_VALUE_TO_ALIASES: SCRIPT_VALUE_TO_ALIASES,
|
|
SCRIPT_VALUE_ALIASES_TO_VALUE: SCRIPT_VALUE_ALIASES_TO_VALUE
|
|
};
|
|
|
|
/**
|
|
* LR parser generated by the Syntax tool.
|
|
*
|
|
* https://www.npmjs.com/package/syntax-cli
|
|
*
|
|
* npm install -g syntax-cli
|
|
*
|
|
* syntax-cli --help
|
|
*
|
|
* To regenerate run:
|
|
*
|
|
* syntax-cli \
|
|
* --grammar ~/path-to-grammar-file \
|
|
* --mode <parsing-mode> \
|
|
* --output ~/path-to-output-parser-file.js
|
|
*/
|
|
|
|
/**
|
|
* Matched token text.
|
|
*/
|
|
|
|
var _slicedToArray$2 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
|
|
|
function _toConsumableArray$8(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var yytext = void 0;
|
|
|
|
/**
|
|
* Storage object.
|
|
*/
|
|
var yy = {};
|
|
|
|
/**
|
|
* Result of semantic action.
|
|
*/
|
|
var __ = void 0;
|
|
|
|
/**
|
|
* Result location object.
|
|
*/
|
|
var __loc = void 0;
|
|
|
|
function yyloc(start, end) {
|
|
if (!yy.options.captureLocations) {
|
|
return null;
|
|
}
|
|
|
|
// Epsilon doesn't produce location.
|
|
if (!start || !end) {
|
|
return start || end;
|
|
}
|
|
|
|
return {
|
|
startOffset: start.startOffset,
|
|
endOffset: end.endOffset,
|
|
startLine: start.startLine,
|
|
endLine: end.endLine,
|
|
startColumn: start.startColumn,
|
|
endColumn: end.endColumn
|
|
};
|
|
}
|
|
|
|
var EOF = '$';
|
|
|
|
/**
|
|
* List of productions (generated by Syntax tool).
|
|
*/
|
|
var productions = [[-1, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [0, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
|
|
__loc = yyloc(_1loc, _4loc);
|
|
__ = Node({
|
|
type: 'RegExp',
|
|
body: _2,
|
|
flags: checkFlags(_4)
|
|
}, loc(_1loc, _4loc || _3loc));
|
|
}], [1, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [1, 0, function () {
|
|
__loc = null;__ = '';
|
|
}], [2, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [2, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);__ = _1 + _2;
|
|
}], [3, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [4, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [4, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
// Location for empty disjunction: /|/
|
|
var _loc = null;
|
|
|
|
if (_2loc) {
|
|
_loc = loc(_1loc || _2loc, _3loc || _2loc);
|
|
}
|
|
__ = Node({
|
|
type: 'Disjunction',
|
|
left: _1,
|
|
right: _3
|
|
}, _loc);
|
|
}], [5, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
if (_1.length === 0) {
|
|
__ = null;
|
|
return;
|
|
}
|
|
|
|
if (_1.length === 1) {
|
|
__ = Node(_1[0], __loc);
|
|
} else {
|
|
__ = Node({
|
|
type: 'Alternative',
|
|
expressions: _1
|
|
}, __loc);
|
|
}
|
|
}], [6, 0, function () {
|
|
__loc = null;__ = [];
|
|
}], [6, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);__ = _1.concat(_2);
|
|
}], [7, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Node(Object.assign({ type: 'Assertion' }, _1), __loc);
|
|
}], [7, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);
|
|
__ = _1;
|
|
|
|
if (_2) {
|
|
__ = Node({
|
|
type: 'Repetition',
|
|
expression: _1,
|
|
quantifier: _2
|
|
}, __loc);
|
|
}
|
|
}], [8, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = { kind: '^' };
|
|
}], [8, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = { kind: '$' };
|
|
}], [8, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = { kind: '\\b' };
|
|
}], [8, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = { kind: '\\B' };
|
|
}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = {
|
|
kind: 'Lookahead',
|
|
assertion: _2
|
|
};
|
|
}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = {
|
|
kind: 'Lookahead',
|
|
negative: true,
|
|
assertion: _2
|
|
};
|
|
}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = {
|
|
kind: 'Lookbehind',
|
|
assertion: _2
|
|
};
|
|
}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = {
|
|
kind: 'Lookbehind',
|
|
negative: true,
|
|
assertion: _2
|
|
};
|
|
}], [9, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [9, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [9, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1.slice(1), 'simple', __loc);__.escaped = true;
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);__.isSurrogatePair = true;
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = UnicodeProperty(_1, __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'control', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'hex', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'oct', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = GroupRefOrDecChar(_1, __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = NamedGroupRefOrChars(_1, _1loc);
|
|
}], [11, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [11, 0], [12, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [12, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);
|
|
_1.greedy = false;
|
|
__ = _1;
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: _1,
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: _1,
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: _1,
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
var range = getRange(_1);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: 'Range',
|
|
from: range[0],
|
|
to: range[0],
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: 'Range',
|
|
from: getRange(_1)[0],
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
var range = getRange(_1);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: 'Range',
|
|
from: range[0],
|
|
to: range[1],
|
|
greedy: true
|
|
}, __loc);
|
|
}], [14, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [14, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
var nameRaw = String(_1);
|
|
var name = decodeUnicodeGroupName(nameRaw);
|
|
if (!yy.options.allowGroupNameDuplicates && namedGroups.hasOwnProperty(name)) {
|
|
throw new SyntaxError('Duplicate of the named group "' + name + '".');
|
|
}
|
|
|
|
namedGroups[name] = _1.groupNumber;
|
|
|
|
__ = Node({
|
|
type: 'Group',
|
|
capturing: true,
|
|
name: name,
|
|
nameRaw: nameRaw,
|
|
number: _1.groupNumber,
|
|
expression: _2
|
|
}, __loc);
|
|
}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = Node({
|
|
type: 'Group',
|
|
capturing: true,
|
|
number: _1.groupNumber,
|
|
expression: _2
|
|
}, __loc);
|
|
}], [16, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = Node({
|
|
type: 'Group',
|
|
capturing: false,
|
|
expression: _2
|
|
}, __loc);
|
|
}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = Node({
|
|
type: 'CharacterClass',
|
|
negative: true,
|
|
expressions: _2
|
|
}, __loc);
|
|
}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = Node({
|
|
type: 'CharacterClass',
|
|
expressions: _2
|
|
}, __loc);
|
|
}], [18, 0, function () {
|
|
__loc = null;__ = [];
|
|
}], [18, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [19, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = [_1];
|
|
}], [19, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);
|
|
}], [19, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
|
|
__loc = yyloc(_1loc, _4loc);
|
|
checkClassRange(_1, _3);
|
|
|
|
__ = [Node({
|
|
type: 'ClassRange',
|
|
from: _1,
|
|
to: _3
|
|
}, loc(_1loc, _3loc))];
|
|
|
|
if (_4) {
|
|
__ = __.concat(_4);
|
|
}
|
|
}], [20, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [20, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);
|
|
}], [20, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
|
|
__loc = yyloc(_1loc, _4loc);
|
|
checkClassRange(_1, _3);
|
|
|
|
__ = [Node({
|
|
type: 'ClassRange',
|
|
from: _1,
|
|
to: _3
|
|
}, loc(_1loc, _3loc))];
|
|
|
|
if (_4) {
|
|
__ = __.concat(_4);
|
|
}
|
|
}], [21, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);
|
|
}], [21, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [22, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [22, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
|
|
}]];
|
|
|
|
/**
|
|
* Encoded tokens map.
|
|
*/
|
|
var tokens = { "SLASH": "23", "CHAR": "24", "BAR": "25", "BOS": "26", "EOS": "27", "ESC_b": "28", "ESC_B": "29", "POS_LA_ASSERT": "30", "R_PAREN": "31", "NEG_LA_ASSERT": "32", "POS_LB_ASSERT": "33", "NEG_LB_ASSERT": "34", "ESC_CHAR": "35", "U_CODE_SURROGATE": "36", "U_CODE": "37", "U_PROP_VALUE_EXP": "38", "CTRL_CH": "39", "HEX_CODE": "40", "OCT_CODE": "41", "DEC_CODE": "42", "META_CHAR": "43", "ANY": "44", "NAMED_GROUP_REF": "45", "Q_MARK": "46", "STAR": "47", "PLUS": "48", "RANGE_EXACT": "49", "RANGE_OPEN": "50", "RANGE_CLOSED": "51", "NAMED_CAPTURE_GROUP": "52", "L_PAREN": "53", "NON_CAPTURE_GROUP": "54", "NEG_CLASS": "55", "R_BRACKET": "56", "L_BRACKET": "57", "DASH": "58", "$": "59" };
|
|
|
|
/**
|
|
* Parsing table (generated by Syntax tool).
|
|
*/
|
|
var table = [{ "0": 1, "23": "s2" }, { "59": "acc" }, { "3": 3, "4": 4, "5": 5, "6": 6, "23": "r10", "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "s7" }, { "23": "r6", "25": "s12" }, { "23": "r7", "25": "r7", "31": "r7" }, { "7": 14, "8": 15, "9": 16, "10": 25, "14": 27, "15": 42, "16": 43, "17": 26, "23": "r9", "24": "s28", "25": "r9", "26": "s17", "27": "s18", "28": "s19", "29": "s20", "30": "s21", "31": "r9", "32": "s22", "33": "s23", "34": "s24", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "52": "s44", "53": "s45", "54": "s46", "55": "s40", "57": "s41" }, { "1": 8, "2": 9, "24": "s10", "59": "r3" }, { "59": "r1" }, { "24": "s11", "59": "r2" }, { "24": "r4", "59": "r4" }, { "24": "r5", "59": "r5" }, { "5": 13, "6": 6, "23": "r10", "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r8", "25": "r8", "31": "r8" }, { "23": "r11", "24": "r11", "25": "r11", "26": "r11", "27": "r11", "28": "r11", "29": "r11", "30": "r11", "31": "r11", "32": "r11", "33": "r11", "34": "r11", "35": "r11", "36": "r11", "37": "r11", "38": "r11", "39": "r11", "40": "r11", "41": "r11", "42": "r11", "43": "r11", "44": "r11", "45": "r11", "52": "r11", "53": "r11", "54": "r11", "55": "r11", "57": "r11" }, { "23": "r12", "24": "r12", "25": "r12", "26": "r12", "27": "r12", "28": "r12", "29": "r12", "30": "r12", "31": "r12", "32": "r12", "33": "r12", "34": "r12", "35": "r12", "36": "r12", "37": "r12", "38": "r12", "39": "r12", "40": "r12", "41": "r12", "42": "r12", "43": "r12", "44": "r12", "45": "r12", "52": "r12", "53": "r12", "54": "r12", "55": "r12", "57": "r12" }, { "11": 47, "12": 48, "13": 49, "23": "r38", "24": "r38", "25": "r38", "26": "r38", "27": "r38", "28": "r38", "29": "r38", "30": "r38", "31": "r38", "32": "r38", "33": "r38", "34": "r38", "35": "r38", "36": "r38", "37": "r38", "38": "r38", "39": "r38", "40": "r38", "41": "r38", "42": "r38", "43": "r38", "44": "r38", "45": "r38", "46": "s52", "47": "s50", "48": "s51", "49": "s53", "50": "s54", "51": "s55", "52": "r38", "53": "r38", "54": "r38", "55": "r38", "57": "r38" }, { "23": "r14", "24": "r14", "25": "r14", "26": "r14", "27": "r14", "28": "r14", "29": "r14", "30": "r14", "31": "r14", "32": "r14", "33": "r14", "34": "r14", "35": "r14", "36": "r14", "37": "r14", "38": "r14", "39": "r14", "40": "r14", "41": "r14", "42": "r14", "43": "r14", "44": "r14", "45": "r14", "52": "r14", "53": "r14", "54": "r14", "55": "r14", "57": "r14" }, { "23": "r15", "24": "r15", "25": "r15", "26": "r15", "27": "r15", "28": "r15", "29": "r15", "30": "r15", "31": "r15", "32": "r15", "33": "r15", "34": "r15", "35": "r15", "36": "r15", "37": "r15", "38": "r15", "39": "r15", "40": "r15", "41": "r15", "42": "r15", "43": "r15", "44": "r15", "45": "r15", "52": "r15", "53": "r15", "54": "r15", "55": "r15", "57": "r15" }, { "23": "r16", "24": "r16", "25": "r16", "26": "r16", "27": "r16", "28": "r16", "29": "r16", "30": "r16", "31": "r16", "32": "r16", "33": "r16", "34": "r16", "35": "r16", "36": "r16", "37": "r16", "38": "r16", "39": "r16", "40": "r16", "41": "r16", "42": "r16", "43": "r16", "44": "r16", "45": "r16", "52": "r16", "53": "r16", "54": "r16", "55": "r16", "57": "r16" }, { "23": "r17", "24": "r17", "25": "r17", "26": "r17", "27": "r17", "28": "r17", "29": "r17", "30": "r17", "31": "r17", "32": "r17", "33": "r17", "34": "r17", "35": "r17", "36": "r17", "37": "r17", "38": "r17", "39": "r17", "40": "r17", "41": "r17", "42": "r17", "43": "r17", "44": "r17", "45": "r17", "52": "r17", "53": "r17", "54": "r17", "55": "r17", "57": "r17" }, { "4": 57, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 59, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 61, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 63, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r22", "24": "r22", "25": "r22", "26": "r22", "27": "r22", "28": "r22", "29": "r22", "30": "r22", "31": "r22", "32": "r22", "33": "r22", "34": "r22", "35": "r22", "36": "r22", "37": "r22", "38": "r22", "39": "r22", "40": "r22", "41": "r22", "42": "r22", "43": "r22", "44": "r22", "45": "r22", "46": "r22", "47": "r22", "48": "r22", "49": "r22", "50": "r22", "51": "r22", "52": "r22", "53": "r22", "54": "r22", "55": "r22", "57": "r22" }, { "23": "r23", "24": "r23", "25": "r23", "26": "r23", "27": "r23", "28": "r23", "29": "r23", "30": "r23", "31": "r23", "32": "r23", "33": "r23", "34": "r23", "35": "r23", "36": "r23", "37": "r23", "38": "r23", "39": "r23", "40": "r23", "41": "r23", "42": "r23", "43": "r23", "44": "r23", "45": "r23", "46": "r23", "47": "r23", "48": "r23", "49": "r23", "50": "r23", "51": "r23", "52": "r23", "53": "r23", "54": "r23", "55": "r23", "57": "r23" }, { "23": "r24", "24": "r24", "25": "r24", "26": "r24", "27": "r24", "28": "r24", "29": "r24", "30": "r24", "31": "r24", "32": "r24", "33": "r24", "34": "r24", "35": "r24", "36": "r24", "37": "r24", "38": "r24", "39": "r24", "40": "r24", "41": "r24", "42": "r24", "43": "r24", "44": "r24", "45": "r24", "46": "r24", "47": "r24", "48": "r24", "49": "r24", "50": "r24", "51": "r24", "52": "r24", "53": "r24", "54": "r24", "55": "r24", "57": "r24" }, { "23": "r25", "24": "r25", "25": "r25", "26": "r25", "27": "r25", "28": "r25", "29": "r25", "30": "r25", "31": "r25", "32": "r25", "33": "r25", "34": "r25", "35": "r25", "36": "r25", "37": "r25", "38": "r25", "39": "r25", "40": "r25", "41": "r25", "42": "r25", "43": "r25", "44": "r25", "45": "r25", "46": "r25", "47": "r25", "48": "r25", "49": "r25", "50": "r25", "51": "r25", "52": "r25", "53": "r25", "54": "r25", "55": "r25", "56": "r25", "57": "r25", "58": "r25" }, { "23": "r26", "24": "r26", "25": "r26", "26": "r26", "27": "r26", "28": "r26", "29": "r26", "30": "r26", "31": "r26", "32": "r26", "33": "r26", "34": "r26", "35": "r26", "36": "r26", "37": "r26", "38": "r26", "39": "r26", "40": "r26", "41": "r26", "42": "r26", "43": "r26", "44": "r26", "45": "r26", "46": "r26", "47": "r26", "48": "r26", "49": "r26", "50": "r26", "51": "r26", "52": "r26", "53": "r26", "54": "r26", "55": "r26", "56": "r26", "57": "r26", "58": "r26" }, { "23": "r27", "24": "r27", "25": "r27", "26": "r27", "27": "r27", "28": "r27", "29": "r27", "30": "r27", "31": "r27", "32": "r27", "33": "r27", "34": "r27", "35": "r27", "36": "r27", "37": "r27", "38": "r27", "39": "r27", "40": "r27", "41": "r27", "42": "r27", "43": "r27", "44": "r27", "45": "r27", "46": "r27", "47": "r27", "48": "r27", "49": "r27", "50": "r27", "51": "r27", "52": "r27", "53": "r27", "54": "r27", "55": "r27", "56": "r27", "57": "r27", "58": "r27" }, { "23": "r28", "24": "r28", "25": "r28", "26": "r28", "27": "r28", "28": "r28", "29": "r28", "30": "r28", "31": "r28", "32": "r28", "33": "r28", "34": "r28", "35": "r28", "36": "r28", "37": "r28", "38": "r28", "39": "r28", "40": "r28", "41": "r28", "42": "r28", "43": "r28", "44": "r28", "45": "r28", "46": "r28", "47": "r28", "48": "r28", "49": "r28", "50": "r28", "51": "r28", "52": "r28", "53": "r28", "54": "r28", "55": "r28", "56": "r28", "57": "r28", "58": "r28" }, { "23": "r29", "24": "r29", "25": "r29", "26": "r29", "27": "r29", "28": "r29", "29": "r29", "30": "r29", "31": "r29", "32": "r29", "33": "r29", "34": "r29", "35": "r29", "36": "r29", "37": "r29", "38": "r29", "39": "r29", "40": "r29", "41": "r29", "42": "r29", "43": "r29", "44": "r29", "45": "r29", "46": "r29", "47": "r29", "48": "r29", "49": "r29", "50": "r29", "51": "r29", "52": "r29", "53": "r29", "54": "r29", "55": "r29", "56": "r29", "57": "r29", "58": "r29" }, { "23": "r30", "24": "r30", "25": "r30", "26": "r30", "27": "r30", "28": "r30", "29": "r30", "30": "r30", "31": "r30", "32": "r30", "33": "r30", "34": "r30", "35": "r30", "36": "r30", "37": "r30", "38": "r30", "39": "r30", "40": "r30", "41": "r30", "42": "r30", "43": "r30", "44": "r30", "45": "r30", "46": "r30", "47": "r30", "48": "r30", "49": "r30", "50": "r30", "51": "r30", "52": "r30", "53": "r30", "54": "r30", "55": "r30", "56": "r30", "57": "r30", "58": "r30" }, { "23": "r31", "24": "r31", "25": "r31", "26": "r31", "27": "r31", "28": "r31", "29": "r31", "30": "r31", "31": "r31", "32": "r31", "33": "r31", "34": "r31", "35": "r31", "36": "r31", "37": "r31", "38": "r31", "39": "r31", "40": "r31", "41": "r31", "42": "r31", "43": "r31", "44": "r31", "45": "r31", "46": "r31", "47": "r31", "48": "r31", "49": "r31", "50": "r31", "51": "r31", "52": "r31", "53": "r31", "54": "r31", "55": "r31", "56": "r31", "57": "r31", "58": "r31" }, { "23": "r32", "24": "r32", "25": "r32", "26": "r32", "27": "r32", "28": "r32", "29": "r32", "30": "r32", "31": "r32", "32": "r32", "33": "r32", "34": "r32", "35": "r32", "36": "r32", "37": "r32", "38": "r32", "39": "r32", "40": "r32", "41": "r32", "42": "r32", "43": "r32", "44": "r32", "45": "r32", "46": "r32", "47": "r32", "48": "r32", "49": "r32", "50": "r32", "51": "r32", "52": "r32", "53": "r32", "54": "r32", "55": "r32", "56": "r32", "57": "r32", "58": "r32" }, { "23": "r33", "24": "r33", "25": "r33", "26": "r33", "27": "r33", "28": "r33", "29": "r33", "30": "r33", "31": "r33", "32": "r33", "33": "r33", "34": "r33", "35": "r33", "36": "r33", "37": "r33", "38": "r33", "39": "r33", "40": "r33", "41": "r33", "42": "r33", "43": "r33", "44": "r33", "45": "r33", "46": "r33", "47": "r33", "48": "r33", "49": "r33", "50": "r33", "51": "r33", "52": "r33", "53": "r33", "54": "r33", "55": "r33", "56": "r33", "57": "r33", "58": "r33" }, { "23": "r34", "24": "r34", "25": "r34", "26": "r34", "27": "r34", "28": "r34", "29": "r34", "30": "r34", "31": "r34", "32": "r34", "33": "r34", "34": "r34", "35": "r34", "36": "r34", "37": "r34", "38": "r34", "39": "r34", "40": "r34", "41": "r34", "42": "r34", "43": "r34", "44": "r34", "45": "r34", "46": "r34", "47": "r34", "48": "r34", "49": "r34", "50": "r34", "51": "r34", "52": "r34", "53": "r34", "54": "r34", "55": "r34", "56": "r34", "57": "r34", "58": "r34" }, { "23": "r35", "24": "r35", "25": "r35", "26": "r35", "27": "r35", "28": "r35", "29": "r35", "30": "r35", "31": "r35", "32": "r35", "33": "r35", "34": "r35", "35": "r35", "36": "r35", "37": "r35", "38": "r35", "39": "r35", "40": "r35", "41": "r35", "42": "r35", "43": "r35", "44": "r35", "45": "r35", "46": "r35", "47": "r35", "48": "r35", "49": "r35", "50": "r35", "51": "r35", "52": "r35", "53": "r35", "54": "r35", "55": "r35", "56": "r35", "57": "r35", "58": "r35" }, { "23": "r36", "24": "r36", "25": "r36", "26": "r36", "27": "r36", "28": "r36", "29": "r36", "30": "r36", "31": "r36", "32": "r36", "33": "r36", "34": "r36", "35": "r36", "36": "r36", "37": "r36", "38": "r36", "39": "r36", "40": "r36", "41": "r36", "42": "r36", "43": "r36", "44": "r36", "45": "r36", "46": "r36", "47": "r36", "48": "r36", "49": "r36", "50": "r36", "51": "r36", "52": "r36", "53": "r36", "54": "r36", "55": "r36", "56": "r36", "57": "r36", "58": "r36" }, { "10": 70, "18": 65, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "10": 70, "18": 83, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "23": "r47", "24": "r47", "25": "r47", "26": "r47", "27": "r47", "28": "r47", "29": "r47", "30": "r47", "31": "r47", "32": "r47", "33": "r47", "34": "r47", "35": "r47", "36": "r47", "37": "r47", "38": "r47", "39": "r47", "40": "r47", "41": "r47", "42": "r47", "43": "r47", "44": "r47", "45": "r47", "46": "r47", "47": "r47", "48": "r47", "49": "r47", "50": "r47", "51": "r47", "52": "r47", "53": "r47", "54": "r47", "55": "r47", "57": "r47" }, { "23": "r48", "24": "r48", "25": "r48", "26": "r48", "27": "r48", "28": "r48", "29": "r48", "30": "r48", "31": "r48", "32": "r48", "33": "r48", "34": "r48", "35": "r48", "36": "r48", "37": "r48", "38": "r48", "39": "r48", "40": "r48", "41": "r48", "42": "r48", "43": "r48", "44": "r48", "45": "r48", "46": "r48", "47": "r48", "48": "r48", "49": "r48", "50": "r48", "51": "r48", "52": "r48", "53": "r48", "54": "r48", "55": "r48", "57": "r48" }, { "4": 85, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 87, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 89, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r13", "24": "r13", "25": "r13", "26": "r13", "27": "r13", "28": "r13", "29": "r13", "30": "r13", "31": "r13", "32": "r13", "33": "r13", "34": "r13", "35": "r13", "36": "r13", "37": "r13", "38": "r13", "39": "r13", "40": "r13", "41": "r13", "42": "r13", "43": "r13", "44": "r13", "45": "r13", "52": "r13", "53": "r13", "54": "r13", "55": "r13", "57": "r13" }, { "23": "r37", "24": "r37", "25": "r37", "26": "r37", "27": "r37", "28": "r37", "29": "r37", "30": "r37", "31": "r37", "32": "r37", "33": "r37", "34": "r37", "35": "r37", "36": "r37", "37": "r37", "38": "r37", "39": "r37", "40": "r37", "41": "r37", "42": "r37", "43": "r37", "44": "r37", "45": "r37", "52": "r37", "53": "r37", "54": "r37", "55": "r37", "57": "r37" }, { "23": "r39", "24": "r39", "25": "r39", "26": "r39", "27": "r39", "28": "r39", "29": "r39", "30": "r39", "31": "r39", "32": "r39", "33": "r39", "34": "r39", "35": "r39", "36": "r39", "37": "r39", "38": "r39", "39": "r39", "40": "r39", "41": "r39", "42": "r39", "43": "r39", "44": "r39", "45": "r39", "46": "s56", "52": "r39", "53": "r39", "54": "r39", "55": "r39", "57": "r39" }, { "23": "r41", "24": "r41", "25": "r41", "26": "r41", "27": "r41", "28": "r41", "29": "r41", "30": "r41", "31": "r41", "32": "r41", "33": "r41", "34": "r41", "35": "r41", "36": "r41", "37": "r41", "38": "r41", "39": "r41", "40": "r41", "41": "r41", "42": "r41", "43": "r41", "44": "r41", "45": "r41", "46": "r41", "52": "r41", "53": "r41", "54": "r41", "55": "r41", "57": "r41" }, { "23": "r42", "24": "r42", "25": "r42", "26": "r42", "27": "r42", "28": "r42", "29": "r42", "30": "r42", "31": "r42", "32": "r42", "33": "r42", "34": "r42", "35": "r42", "36": "r42", "37": "r42", "38": "r42", "39": "r42", "40": "r42", "41": "r42", "42": "r42", "43": "r42", "44": "r42", "45": "r42", "46": "r42", "52": "r42", "53": "r42", "54": "r42", "55": "r42", "57": "r42" }, { "23": "r43", "24": "r43", "25": "r43", "26": "r43", "27": "r43", "28": "r43", "29": "r43", "30": "r43", "31": "r43", "32": "r43", "33": "r43", "34": "r43", "35": "r43", "36": "r43", "37": "r43", "38": "r43", "39": "r43", "40": "r43", "41": "r43", "42": "r43", "43": "r43", "44": "r43", "45": "r43", "46": "r43", "52": "r43", "53": "r43", "54": "r43", "55": "r43", "57": "r43" }, { "23": "r44", "24": "r44", "25": "r44", "26": "r44", "27": "r44", "28": "r44", "29": "r44", "30": "r44", "31": "r44", "32": "r44", "33": "r44", "34": "r44", "35": "r44", "36": "r44", "37": "r44", "38": "r44", "39": "r44", "40": "r44", "41": "r44", "42": "r44", "43": "r44", "44": "r44", "45": "r44", "46": "r44", "52": "r44", "53": "r44", "54": "r44", "55": "r44", "57": "r44" }, { "23": "r45", "24": "r45", "25": "r45", "26": "r45", "27": "r45", "28": "r45", "29": "r45", "30": "r45", "31": "r45", "32": "r45", "33": "r45", "34": "r45", "35": "r45", "36": "r45", "37": "r45", "38": "r45", "39": "r45", "40": "r45", "41": "r45", "42": "r45", "43": "r45", "44": "r45", "45": "r45", "46": "r45", "52": "r45", "53": "r45", "54": "r45", "55": "r45", "57": "r45" }, { "23": "r46", "24": "r46", "25": "r46", "26": "r46", "27": "r46", "28": "r46", "29": "r46", "30": "r46", "31": "r46", "32": "r46", "33": "r46", "34": "r46", "35": "r46", "36": "r46", "37": "r46", "38": "r46", "39": "r46", "40": "r46", "41": "r46", "42": "r46", "43": "r46", "44": "r46", "45": "r46", "46": "r46", "52": "r46", "53": "r46", "54": "r46", "55": "r46", "57": "r46" }, { "23": "r40", "24": "r40", "25": "r40", "26": "r40", "27": "r40", "28": "r40", "29": "r40", "30": "r40", "31": "r40", "32": "r40", "33": "r40", "34": "r40", "35": "r40", "36": "r40", "37": "r40", "38": "r40", "39": "r40", "40": "r40", "41": "r40", "42": "r40", "43": "r40", "44": "r40", "45": "r40", "52": "r40", "53": "r40", "54": "r40", "55": "r40", "57": "r40" }, { "25": "s12", "31": "s58" }, { "23": "r18", "24": "r18", "25": "r18", "26": "r18", "27": "r18", "28": "r18", "29": "r18", "30": "r18", "31": "r18", "32": "r18", "33": "r18", "34": "r18", "35": "r18", "36": "r18", "37": "r18", "38": "r18", "39": "r18", "40": "r18", "41": "r18", "42": "r18", "43": "r18", "44": "r18", "45": "r18", "52": "r18", "53": "r18", "54": "r18", "55": "r18", "57": "r18" }, { "25": "s12", "31": "s60" }, { "23": "r19", "24": "r19", "25": "r19", "26": "r19", "27": "r19", "28": "r19", "29": "r19", "30": "r19", "31": "r19", "32": "r19", "33": "r19", "34": "r19", "35": "r19", "36": "r19", "37": "r19", "38": "r19", "39": "r19", "40": "r19", "41": "r19", "42": "r19", "43": "r19", "44": "r19", "45": "r19", "52": "r19", "53": "r19", "54": "r19", "55": "r19", "57": "r19" }, { "25": "s12", "31": "s62" }, { "23": "r20", "24": "r20", "25": "r20", "26": "r20", "27": "r20", "28": "r20", "29": "r20", "30": "r20", "31": "r20", "32": "r20", "33": "r20", "34": "r20", "35": "r20", "36": "r20", "37": "r20", "38": "r20", "39": "r20", "40": "r20", "41": "r20", "42": "r20", "43": "r20", "44": "r20", "45": "r20", "52": "r20", "53": "r20", "54": "r20", "55": "r20", "57": "r20" }, { "25": "s12", "31": "s64" }, { "23": "r21", "24": "r21", "25": "r21", "26": "r21", "27": "r21", "28": "r21", "29": "r21", "30": "r21", "31": "r21", "32": "r21", "33": "r21", "34": "r21", "35": "r21", "36": "r21", "37": "r21", "38": "r21", "39": "r21", "40": "r21", "41": "r21", "42": "r21", "43": "r21", "44": "r21", "45": "r21", "52": "r21", "53": "r21", "54": "r21", "55": "r21", "57": "r21" }, { "56": "s72" }, { "56": "r55" }, { "10": 70, "20": 73, "21": 75, "22": 76, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r56", "58": "s74" }, { "24": "r62", "28": "r62", "35": "r62", "36": "r62", "37": "r62", "38": "r62", "39": "r62", "40": "r62", "41": "r62", "42": "r62", "43": "r62", "44": "r62", "45": "r62", "56": "r62", "58": "r62" }, { "24": "r63", "28": "r63", "35": "r63", "36": "r63", "37": "r63", "38": "r63", "39": "r63", "40": "r63", "41": "r63", "42": "r63", "43": "r63", "44": "r63", "45": "r63", "56": "r63", "58": "r63" }, { "24": "r64", "28": "r64", "35": "r64", "36": "r64", "37": "r64", "38": "r64", "39": "r64", "40": "r64", "41": "r64", "42": "r64", "43": "r64", "44": "r64", "45": "r64", "56": "r64", "58": "r64" }, { "24": "r65", "28": "r65", "35": "r65", "36": "r65", "37": "r65", "38": "r65", "39": "r65", "40": "r65", "41": "r65", "42": "r65", "43": "r65", "44": "r65", "45": "r65", "56": "r65", "58": "r65" }, { "23": "r52", "24": "r52", "25": "r52", "26": "r52", "27": "r52", "28": "r52", "29": "r52", "30": "r52", "31": "r52", "32": "r52", "33": "r52", "34": "r52", "35": "r52", "36": "r52", "37": "r52", "38": "r52", "39": "r52", "40": "r52", "41": "r52", "42": "r52", "43": "r52", "44": "r52", "45": "r52", "46": "r52", "47": "r52", "48": "r52", "49": "r52", "50": "r52", "51": "r52", "52": "r52", "53": "r52", "54": "r52", "55": "r52", "57": "r52" }, { "56": "r57" }, { "10": 70, "21": 77, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r62", "58": "s68" }, { "56": "r59" }, { "10": 70, "20": 79, "21": 75, "22": 76, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r63", "58": "s80" }, { "10": 70, "18": 78, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "56": "r58" }, { "56": "r60" }, { "10": 70, "21": 81, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r62", "58": "s68" }, { "10": 70, "18": 82, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "56": "r61" }, { "56": "s84" }, { "23": "r53", "24": "r53", "25": "r53", "26": "r53", "27": "r53", "28": "r53", "29": "r53", "30": "r53", "31": "r53", "32": "r53", "33": "r53", "34": "r53", "35": "r53", "36": "r53", "37": "r53", "38": "r53", "39": "r53", "40": "r53", "41": "r53", "42": "r53", "43": "r53", "44": "r53", "45": "r53", "46": "r53", "47": "r53", "48": "r53", "49": "r53", "50": "r53", "51": "r53", "52": "r53", "53": "r53", "54": "r53", "55": "r53", "57": "r53" }, { "25": "s12", "31": "s86" }, { "23": "r49", "24": "r49", "25": "r49", "26": "r49", "27": "r49", "28": "r49", "29": "r49", "30": "r49", "31": "r49", "32": "r49", "33": "r49", "34": "r49", "35": "r49", "36": "r49", "37": "r49", "38": "r49", "39": "r49", "40": "r49", "41": "r49", "42": "r49", "43": "r49", "44": "r49", "45": "r49", "46": "r49", "47": "r49", "48": "r49", "49": "r49", "50": "r49", "51": "r49", "52": "r49", "53": "r49", "54": "r49", "55": "r49", "57": "r49" }, { "25": "s12", "31": "s88" }, { "23": "r50", "24": "r50", "25": "r50", "26": "r50", "27": "r50", "28": "r50", "29": "r50", "30": "r50", "31": "r50", "32": "r50", "33": "r50", "34": "r50", "35": "r50", "36": "r50", "37": "r50", "38": "r50", "39": "r50", "40": "r50", "41": "r50", "42": "r50", "43": "r50", "44": "r50", "45": "r50", "46": "r50", "47": "r50", "48": "r50", "49": "r50", "50": "r50", "51": "r50", "52": "r50", "53": "r50", "54": "r50", "55": "r50", "57": "r50" }, { "25": "s12", "31": "s90" }, { "23": "r51", "24": "r51", "25": "r51", "26": "r51", "27": "r51", "28": "r51", "29": "r51", "30": "r51", "31": "r51", "32": "r51", "33": "r51", "34": "r51", "35": "r51", "36": "r51", "37": "r51", "38": "r51", "39": "r51", "40": "r51", "41": "r51", "42": "r51", "43": "r51", "44": "r51", "45": "r51", "46": "r51", "47": "r51", "48": "r51", "49": "r51", "50": "r51", "51": "r51", "52": "r51", "53": "r51", "54": "r51", "55": "r51", "57": "r51" }];
|
|
|
|
/**
|
|
* Parsing stack.
|
|
*/
|
|
var stack = [];
|
|
|
|
/**
|
|
* Tokenizer instance.
|
|
*/
|
|
var tokenizer = void 0;
|
|
/**
|
|
* Generic tokenizer used by the parser in the Syntax tool.
|
|
*
|
|
* https://www.npmjs.com/package/syntax-cli
|
|
*
|
|
* See `--custom-tokinzer` to skip this generation, and use a custom one.
|
|
*/
|
|
|
|
var lexRules = [[/^#[^\n]+/, function () {/* skip comments */}], [/^\s+/, function () {/* skip whitespace */}], [/^-/, function () {
|
|
return 'DASH';
|
|
}], [/^\//, function () {
|
|
return 'CHAR';
|
|
}], [/^#/, function () {
|
|
return 'CHAR';
|
|
}], [/^\|/, function () {
|
|
return 'CHAR';
|
|
}], [/^\./, function () {
|
|
return 'CHAR';
|
|
}], [/^\{/, function () {
|
|
return 'CHAR';
|
|
}], [/^\{\d+\}/, function () {
|
|
return 'RANGE_EXACT';
|
|
}], [/^\{\d+,\}/, function () {
|
|
return 'RANGE_OPEN';
|
|
}], [/^\{\d+,\d+\}/, function () {
|
|
return 'RANGE_CLOSED';
|
|
}], [/^\\k<(([\u0041-\u005a\u0061-\u007a\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e-\u066f\u0671-\u06d3\u06d5\u06e5-\u06e6\u06ee-\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4-\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u09fc\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0-\u0ae1\u0af9\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60-\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32-\u0e33\u0e40-\u0e46\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5-\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a-\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd-\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4-\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08-\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67-\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\}))(([\u0030-\u0039\u0041-\u005a\u005f\u0061-\u007a\u00aa\u00b5\u00b7\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u05d0-\u05ea\u05ef-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u07fd\u0800-\u082d\u0840-\u085b\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u08d3-\u08e1\u08e3-\u0963\u0966-\u096f\u0971-\u0983\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7-\u09c8\u09cb-\u09ce\u09d7\u09dc-\u09dd\u09df-\u09e3\u09e6-\u09f1\u09fc\u09fe\u0a01-\u0a03\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a3c\u0a3e-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0af9-\u0aff\u0b01-\u0b03\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b5c-\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82-\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c00-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1-\u0cf2\u0d00-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82-\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18-\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1369-\u1371\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772-\u1773\u1780-\u17d3\u17d7\u17dc-\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1878\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1ab0-\u1abd\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1cd0-\u1cd2\u1cd4-\u1cfa\u1d00-\u1df9\u1dfb-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u203f-\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua827\ua840-\ua873\ua880-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua8fd-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\ua9e0-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabea\uabec-\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe2f\ufe33-\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\uddfd\ude80-\ude9c\udea0-\uded0\udee0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udca0-\udca9\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00-\ude03\ude05-\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude35\ude38-\ude3a\ude3f\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee6\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd27\udd30-\udd39\udf00-\udf1c\udf27\udf30-\udf50\udfe0-\udff6]|\ud804[\udc00-\udc46\udc66-\udc6f\udc7f-\udcba\udcd0-\udce8\udcf0-\udcf9\udd00-\udd34\udd36-\udd3f\udd44-\udd46\udd50-\udd73\udd76\udd80-\uddc4\uddc9-\uddcc\uddd0-\uddda\udddc\ude00-\ude11\ude13-\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udeea\udef0-\udef9\udf00-\udf03\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3b-\udf44\udf47-\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]|\ud805[\udc00-\udc4a\udc50-\udc59\udc5e-\udc5f\udc80-\udcc5\udcc7\udcd0-\udcd9\udd80-\uddb5\uddb8-\uddc0\uddd8-\udddd\ude00-\ude40\ude44\ude50-\ude59\ude80-\udeb8\udec0-\udec9\udf00-\udf1a\udf1d-\udf2b\udf30-\udf39]|\ud806[\udc00-\udc3a\udca0-\udce9\udcff\udda0-\udda7\uddaa-\uddd7\uddda-\udde1\udde3-\udde4\ude00-\ude3e\ude47\ude50-\ude99\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc40\udc50-\udc59\udc72-\udc8f\udc92-\udca7\udca9-\udcb6\udd00-\udd06\udd08-\udd09\udd0b-\udd36\udd3a\udd3c-\udd3d\udd3f-\udd47\udd50-\udd59\udd60-\udd65\udd67-\udd68\udd6a-\udd8e\udd90-\udd91\udd93-\udd98\udda0-\udda9\udee0-\udef6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\ude60-\ude69\uded0-\udeed\udef0-\udef4\udf00-\udf36\udf40-\udf43\udf50-\udf59\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf4f-\udf87\udf8f-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9d-\udc9e]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb\udfce-\udfff]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23-\udc24\udc26-\udc2a\udd00-\udd2c\udd30-\udd3d\udd40-\udd49\udd4e\udec0-\udef9]|\ud83a[\udc00-\udcc4\udcd0-\udcd6\udd00-\udd4b\udd50-\udd59]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]|\udb40[\udd00-\uddef])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\})|[\u200c\u200d])*>/, function () {
|
|
var groupName = yytext.slice(3, -1);
|
|
validateUnicodeGroupName(groupName, this.getCurrentState());
|
|
return 'NAMED_GROUP_REF';
|
|
}], [/^\\b/, function () {
|
|
return 'ESC_b';
|
|
}], [/^\\B/, function () {
|
|
return 'ESC_B';
|
|
}], [/^\\c[a-zA-Z]/, function () {
|
|
return 'CTRL_CH';
|
|
}], [/^\\0\d{1,2}/, function () {
|
|
return 'OCT_CODE';
|
|
}], [/^\\0/, function () {
|
|
return 'DEC_CODE';
|
|
}], [/^\\\d{1,3}/, function () {
|
|
return 'DEC_CODE';
|
|
}], [/^\\u[dD][89abAB][0-9a-fA-F]{2}\\u[dD][c-fC-F][0-9a-fA-F]{2}/, function () {
|
|
return 'U_CODE_SURROGATE';
|
|
}], [/^\\u\{[0-9a-fA-F]{1,}\}/, function () {
|
|
return 'U_CODE';
|
|
}], [/^\\u[0-9a-fA-F]{4}/, function () {
|
|
return 'U_CODE';
|
|
}], [/^\\[pP]\{\w+(?:=\w+)?\}/, function () {
|
|
return 'U_PROP_VALUE_EXP';
|
|
}], [/^\\x[0-9a-fA-F]{2}/, function () {
|
|
return 'HEX_CODE';
|
|
}], [/^\\[tnrdDsSwWvf]/, function () {
|
|
return 'META_CHAR';
|
|
}], [/^\\\//, function () {
|
|
return 'ESC_CHAR';
|
|
}], [/^\\[ #]/, function () {
|
|
return 'ESC_CHAR';
|
|
}], [/^\\[\^\$\.\*\+\?\(\)\\\[\]\{\}\|\/]/, function () {
|
|
return 'ESC_CHAR';
|
|
}], [/^\\[^*?+\[()\\|]/, function () {
|
|
var s = this.getCurrentState();
|
|
if (s === 'u_class' && yytext === "\\-") {
|
|
return 'ESC_CHAR';
|
|
} else if (s === 'u' || s === 'xu' || s === 'u_class') {
|
|
throw new SyntaxError('invalid Unicode escape ' + yytext);
|
|
}
|
|
return 'ESC_CHAR';
|
|
}], [/^\(/, function () {
|
|
return 'CHAR';
|
|
}], [/^\)/, function () {
|
|
return 'CHAR';
|
|
}], [/^\(\?=/, function () {
|
|
return 'POS_LA_ASSERT';
|
|
}], [/^\(\?!/, function () {
|
|
return 'NEG_LA_ASSERT';
|
|
}], [/^\(\?<=/, function () {
|
|
return 'POS_LB_ASSERT';
|
|
}], [/^\(\?<!/, function () {
|
|
return 'NEG_LB_ASSERT';
|
|
}], [/^\(\?:/, function () {
|
|
return 'NON_CAPTURE_GROUP';
|
|
}], [/^\(\?<(([\u0041-\u005a\u0061-\u007a\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e-\u066f\u0671-\u06d3\u06d5\u06e5-\u06e6\u06ee-\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4-\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u09fc\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0-\u0ae1\u0af9\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60-\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32-\u0e33\u0e40-\u0e46\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5-\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a-\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd-\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4-\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08-\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67-\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\}))(([\u0030-\u0039\u0041-\u005a\u005f\u0061-\u007a\u00aa\u00b5\u00b7\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u05d0-\u05ea\u05ef-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u07fd\u0800-\u082d\u0840-\u085b\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u08d3-\u08e1\u08e3-\u0963\u0966-\u096f\u0971-\u0983\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7-\u09c8\u09cb-\u09ce\u09d7\u09dc-\u09dd\u09df-\u09e3\u09e6-\u09f1\u09fc\u09fe\u0a01-\u0a03\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a3c\u0a3e-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0af9-\u0aff\u0b01-\u0b03\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b5c-\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82-\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c00-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1-\u0cf2\u0d00-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82-\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18-\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1369-\u1371\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772-\u1773\u1780-\u17d3\u17d7\u17dc-\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1878\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1ab0-\u1abd\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1cd0-\u1cd2\u1cd4-\u1cfa\u1d00-\u1df9\u1dfb-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u203f-\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua827\ua840-\ua873\ua880-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua8fd-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\ua9e0-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabea\uabec-\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe2f\ufe33-\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\uddfd\ude80-\ude9c\udea0-\uded0\udee0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udca0-\udca9\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00-\ude03\ude05-\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude35\ude38-\ude3a\ude3f\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee6\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd27\udd30-\udd39\udf00-\udf1c\udf27\udf30-\udf50\udfe0-\udff6]|\ud804[\udc00-\udc46\udc66-\udc6f\udc7f-\udcba\udcd0-\udce8\udcf0-\udcf9\udd00-\udd34\udd36-\udd3f\udd44-\udd46\udd50-\udd73\udd76\udd80-\uddc4\uddc9-\uddcc\uddd0-\uddda\udddc\ude00-\ude11\ude13-\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udeea\udef0-\udef9\udf00-\udf03\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3b-\udf44\udf47-\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]|\ud805[\udc00-\udc4a\udc50-\udc59\udc5e-\udc5f\udc80-\udcc5\udcc7\udcd0-\udcd9\udd80-\uddb5\uddb8-\uddc0\uddd8-\udddd\ude00-\ude40\ude44\ude50-\ude59\ude80-\udeb8\udec0-\udec9\udf00-\udf1a\udf1d-\udf2b\udf30-\udf39]|\ud806[\udc00-\udc3a\udca0-\udce9\udcff\udda0-\udda7\uddaa-\uddd7\uddda-\udde1\udde3-\udde4\ude00-\ude3e\ude47\ude50-\ude99\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc40\udc50-\udc59\udc72-\udc8f\udc92-\udca7\udca9-\udcb6\udd00-\udd06\udd08-\udd09\udd0b-\udd36\udd3a\udd3c-\udd3d\udd3f-\udd47\udd50-\udd59\udd60-\udd65\udd67-\udd68\udd6a-\udd8e\udd90-\udd91\udd93-\udd98\udda0-\udda9\udee0-\udef6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\ude60-\ude69\uded0-\udeed\udef0-\udef4\udf00-\udf36\udf40-\udf43\udf50-\udf59\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf4f-\udf87\udf8f-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9d-\udc9e]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb\udfce-\udfff]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23-\udc24\udc26-\udc2a\udd00-\udd2c\udd30-\udd3d\udd40-\udd49\udd4e\udec0-\udef9]|\ud83a[\udc00-\udcc4\udcd0-\udcd6\udd00-\udd4b\udd50-\udd59]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]|\udb40[\udd00-\uddef])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\})|[\u200c\u200d])*>/, function () {
|
|
yytext = yytext.slice(3, -1);
|
|
validateUnicodeGroupName(yytext, this.getCurrentState());
|
|
return 'NAMED_CAPTURE_GROUP';
|
|
}], [/^\(/, function () {
|
|
return 'L_PAREN';
|
|
}], [/^\)/, function () {
|
|
return 'R_PAREN';
|
|
}], [/^[*?+[^$]/, function () {
|
|
return 'CHAR';
|
|
}], [/^\\\]/, function () {
|
|
return 'ESC_CHAR';
|
|
}], [/^\]/, function () {
|
|
this.popState();return 'R_BRACKET';
|
|
}], [/^\^/, function () {
|
|
return 'BOS';
|
|
}], [/^\$/, function () {
|
|
return 'EOS';
|
|
}], [/^\*/, function () {
|
|
return 'STAR';
|
|
}], [/^\?/, function () {
|
|
return 'Q_MARK';
|
|
}], [/^\+/, function () {
|
|
return 'PLUS';
|
|
}], [/^\|/, function () {
|
|
return 'BAR';
|
|
}], [/^\./, function () {
|
|
return 'ANY';
|
|
}], [/^\//, function () {
|
|
return 'SLASH';
|
|
}], [/^[^*?+\[()\\|]/, function () {
|
|
return 'CHAR';
|
|
}], [/^\[\^/, function () {
|
|
var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'NEG_CLASS';
|
|
}], [/^\[/, function () {
|
|
var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'L_BRACKET';
|
|
}]];
|
|
var lexRulesByConditions = { "INITIAL": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "u": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "xu": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "x": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "u_class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51] };
|
|
|
|
var EOF_TOKEN = {
|
|
type: EOF,
|
|
value: ''
|
|
};
|
|
|
|
tokenizer = {
|
|
initString: function initString(string) {
|
|
this._string = string;
|
|
this._cursor = 0;
|
|
|
|
this._states = ['INITIAL'];
|
|
this._tokensQueue = [];
|
|
|
|
this._currentLine = 1;
|
|
this._currentColumn = 0;
|
|
this._currentLineBeginOffset = 0;
|
|
|
|
/**
|
|
* Matched token location data.
|
|
*/
|
|
this._tokenStartOffset = 0;
|
|
this._tokenEndOffset = 0;
|
|
this._tokenStartLine = 1;
|
|
this._tokenEndLine = 1;
|
|
this._tokenStartColumn = 0;
|
|
this._tokenEndColumn = 0;
|
|
|
|
return this;
|
|
},
|
|
|
|
|
|
/**
|
|
* Returns tokenizer states.
|
|
*/
|
|
getStates: function getStates() {
|
|
return this._states;
|
|
},
|
|
getCurrentState: function getCurrentState() {
|
|
return this._states[this._states.length - 1];
|
|
},
|
|
pushState: function pushState(state) {
|
|
this._states.push(state);
|
|
},
|
|
begin: function begin(state) {
|
|
this.pushState(state);
|
|
},
|
|
popState: function popState() {
|
|
if (this._states.length > 1) {
|
|
return this._states.pop();
|
|
}
|
|
return this._states[0];
|
|
},
|
|
getNextToken: function getNextToken() {
|
|
// Something was queued, return it.
|
|
if (this._tokensQueue.length > 0) {
|
|
return this.onToken(this._toToken(this._tokensQueue.shift()));
|
|
}
|
|
|
|
if (!this.hasMoreTokens()) {
|
|
return this.onToken(EOF_TOKEN);
|
|
}
|
|
|
|
var string = this._string.slice(this._cursor);
|
|
var lexRulesForState = lexRulesByConditions[this.getCurrentState()];
|
|
|
|
for (var i = 0; i < lexRulesForState.length; i++) {
|
|
var lexRuleIndex = lexRulesForState[i];
|
|
var lexRule = lexRules[lexRuleIndex];
|
|
|
|
var matched = this._match(string, lexRule[0]);
|
|
|
|
// Manual handling of EOF token (the end of string). Return it
|
|
// as `EOF` symbol.
|
|
if (string === '' && matched === '') {
|
|
this._cursor++;
|
|
}
|
|
|
|
if (matched !== null) {
|
|
yytext = matched;
|
|
yytext.length;
|
|
var token = lexRule[1].call(this);
|
|
|
|
if (!token) {
|
|
return this.getNextToken();
|
|
}
|
|
|
|
// If multiple tokens are returned, save them to return
|
|
// on next `getNextToken` call.
|
|
|
|
if (Array.isArray(token)) {
|
|
var tokensToQueue = token.slice(1);
|
|
token = token[0];
|
|
if (tokensToQueue.length > 0) {
|
|
var _tokensQueue;
|
|
|
|
(_tokensQueue = this._tokensQueue).unshift.apply(_tokensQueue, _toConsumableArray$8(tokensToQueue));
|
|
}
|
|
}
|
|
|
|
return this.onToken(this._toToken(token, yytext));
|
|
}
|
|
}
|
|
|
|
if (this.isEOF()) {
|
|
this._cursor++;
|
|
return EOF_TOKEN;
|
|
}
|
|
|
|
this.throwUnexpectedToken(string[0], this._currentLine, this._currentColumn);
|
|
},
|
|
|
|
|
|
/**
|
|
* Throws default "Unexpected token" exception, showing the actual
|
|
* line from the source, pointing with the ^ marker to the bad token.
|
|
* In addition, shows `line:column` location.
|
|
*/
|
|
throwUnexpectedToken: function throwUnexpectedToken(symbol, line, column) {
|
|
var lineSource = this._string.split('\n')[line - 1];
|
|
var lineData = '';
|
|
|
|
if (lineSource) {
|
|
var pad = ' '.repeat(column);
|
|
lineData = '\n\n' + lineSource + '\n' + pad + '^\n';
|
|
}
|
|
|
|
throw new SyntaxError(lineData + 'Unexpected token: "' + symbol + '" ' + ('at ' + line + ':' + column + '.'));
|
|
},
|
|
getCursor: function getCursor() {
|
|
return this._cursor;
|
|
},
|
|
getCurrentLine: function getCurrentLine() {
|
|
return this._currentLine;
|
|
},
|
|
getCurrentColumn: function getCurrentColumn() {
|
|
return this._currentColumn;
|
|
},
|
|
_captureLocation: function _captureLocation(matched) {
|
|
var nlRe = /\n/g;
|
|
|
|
// Absolute offsets.
|
|
this._tokenStartOffset = this._cursor;
|
|
|
|
// Line-based locations, start.
|
|
this._tokenStartLine = this._currentLine;
|
|
this._tokenStartColumn = this._tokenStartOffset - this._currentLineBeginOffset;
|
|
|
|
// Extract `\n` in the matched token.
|
|
var nlMatch = void 0;
|
|
while ((nlMatch = nlRe.exec(matched)) !== null) {
|
|
this._currentLine++;
|
|
this._currentLineBeginOffset = this._tokenStartOffset + nlMatch.index + 1;
|
|
}
|
|
|
|
this._tokenEndOffset = this._cursor + matched.length;
|
|
|
|
// Line-based locations, end.
|
|
this._tokenEndLine = this._currentLine;
|
|
this._tokenEndColumn = this._currentColumn = this._tokenEndOffset - this._currentLineBeginOffset;
|
|
},
|
|
_toToken: function _toToken(tokenType) {
|
|
var yytext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
|
|
return {
|
|
// Basic data.
|
|
type: tokenType,
|
|
value: yytext,
|
|
|
|
// Location data.
|
|
startOffset: this._tokenStartOffset,
|
|
endOffset: this._tokenEndOffset,
|
|
startLine: this._tokenStartLine,
|
|
endLine: this._tokenEndLine,
|
|
startColumn: this._tokenStartColumn,
|
|
endColumn: this._tokenEndColumn
|
|
};
|
|
},
|
|
isEOF: function isEOF() {
|
|
return this._cursor === this._string.length;
|
|
},
|
|
hasMoreTokens: function hasMoreTokens() {
|
|
return this._cursor <= this._string.length;
|
|
},
|
|
_match: function _match(string, regexp) {
|
|
var matched = string.match(regexp);
|
|
if (matched) {
|
|
// Handle `\n` in the matched token to track line numbers.
|
|
this._captureLocation(matched[0]);
|
|
this._cursor += matched[0].length;
|
|
return matched[0];
|
|
}
|
|
return null;
|
|
},
|
|
|
|
|
|
/**
|
|
* Allows analyzing, and transforming token. Default implementation
|
|
* just passes the token through.
|
|
*/
|
|
onToken: function onToken(token) {
|
|
return token;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Expose tokenizer so it can be accessed in semantic actions.
|
|
*/
|
|
yy.lexer = tokenizer;
|
|
yy.tokenizer = tokenizer;
|
|
|
|
/**
|
|
* Global parsing options. Some options can be shadowed per
|
|
* each `parse` call, if the optations are passed.
|
|
*
|
|
* Initalized to the `captureLocations` which is passed
|
|
* from the generator. Other options can be added at runtime.
|
|
*/
|
|
yy.options = {
|
|
captureLocations: true
|
|
};
|
|
|
|
/**
|
|
* Parsing module.
|
|
*/
|
|
var yyparse = {
|
|
/**
|
|
* Sets global parsing options.
|
|
*/
|
|
setOptions: function setOptions(options) {
|
|
yy.options = options;
|
|
return this;
|
|
},
|
|
|
|
|
|
/**
|
|
* Returns parsing options.
|
|
*/
|
|
getOptions: function getOptions() {
|
|
return yy.options;
|
|
},
|
|
|
|
|
|
/**
|
|
* Parses a string.
|
|
*/
|
|
parse: function parse(string, parseOptions) {
|
|
if (!tokenizer) {
|
|
throw new Error('Tokenizer instance wasn\'t specified.');
|
|
}
|
|
|
|
tokenizer.initString(string);
|
|
|
|
/**
|
|
* If parse options are passed, override global parse options for
|
|
* this call, and later restore global options.
|
|
*/
|
|
var globalOptions = yy.options;
|
|
if (parseOptions) {
|
|
yy.options = Object.assign({}, yy.options, parseOptions);
|
|
}
|
|
|
|
/**
|
|
* Allow callers to do setup work based on the
|
|
* parsing string, and passed options.
|
|
*/
|
|
yyparse.onParseBegin(string, tokenizer, yy.options);
|
|
|
|
stack.length = 0;
|
|
stack.push(0);
|
|
|
|
var token = tokenizer.getNextToken();
|
|
var shiftedToken = null;
|
|
|
|
do {
|
|
if (!token) {
|
|
// Restore options.
|
|
yy.options = globalOptions;
|
|
unexpectedEndOfInput();
|
|
}
|
|
|
|
var state = stack[stack.length - 1];
|
|
var column = tokens[token.type];
|
|
|
|
if (!table[state].hasOwnProperty(column)) {
|
|
yy.options = globalOptions;
|
|
unexpectedToken(token);
|
|
}
|
|
|
|
var entry = table[state][column];
|
|
|
|
// Shift action.
|
|
if (entry[0] === 's') {
|
|
var _loc2 = null;
|
|
|
|
if (yy.options.captureLocations) {
|
|
_loc2 = {
|
|
startOffset: token.startOffset,
|
|
endOffset: token.endOffset,
|
|
startLine: token.startLine,
|
|
endLine: token.endLine,
|
|
startColumn: token.startColumn,
|
|
endColumn: token.endColumn
|
|
};
|
|
}
|
|
|
|
shiftedToken = this.onShift(token);
|
|
|
|
stack.push({ symbol: tokens[shiftedToken.type], semanticValue: shiftedToken.value, loc: _loc2 }, Number(entry.slice(1)));
|
|
|
|
token = tokenizer.getNextToken();
|
|
}
|
|
|
|
// Reduce action.
|
|
else if (entry[0] === 'r') {
|
|
var productionNumber = entry.slice(1);
|
|
var production = productions[productionNumber];
|
|
var hasSemanticAction = typeof production[2] === 'function';
|
|
var semanticValueArgs = hasSemanticAction ? [] : null;
|
|
|
|
var locationArgs = hasSemanticAction && yy.options.captureLocations ? [] : null;
|
|
|
|
if (production[1] !== 0) {
|
|
var rhsLength = production[1];
|
|
while (rhsLength-- > 0) {
|
|
stack.pop();
|
|
var stackEntry = stack.pop();
|
|
|
|
if (hasSemanticAction) {
|
|
semanticValueArgs.unshift(stackEntry.semanticValue);
|
|
|
|
if (locationArgs) {
|
|
locationArgs.unshift(stackEntry.loc);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var reduceStackEntry = { symbol: production[0] };
|
|
|
|
if (hasSemanticAction) {
|
|
yytext = shiftedToken ? shiftedToken.value : null;
|
|
shiftedToken ? shiftedToken.value.length : null;
|
|
|
|
var semanticActionArgs = locationArgs !== null ? semanticValueArgs.concat(locationArgs) : semanticValueArgs;
|
|
|
|
production[2].apply(production, _toConsumableArray$8(semanticActionArgs));
|
|
|
|
reduceStackEntry.semanticValue = __;
|
|
|
|
if (locationArgs) {
|
|
reduceStackEntry.loc = __loc;
|
|
}
|
|
}
|
|
|
|
var nextState = stack[stack.length - 1];
|
|
var symbolToReduceWith = production[0];
|
|
|
|
stack.push(reduceStackEntry, table[nextState][symbolToReduceWith]);
|
|
}
|
|
|
|
// Accept.
|
|
else if (entry === 'acc') {
|
|
stack.pop();
|
|
var parsed = stack.pop();
|
|
|
|
if (stack.length !== 1 || stack[0] !== 0 || tokenizer.hasMoreTokens()) {
|
|
// Restore options.
|
|
yy.options = globalOptions;
|
|
unexpectedToken(token);
|
|
}
|
|
|
|
if (parsed.hasOwnProperty('semanticValue')) {
|
|
yy.options = globalOptions;
|
|
yyparse.onParseEnd(parsed.semanticValue);
|
|
return parsed.semanticValue;
|
|
}
|
|
|
|
yyparse.onParseEnd();
|
|
|
|
// Restore options.
|
|
yy.options = globalOptions;
|
|
return true;
|
|
}
|
|
} while (tokenizer.hasMoreTokens() || stack.length > 1);
|
|
},
|
|
setTokenizer: function setTokenizer(customTokenizer) {
|
|
tokenizer = customTokenizer;
|
|
return yyparse;
|
|
},
|
|
getTokenizer: function getTokenizer() {
|
|
return tokenizer;
|
|
},
|
|
onParseBegin: function onParseBegin(string, tokenizer, options) {},
|
|
onParseEnd: function onParseEnd(parsed) {},
|
|
|
|
|
|
/**
|
|
* Allows analyzing, and transforming shifted token. Default implementation
|
|
* just passes the token through.
|
|
*/
|
|
onShift: function onShift(token) {
|
|
return token;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Tracks capturing groups.
|
|
*/
|
|
var capturingGroupsCount = 0;
|
|
|
|
/**
|
|
* Tracks named groups.
|
|
*/
|
|
var namedGroups = {};
|
|
|
|
/**
|
|
* Parsing string.
|
|
*/
|
|
var parsingString = '';
|
|
|
|
yyparse.onParseBegin = function (string, lexer) {
|
|
parsingString = string;
|
|
capturingGroupsCount = 0;
|
|
namedGroups = {};
|
|
|
|
var lastSlash = string.lastIndexOf('/');
|
|
var flags = string.slice(lastSlash);
|
|
|
|
if (flags.includes('x') && flags.includes('u')) {
|
|
lexer.pushState('xu');
|
|
} else {
|
|
if (flags.includes('x')) {
|
|
lexer.pushState('x');
|
|
}
|
|
if (flags.includes('u')) {
|
|
lexer.pushState('u');
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* On shifting `(` remember its number to used on reduce.
|
|
*/
|
|
yyparse.onShift = function (token) {
|
|
if (token.type === 'L_PAREN' || token.type === 'NAMED_CAPTURE_GROUP') {
|
|
token.value = new String(token.value);
|
|
token.value.groupNumber = ++capturingGroupsCount;
|
|
}
|
|
return token;
|
|
};
|
|
|
|
/**
|
|
* Extracts ranges from the range string.
|
|
*/
|
|
function getRange(text) {
|
|
var range = text.match(/\d+/g).map(Number);
|
|
|
|
if (Number.isFinite(range[1]) && range[1] < range[0]) {
|
|
throw new SyntaxError('Numbers out of order in ' + text + ' quantifier');
|
|
}
|
|
|
|
return range;
|
|
}
|
|
|
|
/**
|
|
* Checks class range
|
|
*/
|
|
function checkClassRange(from, to) {
|
|
if (from.kind === 'control' || to.kind === 'control' || !isNaN(from.codePoint) && !isNaN(to.codePoint) && from.codePoint > to.codePoint) {
|
|
throw new SyntaxError('Range ' + from.value + '-' + to.value + ' out of order in character class');
|
|
}
|
|
}
|
|
|
|
// ---------------------- Unicode property -------------------------------------------
|
|
|
|
var unicodeProperties = parserUnicodeProperties;
|
|
|
|
/**
|
|
* Unicode property.
|
|
*/
|
|
function UnicodeProperty(matched, loc) {
|
|
var negative = matched[1] === 'P';
|
|
var separatorIdx = matched.indexOf('=');
|
|
|
|
var name = matched.slice(3, separatorIdx !== -1 ? separatorIdx : -1);
|
|
var value = void 0;
|
|
|
|
// General_Category allows using only value as a shorthand.
|
|
var isShorthand = separatorIdx === -1 && unicodeProperties.isGeneralCategoryValue(name);
|
|
|
|
// Binary propery name.
|
|
var isBinaryProperty = separatorIdx === -1 && unicodeProperties.isBinaryPropertyName(name);
|
|
|
|
if (isShorthand) {
|
|
value = name;
|
|
name = 'General_Category';
|
|
} else if (isBinaryProperty) {
|
|
value = name;
|
|
} else {
|
|
if (!unicodeProperties.isValidName(name)) {
|
|
throw new SyntaxError('Invalid unicode property name: ' + name + '.');
|
|
}
|
|
|
|
value = matched.slice(separatorIdx + 1, -1);
|
|
|
|
if (!unicodeProperties.isValidValue(name, value)) {
|
|
throw new SyntaxError('Invalid ' + name + ' unicode property value: ' + value + '.');
|
|
}
|
|
}
|
|
|
|
return Node({
|
|
type: 'UnicodeProperty',
|
|
name: name,
|
|
value: value,
|
|
negative: negative,
|
|
shorthand: isShorthand,
|
|
binary: isBinaryProperty,
|
|
canonicalName: unicodeProperties.getCanonicalName(name) || name,
|
|
canonicalValue: unicodeProperties.getCanonicalValue(value) || value
|
|
}, loc);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
|
|
|
|
/**
|
|
* Creates a character node.
|
|
*/
|
|
function Char(value, kind, loc) {
|
|
var symbol = void 0;
|
|
var codePoint = void 0;
|
|
|
|
switch (kind) {
|
|
case 'decimal':
|
|
{
|
|
codePoint = Number(value.slice(1));
|
|
symbol = String.fromCodePoint(codePoint);
|
|
break;
|
|
}
|
|
case 'oct':
|
|
{
|
|
codePoint = parseInt(value.slice(1), 8);
|
|
symbol = String.fromCodePoint(codePoint);
|
|
break;
|
|
}
|
|
case 'hex':
|
|
case 'unicode':
|
|
{
|
|
if (value.lastIndexOf('\\u') > 0) {
|
|
var _value$split$slice = value.split('\\u').slice(1),
|
|
_value$split$slice2 = _slicedToArray$2(_value$split$slice, 2),
|
|
lead = _value$split$slice2[0],
|
|
trail = _value$split$slice2[1];
|
|
|
|
lead = parseInt(lead, 16);
|
|
trail = parseInt(trail, 16);
|
|
codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;
|
|
|
|
symbol = String.fromCodePoint(codePoint);
|
|
} else {
|
|
var hex = value.slice(2).replace('{', '');
|
|
codePoint = parseInt(hex, 16);
|
|
if (codePoint > 0x10ffff) {
|
|
throw new SyntaxError('Bad character escape sequence: ' + value);
|
|
}
|
|
|
|
symbol = String.fromCodePoint(codePoint);
|
|
}
|
|
break;
|
|
}
|
|
case 'meta':
|
|
{
|
|
switch (value) {
|
|
case '\\t':
|
|
symbol = '\t';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\n':
|
|
symbol = '\n';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\r':
|
|
symbol = '\r';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\v':
|
|
symbol = '\v';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\f':
|
|
symbol = '\f';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\b':
|
|
symbol = '\b';
|
|
codePoint = symbol.codePointAt(0);
|
|
case '\\0':
|
|
symbol = '\0';
|
|
codePoint = 0;
|
|
case '.':
|
|
symbol = '.';
|
|
codePoint = NaN;
|
|
break;
|
|
default:
|
|
codePoint = NaN;
|
|
}
|
|
break;
|
|
}
|
|
case 'simple':
|
|
{
|
|
symbol = value;
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return Node({
|
|
type: 'Char',
|
|
value: value,
|
|
kind: kind,
|
|
symbol: symbol,
|
|
codePoint: codePoint
|
|
}, loc);
|
|
}
|
|
|
|
/**
|
|
* Valid flags per current ECMAScript spec and
|
|
* stage 3+ proposals.
|
|
*/
|
|
var validFlags = 'gimsuxy';
|
|
|
|
/**
|
|
* Checks the flags are valid, and that
|
|
* we don't duplicate flags.
|
|
*/
|
|
function checkFlags(flags) {
|
|
var seen = new Set();
|
|
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = flags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var flag = _step.value;
|
|
|
|
if (seen.has(flag) || !validFlags.includes(flag)) {
|
|
throw new SyntaxError('Invalid flags: ' + flags);
|
|
}
|
|
seen.add(flag);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
|
|
return flags.split('').sort().join('');
|
|
}
|
|
|
|
/**
|
|
* Parses patterns like \1, \2, etc. either as a backreference
|
|
* to a group, or a deciaml char code.
|
|
*/
|
|
function GroupRefOrDecChar(text, textLoc) {
|
|
var reference = Number(text.slice(1));
|
|
|
|
if (reference > 0 && reference <= capturingGroupsCount) {
|
|
return Node({
|
|
type: 'Backreference',
|
|
kind: 'number',
|
|
number: reference,
|
|
reference: reference
|
|
}, textLoc);
|
|
}
|
|
|
|
return Char(text, 'decimal', textLoc);
|
|
}
|
|
|
|
/**
|
|
* Unicode names.
|
|
*/
|
|
var uReStart = /^\\u[0-9a-fA-F]{4}/; // only matches start of string
|
|
var ucpReStart = /^\\u\{[0-9a-fA-F]{1,}\}/; // only matches start of string
|
|
var ucpReAnywhere = /\\u\{[0-9a-fA-F]{1,}\}/; // matches anywhere in string
|
|
|
|
/**
|
|
* Validates Unicode group name.
|
|
*/
|
|
function validateUnicodeGroupName(name, state) {
|
|
var isUnicodeName = ucpReAnywhere.test(name);
|
|
var isUnicodeState = state === 'u' || state === 'xu' || state === 'u_class';
|
|
|
|
if (isUnicodeName && !isUnicodeState) {
|
|
throw new SyntaxError('invalid group Unicode name "' + name + '", use `u` flag.');
|
|
}
|
|
|
|
return name;
|
|
}
|
|
|
|
// Matches the following production: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence
|
|
//
|
|
// RegExpUnicodeEscapeSequence ::
|
|
// `u` LeadSurrogate `\u` TrailSurrogate # as 'leadSurrogate', 'trailSurrogate'
|
|
// `u` LeadSurrogate # as 'leadSurrogateOnly'
|
|
// `u` TrailSurrogate # as 'trailSurrogateOnly'
|
|
// `u` NonSurrogate # as 'nonSurrogate'
|
|
// `u` `{` CodePoint `}` # as 'codePoint'
|
|
//
|
|
// LeadSurrogate ::
|
|
// Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xD800 to 0xDBFF # [dD][89aAbB][0-9a-fA-F]{2}
|
|
//
|
|
// TrailSurrogate ::
|
|
// Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xDC00 to 0xDFFF # [dD][c-fC-F][0-9a-fA-F]{2}
|
|
//
|
|
// NonSurrogate ::
|
|
// Hex4Digits but only if the SV of Hex4Digits is not in the inclusive range 0xD800 to 0xDFFF # [0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2}
|
|
//
|
|
// CodePoint ::
|
|
// HexDigits but only if MV of HexDigits ≤ 0x10FFFF # 0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4})
|
|
//
|
|
var uidRe = /\\u(?:([dD][89aAbB][0-9a-fA-F]{2})\\u([dD][c-fC-F][0-9a-fA-F]{2})|([dD][89aAbB][0-9a-fA-F]{2})|([dD][c-fC-F][0-9a-fA-F]{2})|([0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2})|\{(0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4}))\})/;
|
|
|
|
function decodeUnicodeGroupName(name) {
|
|
return name.replace(new RegExp(uidRe, 'g'), function (_, leadSurrogate, trailSurrogate, leadSurrogateOnly, trailSurrogateOnly, nonSurrogate, codePoint) {
|
|
if (leadSurrogate) {
|
|
return String.fromCodePoint(parseInt(leadSurrogate, 16), parseInt(trailSurrogate, 16));
|
|
}
|
|
if (leadSurrogateOnly) {
|
|
return String.fromCodePoint(parseInt(leadSurrogateOnly, 16));
|
|
}
|
|
if (trailSurrogateOnly) {
|
|
// TODO: Per the spec: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence
|
|
// > Each `\u` TrailSurrogate for which the choice of associated `u` LeadSurrogate is ambiguous shall be associated with the nearest possible `u` LeadSurrogate that would otherwise have no corresponding `\u` TrailSurrogate.
|
|
return String.fromCodePoint(parseInt(trailSurrogateOnly, 16));
|
|
}
|
|
if (nonSurrogate) {
|
|
return String.fromCodePoint(parseInt(nonSurrogate, 16));
|
|
}
|
|
if (codePoint) {
|
|
return String.fromCodePoint(parseInt(codePoint, 16));
|
|
}
|
|
return _;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Extracts from `\k<foo>` pattern either a backreference
|
|
* to a named capturing group (if it presents), or parses it
|
|
* as a list of char: `\k`, `<`, `f`, etc.
|
|
*/
|
|
function NamedGroupRefOrChars(text, textLoc) {
|
|
var referenceRaw = text.slice(3, -1);
|
|
var reference = decodeUnicodeGroupName(referenceRaw);
|
|
|
|
if (namedGroups.hasOwnProperty(reference)) {
|
|
return Node({
|
|
type: 'Backreference',
|
|
kind: 'name',
|
|
number: namedGroups[reference],
|
|
reference: reference,
|
|
referenceRaw: referenceRaw
|
|
}, textLoc);
|
|
}
|
|
|
|
// Else `\k<foo>` should be parsed as a list of `Char`s.
|
|
// This is really a 0.01% edge case, but we should handle it.
|
|
|
|
var startOffset = null;
|
|
var startLine = null;
|
|
var endLine = null;
|
|
var startColumn = null;
|
|
|
|
if (textLoc) {
|
|
startOffset = textLoc.startOffset;
|
|
startLine = textLoc.startLine;
|
|
endLine = textLoc.endLine;
|
|
startColumn = textLoc.startColumn;
|
|
}
|
|
|
|
var charRe = /^[\w$<>]/;
|
|
var loc = void 0;
|
|
|
|
var chars = [
|
|
// Init to first \k, taking 2 symbols.
|
|
Char(text.slice(1, 2), 'simple', startOffset ? {
|
|
startLine: startLine,
|
|
endLine: endLine,
|
|
startColumn: startColumn,
|
|
startOffset: startOffset,
|
|
endOffset: startOffset += 2,
|
|
endColumn: startColumn += 2
|
|
} : null)];
|
|
|
|
// For \k
|
|
chars[0].escaped = true;
|
|
|
|
// Other symbols.
|
|
text = text.slice(2);
|
|
|
|
while (text.length > 0) {
|
|
var matched = null;
|
|
|
|
// Unicode, \u003B or \u{003B}
|
|
if ((matched = text.match(uReStart)) || (matched = text.match(ucpReStart))) {
|
|
if (startOffset) {
|
|
loc = {
|
|
startLine: startLine,
|
|
endLine: endLine,
|
|
startColumn: startColumn,
|
|
startOffset: startOffset,
|
|
endOffset: startOffset += matched[0].length,
|
|
endColumn: startColumn += matched[0].length
|
|
};
|
|
}
|
|
chars.push(Char(matched[0], 'unicode', loc));
|
|
text = text.slice(matched[0].length);
|
|
}
|
|
|
|
// Simple char.
|
|
else if (matched = text.match(charRe)) {
|
|
if (startOffset) {
|
|
loc = {
|
|
startLine: startLine,
|
|
endLine: endLine,
|
|
startColumn: startColumn,
|
|
startOffset: startOffset,
|
|
endOffset: ++startOffset,
|
|
endColumn: ++startColumn
|
|
};
|
|
}
|
|
chars.push(Char(matched[0], 'simple', loc));
|
|
text = text.slice(1);
|
|
}
|
|
}
|
|
|
|
return chars;
|
|
}
|
|
|
|
/**
|
|
* Creates an AST node with a location.
|
|
*/
|
|
function Node(node, loc) {
|
|
if (yy.options.captureLocations) {
|
|
node.loc = {
|
|
source: parsingString.slice(loc.startOffset, loc.endOffset),
|
|
start: {
|
|
line: loc.startLine,
|
|
column: loc.startColumn,
|
|
offset: loc.startOffset
|
|
},
|
|
end: {
|
|
line: loc.endLine,
|
|
column: loc.endColumn,
|
|
offset: loc.endOffset
|
|
}
|
|
};
|
|
}
|
|
return node;
|
|
}
|
|
|
|
/**
|
|
* Creates location node.
|
|
*/
|
|
function loc(start, end) {
|
|
if (!yy.options.captureLocations) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
startOffset: start.startOffset,
|
|
endOffset: end.endOffset,
|
|
startLine: start.startLine,
|
|
endLine: end.endLine,
|
|
startColumn: start.startColumn,
|
|
endColumn: end.endColumn
|
|
};
|
|
}
|
|
|
|
function unexpectedToken(token) {
|
|
if (token.type === EOF) {
|
|
unexpectedEndOfInput();
|
|
}
|
|
|
|
tokenizer.throwUnexpectedToken(token.value, token.startLine, token.startColumn);
|
|
}
|
|
|
|
function unexpectedEndOfInput() {
|
|
parseError('Unexpected end of input.');
|
|
}
|
|
|
|
function parseError(message) {
|
|
throw new SyntaxError(message);
|
|
}
|
|
|
|
var regexpTree$4 = yyparse;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var regexpTreeParser = regexpTree$4;
|
|
|
|
/**
|
|
* Original parse function.
|
|
*/
|
|
var generatedParseFn = regexpTreeParser.parse.bind(regexpTreeParser);
|
|
|
|
/**
|
|
* Parses a regular expression.
|
|
*
|
|
* Override original `regexpTreeParser.parse` to convert a value to a string,
|
|
* since in regexp-tree we may pass strings, and RegExp instance.
|
|
*/
|
|
regexpTreeParser.parse = function (regexp, options) {
|
|
return generatedParseFn('' + regexp, options);
|
|
};
|
|
|
|
// By default do not capture locations; callers may override.
|
|
regexpTreeParser.setOptions({ captureLocations: false });
|
|
|
|
var parser$4 = regexpTreeParser;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _createClass$6 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck$6(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var DEFAULT_COLLECTION_PROP = 'expressions';
|
|
var DEFAULT_SINGLE_PROP = 'expression';
|
|
|
|
/**
|
|
* NodePath class encapsulates a traversing node,
|
|
* its parent node, property name in the parent node, and
|
|
* an index (in case if a node is part of a collection).
|
|
* It also provides set of methods for AST manipulation.
|
|
*/
|
|
|
|
var NodePath$3 = function () {
|
|
/**
|
|
* NodePath constructor.
|
|
*
|
|
* @param Object node - an AST node
|
|
* @param NodePath parentPath - a nullable parent path
|
|
* @param string property - property name of the node in the parent
|
|
* @param number index - index of the node in a collection.
|
|
*/
|
|
function NodePath(node) {
|
|
var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
|
|
_classCallCheck$6(this, NodePath);
|
|
|
|
this.node = node;
|
|
this.parentPath = parentPath;
|
|
this.parent = parentPath ? parentPath.node : null;
|
|
this.property = property;
|
|
this.index = index;
|
|
}
|
|
|
|
_createClass$6(NodePath, [{
|
|
key: '_enforceProp',
|
|
value: function _enforceProp(property) {
|
|
if (!this.node.hasOwnProperty(property)) {
|
|
throw new Error('Node of type ' + this.node.type + ' doesn\'t have "' + property + '" collection.');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets a node into a children collection or the single child.
|
|
* By default child nodes are supposed to be under `expressions` property.
|
|
* An explicit property can be passed.
|
|
*
|
|
* @param Object node - a node to set into a collection or as single child
|
|
* @param number index - index at which to set
|
|
* @param string property - name of the collection or single property
|
|
*/
|
|
|
|
}, {
|
|
key: 'setChild',
|
|
value: function setChild(node) {
|
|
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
|
|
|
|
var childPath = void 0;
|
|
if (index != null) {
|
|
if (!property) {
|
|
property = DEFAULT_COLLECTION_PROP;
|
|
}
|
|
this._enforceProp(property);
|
|
this.node[property][index] = node;
|
|
childPath = NodePath.getForNode(node, this, property, index);
|
|
} else {
|
|
if (!property) {
|
|
property = DEFAULT_SINGLE_PROP;
|
|
}
|
|
this._enforceProp(property);
|
|
this.node[property] = node;
|
|
childPath = NodePath.getForNode(node, this, property, null);
|
|
}
|
|
return childPath;
|
|
}
|
|
|
|
/**
|
|
* Appends a node to a children collection.
|
|
* By default child nodes are supposed to be under `expressions` property.
|
|
* An explicit property can be passed.
|
|
*
|
|
* @param Object node - a node to set into a collection or as single child
|
|
* @param string property - name of the collection or single property
|
|
*/
|
|
|
|
}, {
|
|
key: 'appendChild',
|
|
value: function appendChild(node) {
|
|
var property = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
|
|
|
|
if (!property) {
|
|
property = DEFAULT_COLLECTION_PROP;
|
|
}
|
|
this._enforceProp(property);
|
|
var end = this.node[property].length;
|
|
return this.setChild(node, end, property);
|
|
}
|
|
|
|
/**
|
|
* Inserts a node into a collection.
|
|
* By default child nodes are supposed to be under `expressions` property.
|
|
* An explicit property can be passed.
|
|
*
|
|
* @param Object node - a node to insert into a collection
|
|
* @param number index - index at which to insert
|
|
* @param string property - name of the collection property
|
|
*/
|
|
|
|
}, {
|
|
key: 'insertChildAt',
|
|
value: function insertChildAt(node, index) {
|
|
var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_COLLECTION_PROP;
|
|
|
|
this._enforceProp(property);
|
|
|
|
this.node[property].splice(index, 0, node);
|
|
|
|
// If we inserted a node before the traversing index,
|
|
// we should increase the later.
|
|
if (index <= NodePath.getTraversingIndex()) {
|
|
NodePath.updateTraversingIndex(+1);
|
|
}
|
|
|
|
this._rebuildIndex(this.node, property);
|
|
}
|
|
|
|
/**
|
|
* Removes a node.
|
|
*/
|
|
|
|
}, {
|
|
key: 'remove',
|
|
value: function remove() {
|
|
if (this.isRemoved()) {
|
|
return;
|
|
}
|
|
NodePath.registry.delete(this.node);
|
|
|
|
this.node = null;
|
|
|
|
if (!this.parent) {
|
|
return;
|
|
}
|
|
|
|
// A node is in a collection.
|
|
if (this.index !== null) {
|
|
this.parent[this.property].splice(this.index, 1);
|
|
|
|
// If we remove a node before the traversing index,
|
|
// we should increase the later.
|
|
if (this.index <= NodePath.getTraversingIndex()) {
|
|
NodePath.updateTraversingIndex(-1);
|
|
}
|
|
|
|
// Rebuild index.
|
|
this._rebuildIndex(this.parent, this.property);
|
|
|
|
this.index = null;
|
|
this.property = null;
|
|
|
|
return;
|
|
}
|
|
|
|
// A simple node.
|
|
delete this.parent[this.property];
|
|
this.property = null;
|
|
}
|
|
|
|
/**
|
|
* Rebuilds child nodes index (used on remove/insert).
|
|
*/
|
|
|
|
}, {
|
|
key: '_rebuildIndex',
|
|
value: function _rebuildIndex(parent, property) {
|
|
var parentPath = NodePath.getForNode(parent);
|
|
|
|
for (var i = 0; i < parent[property].length; i++) {
|
|
var path = NodePath.getForNode(parent[property][i], parentPath, property, i);
|
|
path.index = i;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Whether the path was removed.
|
|
*/
|
|
|
|
}, {
|
|
key: 'isRemoved',
|
|
value: function isRemoved() {
|
|
return this.node === null;
|
|
}
|
|
|
|
/**
|
|
* Replaces a node with the passed one.
|
|
*/
|
|
|
|
}, {
|
|
key: 'replace',
|
|
value: function replace(newNode) {
|
|
NodePath.registry.delete(this.node);
|
|
|
|
this.node = newNode;
|
|
|
|
if (!this.parent) {
|
|
return null;
|
|
}
|
|
|
|
// A node is in a collection.
|
|
if (this.index !== null) {
|
|
this.parent[this.property][this.index] = newNode;
|
|
}
|
|
|
|
// A simple node.
|
|
else {
|
|
this.parent[this.property] = newNode;
|
|
}
|
|
|
|
// Rebuild the node path for the new node.
|
|
return NodePath.getForNode(newNode, this.parentPath, this.property, this.index);
|
|
}
|
|
|
|
/**
|
|
* Updates a node inline.
|
|
*/
|
|
|
|
}, {
|
|
key: 'update',
|
|
value: function update(nodeProps) {
|
|
Object.assign(this.node, nodeProps);
|
|
}
|
|
|
|
/**
|
|
* Returns parent.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getParent',
|
|
value: function getParent() {
|
|
return this.parentPath;
|
|
}
|
|
|
|
/**
|
|
* Returns nth child.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getChild',
|
|
value: function getChild() {
|
|
var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
|
|
if (this.node.expressions) {
|
|
return NodePath.getForNode(this.node.expressions[n], this, DEFAULT_COLLECTION_PROP, n);
|
|
} else if (this.node.expression && n == 0) {
|
|
return NodePath.getForNode(this.node.expression, this, DEFAULT_SINGLE_PROP);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Whether a path node is syntactically equal to the passed one.
|
|
*
|
|
* NOTE: we don't rely on `source` property from the `loc` data
|
|
* (which would be the fastest comparison), since it might be unsync
|
|
* after several modifications. We use here simple `JSON.stringify`
|
|
* excluding the `loc` data.
|
|
*
|
|
* @param NodePath other - path to compare to.
|
|
* @return boolean
|
|
*/
|
|
|
|
}, {
|
|
key: 'hasEqualSource',
|
|
value: function hasEqualSource(path) {
|
|
return JSON.stringify(this.node, jsonSkipLoc) === JSON.stringify(path.node, jsonSkipLoc);
|
|
}
|
|
|
|
/**
|
|
* JSON-encodes a node skipping location.
|
|
*/
|
|
|
|
}, {
|
|
key: 'jsonEncode',
|
|
value: function jsonEncode() {
|
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
format = _ref.format,
|
|
useLoc = _ref.useLoc;
|
|
|
|
return JSON.stringify(this.node, useLoc ? null : jsonSkipLoc, format);
|
|
}
|
|
|
|
/**
|
|
* Returns previous sibling.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getPreviousSibling',
|
|
value: function getPreviousSibling() {
|
|
if (!this.parent || this.index == null) {
|
|
return null;
|
|
}
|
|
return NodePath.getForNode(this.parent[this.property][this.index - 1], NodePath.getForNode(this.parent), this.property, this.index - 1);
|
|
}
|
|
|
|
/**
|
|
* Returns next sibling.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getNextSibling',
|
|
value: function getNextSibling() {
|
|
if (!this.parent || this.index == null) {
|
|
return null;
|
|
}
|
|
return NodePath.getForNode(this.parent[this.property][this.index + 1], NodePath.getForNode(this.parent), this.property, this.index + 1);
|
|
}
|
|
|
|
/**
|
|
* Returns a NodePath instance for a node.
|
|
*
|
|
* The same NodePath can be reused in several places, e.g.
|
|
* a parent node passed for all its children.
|
|
*/
|
|
|
|
}], [{
|
|
key: 'getForNode',
|
|
value: function getForNode(node) {
|
|
var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
var prop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;
|
|
|
|
if (!node) {
|
|
return null;
|
|
}
|
|
|
|
if (!NodePath.registry.has(node)) {
|
|
NodePath.registry.set(node, new NodePath(node, parentPath, prop, index == -1 ? null : index));
|
|
}
|
|
|
|
var path = NodePath.registry.get(node);
|
|
|
|
if (parentPath !== null) {
|
|
path.parentPath = parentPath;
|
|
path.parent = path.parentPath.node;
|
|
}
|
|
|
|
if (prop !== null) {
|
|
path.property = prop;
|
|
}
|
|
|
|
if (index >= 0) {
|
|
path.index = index;
|
|
}
|
|
|
|
return path;
|
|
}
|
|
|
|
/**
|
|
* Initializes the NodePath registry. The registry is a map from
|
|
* a node to its NodePath instance.
|
|
*/
|
|
|
|
}, {
|
|
key: 'initRegistry',
|
|
value: function initRegistry() {
|
|
if (!NodePath.registry) {
|
|
NodePath.registry = new Map();
|
|
}
|
|
NodePath.registry.clear();
|
|
}
|
|
|
|
/**
|
|
* Updates index of a currently traversing collection.
|
|
*/
|
|
|
|
}, {
|
|
key: 'updateTraversingIndex',
|
|
value: function updateTraversingIndex(dx) {
|
|
return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1] += dx;
|
|
}
|
|
|
|
/**
|
|
* Returns current traversing index.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getTraversingIndex',
|
|
value: function getTraversingIndex() {
|
|
return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1];
|
|
}
|
|
}]);
|
|
|
|
return NodePath;
|
|
}();
|
|
|
|
NodePath$3.initRegistry();
|
|
|
|
/**
|
|
* Index of a currently traversing collection is stored on top of the
|
|
* `NodePath.traversingIndexStack`. Remove/insert methods can adjust
|
|
* this index.
|
|
*/
|
|
NodePath$3.traversingIndexStack = [];
|
|
|
|
// Helper function used to skip `loc` in JSON operations.
|
|
function jsonSkipLoc(prop, value) {
|
|
if (prop === 'loc') {
|
|
return undefined;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
var nodePath = NodePath$3;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var NodePath$2 = nodePath;
|
|
|
|
/**
|
|
* Does an actual AST traversal, using visitor pattern,
|
|
* and calling set of callbacks.
|
|
*
|
|
* Based on https://github.com/olov/ast-traverse
|
|
*
|
|
* Expects AST in Mozilla Parser API: nodes which are supposed to be
|
|
* handled should have `type` property.
|
|
*
|
|
* @param Object root - a root node to start traversal from.
|
|
*
|
|
* @param Object options - an object with set of callbacks:
|
|
*
|
|
* - `pre(node, parent, prop, index)` - a hook called on node enter
|
|
* - `post`(node, parent, prop, index) - a hook called on node exit
|
|
* - `skipProperty(prop)` - a predicated whether a property should be skipped
|
|
*/
|
|
function astTraverse(root) {
|
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
var pre = options.pre;
|
|
var post = options.post;
|
|
var skipProperty = options.skipProperty;
|
|
|
|
function visit(node, parent, prop, idx) {
|
|
if (!node || typeof node.type !== 'string') {
|
|
return;
|
|
}
|
|
|
|
var res = undefined;
|
|
if (pre) {
|
|
res = pre(node, parent, prop, idx);
|
|
}
|
|
|
|
if (res !== false) {
|
|
|
|
// A node can be replaced during traversal, so we have to
|
|
// recalculate it from the parent, to avoid traversing "dead" nodes.
|
|
if (parent && parent[prop]) {
|
|
if (!isNaN(idx)) {
|
|
node = parent[prop][idx];
|
|
} else {
|
|
node = parent[prop];
|
|
}
|
|
}
|
|
|
|
for (var _prop in node) {
|
|
if (node.hasOwnProperty(_prop)) {
|
|
if (skipProperty ? skipProperty(_prop, node) : _prop[0] === '$') {
|
|
continue;
|
|
}
|
|
|
|
var child = node[_prop];
|
|
|
|
// Collection node.
|
|
//
|
|
// NOTE: a node (or several nodes) can be removed or inserted
|
|
// during traversal.
|
|
//
|
|
// Current traversing index is stored on top of the
|
|
// `NodePath.traversingIndexStack`. The stack is used to support
|
|
// recursive nature of the traversal.
|
|
//
|
|
// In this case `NodePath.traversingIndex` (which we use here) is
|
|
// updated in the NodePath remove/insert methods.
|
|
//
|
|
if (Array.isArray(child)) {
|
|
var index = 0;
|
|
NodePath$2.traversingIndexStack.push(index);
|
|
while (index < child.length) {
|
|
visit(child[index], node, _prop, index);
|
|
index = NodePath$2.updateTraversingIndex(+1);
|
|
}
|
|
NodePath$2.traversingIndexStack.pop();
|
|
}
|
|
|
|
// Simple node.
|
|
else {
|
|
visit(child, node, _prop);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (post) {
|
|
post(node, parent, prop, idx);
|
|
}
|
|
}
|
|
|
|
visit(root, null);
|
|
}
|
|
|
|
var traverse$1 = {
|
|
/**
|
|
* Traverses an AST.
|
|
*
|
|
* @param Object ast - an AST node
|
|
*
|
|
* @param Object | Array<Object> handlers:
|
|
*
|
|
* an object (or an array of objects)
|
|
*
|
|
* Each such object contains a handler function per node.
|
|
* In case of an array of handlers, they are applied in order.
|
|
* A handler may return a transformed node (or a different type).
|
|
*
|
|
* The per-node function may instead be an object with functions pre and post.
|
|
* pre is called before visiting the node, post after.
|
|
* If a handler is a function, it is treated as the pre function, with an empty post.
|
|
*
|
|
* @param Object options:
|
|
*
|
|
* a config object, specifying traversal options:
|
|
*
|
|
* `asNodes`: boolean - whether handlers should receives raw AST nodes
|
|
* (false by default), instead of a `NodePath` wrapper. Note, by default
|
|
* `NodePath` wrapper provides a set of convenient method to manipulate
|
|
* a traversing AST, and also has access to all parents list. A raw
|
|
* nodes traversal should be used in rare cases, when no `NodePath`
|
|
* features are needed.
|
|
*
|
|
* Special hooks:
|
|
*
|
|
* - `shouldRun(ast)` - a predicate determining whether the handler
|
|
* should be applied.
|
|
*
|
|
* NOTE: Multiple handlers are used as an optimization of applying all of
|
|
* them in one AST traversal pass.
|
|
*/
|
|
traverse: function traverse(ast, handlers) {
|
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { asNodes: false };
|
|
|
|
|
|
if (!Array.isArray(handlers)) {
|
|
handlers = [handlers];
|
|
}
|
|
|
|
// Filter out handlers by result of `shouldRun`, if the method is present.
|
|
handlers = handlers.filter(function (handler) {
|
|
if (typeof handler.shouldRun !== 'function') {
|
|
return true;
|
|
}
|
|
return handler.shouldRun(ast);
|
|
});
|
|
|
|
NodePath$2.initRegistry();
|
|
|
|
// Allow handlers to initializer themselves.
|
|
handlers.forEach(function (handler) {
|
|
if (typeof handler.init === 'function') {
|
|
handler.init(ast);
|
|
}
|
|
});
|
|
|
|
function getPathFor(node, parent, prop, index) {
|
|
var parentPath = NodePath$2.getForNode(parent);
|
|
var nodePath = NodePath$2.getForNode(node, parentPath, prop, index);
|
|
|
|
return nodePath;
|
|
}
|
|
|
|
// Handle actual nodes.
|
|
astTraverse(ast, {
|
|
/**
|
|
* Handler on node enter.
|
|
*/
|
|
pre: function pre(node, parent, prop, index) {
|
|
var nodePath = void 0;
|
|
if (!options.asNodes) {
|
|
nodePath = getPathFor(node, parent, prop, index);
|
|
}
|
|
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = handlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var handler = _step.value;
|
|
|
|
// "Catch-all" `*` handler.
|
|
if (typeof handler['*'] === 'function') {
|
|
if (nodePath) {
|
|
// A path/node can be removed by some previous handler.
|
|
if (!nodePath.isRemoved()) {
|
|
var handlerResult = handler['*'](nodePath);
|
|
// Explicitly stop traversal.
|
|
if (handlerResult === false) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
handler['*'](node, parent, prop, index);
|
|
}
|
|
}
|
|
|
|
// Per-node handler.
|
|
var handlerFuncPre = void 0;
|
|
if (typeof handler[node.type] === 'function') {
|
|
handlerFuncPre = handler[node.type];
|
|
} else if (typeof handler[node.type] === 'object' && typeof handler[node.type].pre === 'function') {
|
|
handlerFuncPre = handler[node.type].pre;
|
|
}
|
|
|
|
if (handlerFuncPre) {
|
|
if (nodePath) {
|
|
// A path/node can be removed by some previous handler.
|
|
if (!nodePath.isRemoved()) {
|
|
var _handlerResult = handlerFuncPre.call(handler, nodePath);
|
|
// Explicitly stop traversal.
|
|
if (_handlerResult === false) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
handlerFuncPre.call(handler, node, parent, prop, index);
|
|
}
|
|
}
|
|
} // Loop over handlers
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
// pre func
|
|
|
|
/**
|
|
* Handler on node exit.
|
|
*/
|
|
post: function post(node, parent, prop, index) {
|
|
if (!node) {
|
|
return;
|
|
}
|
|
|
|
var nodePath = void 0;
|
|
if (!options.asNodes) {
|
|
nodePath = getPathFor(node, parent, prop, index);
|
|
}
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = handlers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var handler = _step2.value;
|
|
|
|
// Per-node handler.
|
|
var handlerFuncPost = void 0;
|
|
if (typeof handler[node.type] === 'object' && typeof handler[node.type].post === 'function') {
|
|
handlerFuncPost = handler[node.type].post;
|
|
}
|
|
|
|
if (handlerFuncPost) {
|
|
if (nodePath) {
|
|
// A path/node can be removed by some previous handler.
|
|
if (!nodePath.isRemoved()) {
|
|
var handlerResult = handlerFuncPost.call(handler, nodePath);
|
|
// Explicitly stop traversal.
|
|
if (handlerResult === false) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
handlerFuncPost.call(handler, node, parent, prop, index);
|
|
}
|
|
}
|
|
} // Loop over handlers
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
// post func
|
|
|
|
/**
|
|
* Skip locations by default.
|
|
*/
|
|
skipProperty: function skipProperty(prop) {
|
|
return prop === 'loc';
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _createClass$5 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var generator$2 = generator_1;
|
|
var parser$3 = parser$4;
|
|
var traverse = traverse$1;
|
|
|
|
/**
|
|
* Transform result.
|
|
*/
|
|
|
|
var TransformResult = function () {
|
|
/**
|
|
* Initializes a transform result for an AST.
|
|
*
|
|
* @param Object ast - an AST node
|
|
* @param mixed extra - any extra data a transform may return
|
|
*/
|
|
function TransformResult(ast) {
|
|
var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
|
|
_classCallCheck$5(this, TransformResult);
|
|
|
|
this._ast = ast;
|
|
this._source = null;
|
|
this._string = null;
|
|
this._regexp = null;
|
|
this._extra = extra;
|
|
}
|
|
|
|
_createClass$5(TransformResult, [{
|
|
key: 'getAST',
|
|
value: function getAST() {
|
|
return this._ast;
|
|
}
|
|
}, {
|
|
key: 'setExtra',
|
|
value: function setExtra(extra) {
|
|
this._extra = extra;
|
|
}
|
|
}, {
|
|
key: 'getExtra',
|
|
value: function getExtra() {
|
|
return this._extra;
|
|
}
|
|
}, {
|
|
key: 'toRegExp',
|
|
value: function toRegExp() {
|
|
if (!this._regexp) {
|
|
this._regexp = new RegExp(this.getSource(), this._ast.flags);
|
|
}
|
|
return this._regexp;
|
|
}
|
|
}, {
|
|
key: 'getSource',
|
|
value: function getSource() {
|
|
if (!this._source) {
|
|
this._source = generator$2.generate(this._ast.body);
|
|
}
|
|
return this._source;
|
|
}
|
|
}, {
|
|
key: 'getFlags',
|
|
value: function getFlags() {
|
|
return this._ast.flags;
|
|
}
|
|
}, {
|
|
key: 'toString',
|
|
value: function toString() {
|
|
if (!this._string) {
|
|
this._string = generator$2.generate(this._ast);
|
|
}
|
|
return this._string;
|
|
}
|
|
}]);
|
|
|
|
return TransformResult;
|
|
}();
|
|
|
|
var transform$1 = {
|
|
/**
|
|
* Expose `TransformResult`.
|
|
*/
|
|
TransformResult: TransformResult,
|
|
|
|
/**
|
|
* Transforms a regular expression applying a set of
|
|
* transformation handlers.
|
|
*
|
|
* @param string | AST | RegExp:
|
|
*
|
|
* a regular expression in different representations: a string,
|
|
* a RegExp object, or an AST.
|
|
*
|
|
* @param Object | Array<Object>:
|
|
*
|
|
* a handler (or a list of handlers) from `traverse` API.
|
|
*
|
|
* @return TransformResult instance.
|
|
*
|
|
* Example:
|
|
*
|
|
* transform(/[a-z]/i, {
|
|
* onChar(path) {
|
|
* const {node} = path;
|
|
*
|
|
* if (...) {
|
|
* path.remove();
|
|
* }
|
|
* }
|
|
* });
|
|
*/
|
|
transform: function transform(regexp, handlers) {
|
|
var ast = regexp;
|
|
|
|
if (regexp instanceof RegExp) {
|
|
regexp = '' + regexp;
|
|
}
|
|
|
|
if (typeof regexp === 'string') {
|
|
ast = parser$3.parse(regexp, {
|
|
captureLocations: true
|
|
});
|
|
}
|
|
|
|
traverse.traverse(ast, handlers);
|
|
|
|
return new TransformResult(ast);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var compatTransforms = transforms$1;
|
|
var _transform$1 = transform$1;
|
|
|
|
var compatTranspiler$1 = {
|
|
/**
|
|
* Translates a regexp in new syntax to equivalent regexp in old syntax.
|
|
*
|
|
* @param string|RegExp|AST - regexp
|
|
* @param Array transformsWhitelist - names of the transforms to apply
|
|
*/
|
|
transform: function transform(regexp) {
|
|
var transformsWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
|
|
var transformToApply = transformsWhitelist.length > 0 ? transformsWhitelist : Object.keys(compatTransforms);
|
|
|
|
var result = void 0;
|
|
|
|
// Collect extra data per transform.
|
|
var extra = {};
|
|
|
|
transformToApply.forEach(function (transformName) {
|
|
|
|
if (!compatTransforms.hasOwnProperty(transformName)) {
|
|
throw new Error('Unknown compat-transform: ' + transformName + '. ' + 'Available transforms are: ' + Object.keys(compatTransforms).join(', '));
|
|
}
|
|
|
|
var handler = compatTransforms[transformName];
|
|
|
|
result = _transform$1.transform(regexp, handler);
|
|
regexp = result.getAST();
|
|
|
|
// Collect `extra` transform result.
|
|
if (typeof handler.getExtra === 'function') {
|
|
extra[transformName] = handler.getExtra();
|
|
}
|
|
});
|
|
|
|
// Set the final extras for all transforms.
|
|
result.setExtra(extra);
|
|
|
|
return result;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* Performs a deep copy of an simple object.
|
|
* Only handles scalar values, arrays and objects.
|
|
*
|
|
* @param obj Object
|
|
*/
|
|
|
|
var clone$1 = function clone(obj) {
|
|
if (obj === null || typeof obj !== 'object') {
|
|
return obj;
|
|
}
|
|
var res = void 0;
|
|
if (Array.isArray(obj)) {
|
|
res = [];
|
|
} else {
|
|
res = {};
|
|
}
|
|
for (var i in obj) {
|
|
res[i] = clone(obj[i]);
|
|
}
|
|
return res;
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to transform surrogate pairs into single unicode code point
|
|
*
|
|
* \ud83d\ude80 -> \u{1f680}
|
|
*/
|
|
|
|
var charSurrogatePairToSingleUnicodeTransform = {
|
|
shouldRun: function shouldRun(ast) {
|
|
return ast.flags.includes('u');
|
|
},
|
|
Char: function Char(path) {
|
|
var node = path.node;
|
|
|
|
if (node.kind !== 'unicode' || !node.isSurrogatePair || isNaN(node.codePoint)) {
|
|
return;
|
|
}
|
|
node.value = '\\u{' + node.codePoint.toString(16) + '}';
|
|
delete node.isSurrogatePair;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var UPPER_A_CP$1 = 'A'.codePointAt(0);
|
|
var UPPER_Z_CP$1 = 'Z'.codePointAt(0);
|
|
var LOWER_A_CP = 'a'.codePointAt(0);
|
|
var LOWER_Z_CP = 'z'.codePointAt(0);
|
|
var DIGIT_0_CP = '0'.codePointAt(0);
|
|
var DIGIT_9_CP = '9'.codePointAt(0);
|
|
|
|
/**
|
|
* A regexp-tree plugin to transform coded chars into simple chars.
|
|
*
|
|
* \u0061 -> a
|
|
*/
|
|
var charCodeToSimpleCharTransform = {
|
|
Char: function Char(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
if (isNaN(node.codePoint) || node.kind === 'simple') {
|
|
return;
|
|
}
|
|
|
|
if (parent.type === 'ClassRange') {
|
|
if (!isSimpleRange(parent)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!isPrintableASCIIChar(node.codePoint)) {
|
|
return;
|
|
}
|
|
|
|
var symbol = String.fromCodePoint(node.codePoint);
|
|
var newChar = {
|
|
type: 'Char',
|
|
kind: 'simple',
|
|
value: symbol,
|
|
symbol: symbol,
|
|
codePoint: node.codePoint
|
|
};
|
|
if (needsEscape(symbol, parent.type)) {
|
|
newChar.escaped = true;
|
|
}
|
|
path.replace(newChar);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Checks if a range is included either in 0-9, a-z or A-Z
|
|
* @param classRange
|
|
* @returns {boolean}
|
|
*/
|
|
function isSimpleRange(classRange) {
|
|
var from = classRange.from,
|
|
to = classRange.to;
|
|
|
|
return from.codePoint >= DIGIT_0_CP && from.codePoint <= DIGIT_9_CP && to.codePoint >= DIGIT_0_CP && to.codePoint <= DIGIT_9_CP || from.codePoint >= UPPER_A_CP$1 && from.codePoint <= UPPER_Z_CP$1 && to.codePoint >= UPPER_A_CP$1 && to.codePoint <= UPPER_Z_CP$1 || from.codePoint >= LOWER_A_CP && from.codePoint <= LOWER_Z_CP && to.codePoint >= LOWER_A_CP && to.codePoint <= LOWER_Z_CP;
|
|
}
|
|
|
|
/**
|
|
* Checks if a code point in the range of printable ASCII chars
|
|
* (DEL char excluded)
|
|
* @param codePoint
|
|
* @returns {boolean}
|
|
*/
|
|
function isPrintableASCIIChar(codePoint) {
|
|
return codePoint >= 0x20 && codePoint <= 0x7e;
|
|
}
|
|
|
|
function needsEscape(symbol, parentType) {
|
|
if (parentType === 'ClassRange' || parentType === 'CharacterClass') {
|
|
return (/[\]\\^-]/.test(symbol)
|
|
);
|
|
}
|
|
|
|
return (/[*[()+?^$./\\|{}]/.test(symbol)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var UPPER_A_CP = 'A'.codePointAt(0);
|
|
var UPPER_Z_CP = 'Z'.codePointAt(0);
|
|
/**
|
|
* Transforms case-insensitive regexp to lowercase
|
|
*
|
|
* /AaBbÏ/i -> /aabbï/i
|
|
*/
|
|
var charCaseInsensitiveLowercaseTransform = {
|
|
_AZClassRanges: null,
|
|
_hasUFlag: false,
|
|
init: function init(ast) {
|
|
this._AZClassRanges = new Set();
|
|
this._hasUFlag = ast.flags.includes('u');
|
|
},
|
|
shouldRun: function shouldRun(ast) {
|
|
return ast.flags.includes('i');
|
|
},
|
|
Char: function Char(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
if (isNaN(node.codePoint)) {
|
|
return;
|
|
}
|
|
|
|
// Engine support for case-insensitive matching without the u flag
|
|
// for characters above \u1000 does not seem reliable.
|
|
if (!this._hasUFlag && node.codePoint >= 0x1000) {
|
|
return;
|
|
}
|
|
|
|
if (parent.type === 'ClassRange') {
|
|
// The only class ranges we handle must be inside A-Z.
|
|
// After the `from` char is processed, the isAZClassRange test
|
|
// will be false, so we use a Set to keep track of parents and
|
|
// process the `to` char.
|
|
if (!this._AZClassRanges.has(parent) && !isAZClassRange(parent)) {
|
|
return;
|
|
}
|
|
this._AZClassRanges.add(parent);
|
|
}
|
|
|
|
var lower = node.symbol.toLowerCase();
|
|
if (lower !== node.symbol) {
|
|
node.value = displaySymbolAsValue(lower, node);
|
|
node.symbol = lower;
|
|
node.codePoint = lower.codePointAt(0);
|
|
}
|
|
}
|
|
};
|
|
|
|
function isAZClassRange(classRange) {
|
|
var from = classRange.from,
|
|
to = classRange.to;
|
|
// A-Z
|
|
|
|
return from.codePoint >= UPPER_A_CP && from.codePoint <= UPPER_Z_CP && to.codePoint >= UPPER_A_CP && to.codePoint <= UPPER_Z_CP;
|
|
}
|
|
|
|
function displaySymbolAsValue(symbol, node) {
|
|
var codePoint = symbol.codePointAt(0);
|
|
if (node.kind === 'decimal') {
|
|
return '\\' + codePoint;
|
|
}
|
|
if (node.kind === 'oct') {
|
|
return '\\0' + codePoint.toString(8);
|
|
}
|
|
if (node.kind === 'hex') {
|
|
return '\\x' + codePoint.toString(16);
|
|
}
|
|
if (node.kind === 'unicode') {
|
|
if (node.isSurrogatePair) {
|
|
var _getSurrogatePairFrom = getSurrogatePairFromCodePoint(codePoint),
|
|
lead = _getSurrogatePairFrom.lead,
|
|
trail = _getSurrogatePairFrom.trail;
|
|
|
|
return '\\u' + '0'.repeat(4 - lead.length) + lead + '\\u' + '0'.repeat(4 - trail.length) + trail;
|
|
} else if (node.value.includes('{')) {
|
|
return '\\u{' + codePoint.toString(16) + '}';
|
|
} else {
|
|
var code = codePoint.toString(16);
|
|
return '\\u' + '0'.repeat(4 - code.length) + code;
|
|
}
|
|
}
|
|
// simple
|
|
return symbol;
|
|
}
|
|
|
|
/**
|
|
* Converts a code point to a surrogate pair.
|
|
* Conversion algorithm is taken from The Unicode Standard 3.0 Section 3.7
|
|
* (https://www.unicode.org/versions/Unicode3.0.0/ch03.pdf)
|
|
* @param {number} codePoint - Between 0x10000 and 0x10ffff
|
|
* @returns {{lead: string, trail: string}}
|
|
*/
|
|
function getSurrogatePairFromCodePoint(codePoint) {
|
|
var lead = Math.floor((codePoint - 0x10000) / 0x400) + 0xd800;
|
|
var trail = (codePoint - 0x10000) % 0x400 + 0xdc00;
|
|
return {
|
|
lead: lead.toString(16),
|
|
trail: trail.toString(16)
|
|
};
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove duplicates from character classes.
|
|
*/
|
|
|
|
var charClassRemoveDuplicatesTransform = {
|
|
CharacterClass: function CharacterClass(path) {
|
|
var node = path.node;
|
|
|
|
var sources = {};
|
|
|
|
for (var i = 0; i < node.expressions.length; i++) {
|
|
var childPath = path.getChild(i);
|
|
var source = childPath.jsonEncode();
|
|
|
|
if (sources.hasOwnProperty(source)) {
|
|
childPath.remove();
|
|
|
|
// Since we remove the current node.
|
|
// TODO: make it simpler for users with a method.
|
|
i--;
|
|
}
|
|
|
|
sources[source] = true;
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* Flattens a nested disjunction node to a list.
|
|
*
|
|
* /a|b|c|d/
|
|
*
|
|
* {{{a, b}, c}, d} -> [a, b, c, d]
|
|
*/
|
|
|
|
function _toConsumableArray$7(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
function disjunctionToList$1(node) {
|
|
if (node.type !== 'Disjunction') {
|
|
throw new TypeError('Expected "Disjunction" node, got "' + node.type + '"');
|
|
}
|
|
|
|
var list = [];
|
|
|
|
if (node.left && node.left.type === 'Disjunction') {
|
|
list.push.apply(list, _toConsumableArray$7(disjunctionToList$1(node.left)).concat([node.right]));
|
|
} else {
|
|
list.push(node.left, node.right);
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
/**
|
|
* Builds a nested disjunction node from a list.
|
|
*
|
|
* /a|b|c|d/
|
|
*
|
|
* [a, b, c, d] -> {{{a, b}, c}, d}
|
|
*/
|
|
function listToDisjunction$1(list) {
|
|
return list.reduce(function (left, right) {
|
|
return {
|
|
type: 'Disjunction',
|
|
left: left,
|
|
right: right
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Increases a quantifier by one.
|
|
* Does not change greediness.
|
|
* * -> +
|
|
* + -> {2,}
|
|
* ? -> {1,2}
|
|
* {2} -> {3}
|
|
* {2,} -> {3,}
|
|
* {2,3} -> {3,4}
|
|
*/
|
|
function increaseQuantifierByOne$2(quantifier) {
|
|
if (quantifier.kind === '*') {
|
|
|
|
quantifier.kind = '+';
|
|
} else if (quantifier.kind === '+') {
|
|
|
|
quantifier.kind = 'Range';
|
|
quantifier.from = 2;
|
|
delete quantifier.to;
|
|
} else if (quantifier.kind === '?') {
|
|
|
|
quantifier.kind = 'Range';
|
|
quantifier.from = 1;
|
|
quantifier.to = 2;
|
|
} else if (quantifier.kind === 'Range') {
|
|
|
|
quantifier.from += 1;
|
|
if (quantifier.to) {
|
|
quantifier.to += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
var utils = {
|
|
disjunctionToList: disjunctionToList$1,
|
|
listToDisjunction: listToDisjunction$1,
|
|
increaseQuantifierByOne: increaseQuantifierByOne$2
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _require$8 = utils,
|
|
increaseQuantifierByOne$1 = _require$8.increaseQuantifierByOne;
|
|
|
|
/**
|
|
* A regexp-tree plugin to merge quantifiers
|
|
*
|
|
* a+a+ -> a{2,}
|
|
* a{2}a{3} -> a{5}
|
|
* a{1,2}a{2,3} -> a{3,5}
|
|
*/
|
|
|
|
|
|
var quantifiersMergeTransform = {
|
|
Repetition: function Repetition(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
|
|
if (parent.type !== 'Alternative' || !path.index) {
|
|
return;
|
|
}
|
|
|
|
var previousSibling = path.getPreviousSibling();
|
|
|
|
if (!previousSibling) {
|
|
return;
|
|
}
|
|
|
|
if (previousSibling.node.type === 'Repetition') {
|
|
if (!previousSibling.getChild().hasEqualSource(path.getChild())) {
|
|
return;
|
|
}
|
|
|
|
var _extractFromTo = extractFromTo(previousSibling.node.quantifier),
|
|
previousSiblingFrom = _extractFromTo.from,
|
|
previousSiblingTo = _extractFromTo.to;
|
|
|
|
var _extractFromTo2 = extractFromTo(node.quantifier),
|
|
nodeFrom = _extractFromTo2.from,
|
|
nodeTo = _extractFromTo2.to;
|
|
|
|
// It's does not seem reliable to merge quantifiers with different greediness
|
|
// when none of both is a greedy open range
|
|
|
|
|
|
if (previousSibling.node.quantifier.greedy !== node.quantifier.greedy && !isGreedyOpenRange(previousSibling.node.quantifier) && !isGreedyOpenRange(node.quantifier)) {
|
|
return;
|
|
}
|
|
|
|
// a*a* -> a*
|
|
// a*a+ -> a+
|
|
// a+a+ -> a{2,}
|
|
// a{2}a{4} -> a{6}
|
|
// a{1,2}a{2,3} -> a{3,5}
|
|
// a{1,}a{2,} -> a{3,}
|
|
// a+a{2,} -> a{3,}
|
|
|
|
// a??a{2,} -> a{2,}
|
|
// a*?a{2,} -> a{2,}
|
|
// a+?a{2,} -> a{3,}
|
|
|
|
node.quantifier.kind = 'Range';
|
|
node.quantifier.from = previousSiblingFrom + nodeFrom;
|
|
if (previousSiblingTo && nodeTo) {
|
|
node.quantifier.to = previousSiblingTo + nodeTo;
|
|
} else {
|
|
delete node.quantifier.to;
|
|
}
|
|
if (isGreedyOpenRange(previousSibling.node.quantifier) || isGreedyOpenRange(node.quantifier)) {
|
|
node.quantifier.greedy = true;
|
|
}
|
|
|
|
previousSibling.remove();
|
|
} else {
|
|
if (!previousSibling.hasEqualSource(path.getChild())) {
|
|
return;
|
|
}
|
|
|
|
increaseQuantifierByOne$1(node.quantifier);
|
|
previousSibling.remove();
|
|
}
|
|
}
|
|
};
|
|
|
|
function isGreedyOpenRange(quantifier) {
|
|
return quantifier.greedy && (quantifier.kind === '+' || quantifier.kind === '*' || quantifier.kind === 'Range' && !quantifier.to);
|
|
}
|
|
|
|
function extractFromTo(quantifier) {
|
|
var from = void 0,
|
|
to = void 0;
|
|
if (quantifier.kind === '*') {
|
|
from = 0;
|
|
} else if (quantifier.kind === '+') {
|
|
from = 1;
|
|
} else if (quantifier.kind === '?') {
|
|
from = 0;
|
|
to = 1;
|
|
} else {
|
|
from = quantifier.from;
|
|
if (quantifier.to) {
|
|
to = quantifier.to;
|
|
}
|
|
}
|
|
return { from: from, to: to };
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to replace different range-based quantifiers
|
|
* with their symbol equivalents.
|
|
*
|
|
* a{0,} -> a*
|
|
* a{1,} -> a+
|
|
* a{1} -> a
|
|
*
|
|
* NOTE: the following is automatically handled in the generator:
|
|
*
|
|
* a{3,3} -> a{3}
|
|
*/
|
|
|
|
var quantifierRangeToSymbolTransform = {
|
|
Quantifier: function Quantifier(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.kind !== 'Range') {
|
|
return;
|
|
}
|
|
|
|
// a{0,} -> a*
|
|
rewriteOpenZero(path);
|
|
|
|
// a{1,} -> a+
|
|
rewriteOpenOne(path);
|
|
|
|
// a{1} -> a
|
|
rewriteExactOne(path);
|
|
}
|
|
};
|
|
|
|
function rewriteOpenZero(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.from !== 0 || node.to) {
|
|
return;
|
|
}
|
|
|
|
node.kind = '*';
|
|
delete node.from;
|
|
}
|
|
|
|
function rewriteOpenOne(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.from !== 1 || node.to) {
|
|
return;
|
|
}
|
|
|
|
node.kind = '+';
|
|
delete node.from;
|
|
}
|
|
|
|
function rewriteExactOne(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.from !== 1 || node.to !== 1) {
|
|
return;
|
|
}
|
|
|
|
path.parentPath.replace(path.parentPath.node.expression);
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to simplify character classes
|
|
* spanning only one or two chars.
|
|
*
|
|
* [a-a] -> [a]
|
|
* [a-b] -> [ab]
|
|
*/
|
|
|
|
var charClassClassrangesToCharsTransform = {
|
|
ClassRange: function ClassRange(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.from.codePoint === node.to.codePoint) {
|
|
|
|
path.replace(node.from);
|
|
} else if (node.from.codePoint === node.to.codePoint - 1) {
|
|
|
|
path.getParent().insertChildAt(node.to, path.index + 1);
|
|
path.replace(node.from);
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to replace standard character classes with
|
|
* their meta symbols equivalents.
|
|
*/
|
|
|
|
function _toConsumableArray$6(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var charClassToMetaTransform = {
|
|
_hasIFlag: false,
|
|
_hasUFlag: false,
|
|
init: function init(ast) {
|
|
this._hasIFlag = ast.flags.includes('i');
|
|
this._hasUFlag = ast.flags.includes('u');
|
|
},
|
|
CharacterClass: function CharacterClass(path) {
|
|
// [0-9] -> \d
|
|
rewriteNumberRanges(path);
|
|
|
|
// [a-zA-Z_0-9] -> \w
|
|
rewriteWordRanges(path, this._hasIFlag, this._hasUFlag);
|
|
|
|
// [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] -> \s
|
|
rewriteWhitespaceRanges(path);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Rewrites number ranges: [0-9] -> \d
|
|
*/
|
|
function rewriteNumberRanges(path) {
|
|
var node = path.node;
|
|
|
|
|
|
node.expressions.forEach(function (expression, i) {
|
|
if (isFullNumberRange(expression)) {
|
|
path.getChild(i).replace({
|
|
type: 'Char',
|
|
value: '\\d',
|
|
kind: 'meta'
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Rewrites word ranges: [a-zA-Z_0-9] -> \w
|
|
* Thus, the ranges may go in any order, and other symbols/ranges
|
|
* are kept untouched, e.g. [a-z_\dA-Z$] -> [\w$]
|
|
*/
|
|
function rewriteWordRanges(path, hasIFlag, hasUFlag) {
|
|
var node = path.node;
|
|
|
|
|
|
var numberPath = null;
|
|
var lowerCasePath = null;
|
|
var upperCasePath = null;
|
|
var underscorePath = null;
|
|
var u017fPath = null;
|
|
var u212aPath = null;
|
|
|
|
node.expressions.forEach(function (expression, i) {
|
|
// \d
|
|
if (isMetaChar(expression, '\\d')) {
|
|
numberPath = path.getChild(i);
|
|
}
|
|
|
|
// a-z
|
|
else if (isLowerCaseRange(expression)) {
|
|
lowerCasePath = path.getChild(i);
|
|
}
|
|
|
|
// A-Z
|
|
else if (isUpperCaseRange(expression)) {
|
|
upperCasePath = path.getChild(i);
|
|
}
|
|
|
|
// _
|
|
else if (isUnderscore(expression)) {
|
|
underscorePath = path.getChild(i);
|
|
} else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x017f)) {
|
|
u017fPath = path.getChild(i);
|
|
} else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x212a)) {
|
|
u212aPath = path.getChild(i);
|
|
}
|
|
});
|
|
|
|
// If we found the whole pattern, replace it.
|
|
if (numberPath && (lowerCasePath && upperCasePath || hasIFlag && (lowerCasePath || upperCasePath)) && underscorePath && (!hasUFlag || !hasIFlag || u017fPath && u212aPath)) {
|
|
// Put \w in place of \d.
|
|
numberPath.replace({
|
|
type: 'Char',
|
|
value: '\\w',
|
|
kind: 'meta'
|
|
});
|
|
|
|
// Other paths are removed.
|
|
if (lowerCasePath) {
|
|
lowerCasePath.remove();
|
|
}
|
|
if (upperCasePath) {
|
|
upperCasePath.remove();
|
|
}
|
|
underscorePath.remove();
|
|
if (u017fPath) {
|
|
u017fPath.remove();
|
|
}
|
|
if (u212aPath) {
|
|
u212aPath.remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Rewrites whitespace ranges: [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] -> \s.
|
|
*/
|
|
var whitespaceRangeTests = [function (node) {
|
|
return isChar(node, ' ');
|
|
}].concat(_toConsumableArray$6(['\\f', '\\n', '\\r', '\\t', '\\v'].map(function (char) {
|
|
return function (node) {
|
|
return isMetaChar(node, char);
|
|
};
|
|
})), _toConsumableArray$6([0x00a0, 0x1680, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, 0xfeff].map(function (codePoint) {
|
|
return function (node) {
|
|
return isCodePoint(node, codePoint);
|
|
};
|
|
})), [function (node) {
|
|
return node.type === 'ClassRange' && isCodePoint(node.from, 0x2000) && isCodePoint(node.to, 0x200a);
|
|
}]);
|
|
|
|
function rewriteWhitespaceRanges(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.expressions.length < whitespaceRangeTests.length || !whitespaceRangeTests.every(function (test) {
|
|
return node.expressions.some(function (expression) {
|
|
return test(expression);
|
|
});
|
|
})) {
|
|
return;
|
|
}
|
|
|
|
// If we found the whole pattern, replace it.
|
|
|
|
// Put \s in place of \n.
|
|
var nNode = node.expressions.find(function (expression) {
|
|
return isMetaChar(expression, '\\n');
|
|
});
|
|
nNode.value = '\\s';
|
|
nNode.symbol = undefined;
|
|
nNode.codePoint = NaN;
|
|
|
|
// Other paths are removed.
|
|
node.expressions.map(function (expression, i) {
|
|
return whitespaceRangeTests.some(function (test) {
|
|
return test(expression);
|
|
}) ? path.getChild(i) : undefined;
|
|
}).filter(Boolean).forEach(function (path) {
|
|
return path.remove();
|
|
});
|
|
}
|
|
|
|
function isFullNumberRange(node) {
|
|
return node.type === 'ClassRange' && node.from.value === '0' && node.to.value === '9';
|
|
}
|
|
|
|
function isChar(node, value) {
|
|
var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'simple';
|
|
|
|
return node.type === 'Char' && node.value === value && node.kind === kind;
|
|
}
|
|
|
|
function isMetaChar(node, value) {
|
|
return isChar(node, value, 'meta');
|
|
}
|
|
|
|
function isLowerCaseRange(node) {
|
|
return node.type === 'ClassRange' && node.from.value === 'a' && node.to.value === 'z';
|
|
}
|
|
|
|
function isUpperCaseRange(node) {
|
|
return node.type === 'ClassRange' && node.from.value === 'A' && node.to.value === 'Z';
|
|
}
|
|
|
|
function isUnderscore(node) {
|
|
return node.type === 'Char' && node.value === '_' && node.kind === 'simple';
|
|
}
|
|
|
|
function isCodePoint(node, codePoint) {
|
|
return node.type === 'Char' && node.kind === 'unicode' && node.codePoint === codePoint;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to replace single char character classes with
|
|
* just that character.
|
|
*
|
|
* [\d] -> \d, [^\w] -> \W
|
|
*/
|
|
|
|
var charClassToSingleCharTransform = {
|
|
CharacterClass: function CharacterClass(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.expressions.length !== 1 || !hasAppropriateSiblings$1(path) || !isAppropriateChar(node.expressions[0])) {
|
|
return;
|
|
}
|
|
|
|
var _node$expressions$ = node.expressions[0],
|
|
value = _node$expressions$.value,
|
|
kind = _node$expressions$.kind,
|
|
escaped = _node$expressions$.escaped;
|
|
|
|
|
|
if (node.negative) {
|
|
// For negative can extract only meta chars like [^\w] -> \W
|
|
// cannot do for [^a] -> a (wrong).
|
|
if (!isMeta$1(value)) {
|
|
return;
|
|
}
|
|
|
|
value = getInverseMeta(value);
|
|
}
|
|
|
|
path.replace({
|
|
type: 'Char',
|
|
value: value,
|
|
kind: kind,
|
|
escaped: escaped || shouldEscape(value)
|
|
});
|
|
}
|
|
};
|
|
|
|
function isAppropriateChar(node) {
|
|
return node.type === 'Char' &&
|
|
// We don't extract [\b] (backspace) since \b has different
|
|
// semantics (word boundary).
|
|
node.value !== '\\b';
|
|
}
|
|
|
|
function isMeta$1(value) {
|
|
return (/^\\[dwsDWS]$/.test(value)
|
|
);
|
|
}
|
|
|
|
function getInverseMeta(value) {
|
|
return (/[dws]/.test(value) ? value.toUpperCase() : value.toLowerCase()
|
|
);
|
|
}
|
|
|
|
function hasAppropriateSiblings$1(path) {
|
|
var parent = path.parent,
|
|
index = path.index;
|
|
|
|
|
|
if (parent.type !== 'Alternative') {
|
|
return true;
|
|
}
|
|
|
|
var previousNode = parent.expressions[index - 1];
|
|
if (previousNode == null) {
|
|
return true;
|
|
}
|
|
|
|
// Don't optimized \1[0] to \10
|
|
if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {
|
|
return false;
|
|
}
|
|
|
|
// Don't optimized \2[0] to \20
|
|
if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// Note: \{ and \} are always preserved to avoid `a[{]2[}]` turning
|
|
// into `a{2}`.
|
|
function shouldEscape(value) {
|
|
return (/[*[()+?$./{}|]/.test(value)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove unnecessary escape.
|
|
*
|
|
* \e -> e
|
|
*
|
|
* [\(] -> [(]
|
|
*/
|
|
|
|
var charEscapeUnescapeTransform = {
|
|
_hasXFlag: false,
|
|
init: function init(ast) {
|
|
this._hasXFlag = ast.flags.includes('x');
|
|
},
|
|
Char: function Char(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (!node.escaped) {
|
|
return;
|
|
}
|
|
|
|
if (shouldUnescape(path, this._hasXFlag)) {
|
|
delete node.escaped;
|
|
}
|
|
}
|
|
};
|
|
|
|
function shouldUnescape(path, hasXFlag) {
|
|
var value = path.node.value,
|
|
index = path.index,
|
|
parent = path.parent;
|
|
|
|
// In char class (, etc are allowed.
|
|
|
|
if (parent.type !== 'CharacterClass' && parent.type !== 'ClassRange') {
|
|
return !preservesEscape(value, index, parent, hasXFlag);
|
|
}
|
|
|
|
return !preservesInCharClass(value, index, parent);
|
|
}
|
|
|
|
/**
|
|
* \], \\, \^, \-
|
|
*/
|
|
function preservesInCharClass(value, index, parent) {
|
|
if (value === '^') {
|
|
// Avoid [\^a] turning into [^a]
|
|
return index === 0 && !parent.negative;
|
|
}
|
|
if (value === '-') {
|
|
// Avoid [a\-z] turning into [a-z]
|
|
return true;
|
|
}
|
|
return (/[\]\\]/.test(value)
|
|
);
|
|
}
|
|
|
|
function preservesEscape(value, index, parent, hasXFlag) {
|
|
if (value === '{') {
|
|
return preservesOpeningCurlyBraceEscape(index, parent);
|
|
}
|
|
|
|
if (value === '}') {
|
|
return preservesClosingCurlyBraceEscape(index, parent);
|
|
}
|
|
|
|
if (hasXFlag && /[ #]/.test(value)) {
|
|
return true;
|
|
}
|
|
|
|
return (/[*[()+?^$./\\|]/.test(value)
|
|
);
|
|
}
|
|
|
|
function consumeNumbers(startIndex, parent, rtl) {
|
|
var i = startIndex;
|
|
var siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];
|
|
|
|
while (siblingNode && siblingNode.type === 'Char' && siblingNode.kind === 'simple' && !siblingNode.escaped && /\d/.test(siblingNode.value)) {
|
|
rtl ? i-- : i++;
|
|
siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];
|
|
}
|
|
|
|
return Math.abs(startIndex - i);
|
|
}
|
|
|
|
function isSimpleChar(node, value) {
|
|
return node && node.type === 'Char' && node.kind === 'simple' && !node.escaped && node.value === value;
|
|
}
|
|
|
|
function preservesOpeningCurlyBraceEscape(index, parent) {
|
|
// (?:\{) -> (?:{)
|
|
if (index == null) {
|
|
return false;
|
|
}
|
|
|
|
var nbFollowingNumbers = consumeNumbers(index + 1, parent);
|
|
var i = index + nbFollowingNumbers + 1;
|
|
var nextSiblingNode = i < parent.expressions.length && parent.expressions[i];
|
|
|
|
if (nbFollowingNumbers) {
|
|
// Avoid \{3} turning into {3}
|
|
if (isSimpleChar(nextSiblingNode, '}')) {
|
|
return true;
|
|
}
|
|
|
|
if (isSimpleChar(nextSiblingNode, ',')) {
|
|
nbFollowingNumbers = consumeNumbers(i + 1, parent);
|
|
i = i + nbFollowingNumbers + 1;
|
|
nextSiblingNode = i < parent.expressions.length && parent.expressions[i];
|
|
|
|
// Avoid \{3,} turning into {3,}
|
|
return isSimpleChar(nextSiblingNode, '}');
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function preservesClosingCurlyBraceEscape(index, parent) {
|
|
// (?:\{) -> (?:{)
|
|
if (index == null) {
|
|
return false;
|
|
}
|
|
|
|
var nbPrecedingNumbers = consumeNumbers(index - 1, parent, true);
|
|
var i = index - nbPrecedingNumbers - 1;
|
|
var previousSiblingNode = i >= 0 && parent.expressions[i];
|
|
|
|
// Avoid {3\} turning into {3}
|
|
if (nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{')) {
|
|
return true;
|
|
}
|
|
|
|
if (isSimpleChar(previousSiblingNode, ',')) {
|
|
nbPrecedingNumbers = consumeNumbers(i - 1, parent, true);
|
|
i = i - nbPrecedingNumbers - 1;
|
|
previousSiblingNode = i < parent.expressions.length && parent.expressions[i];
|
|
|
|
// Avoid {3,\} turning into {3,}
|
|
return nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{');
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to merge class ranges.
|
|
*
|
|
* [a-ec] -> [a-e]
|
|
* [a-ec-e] -> [a-e]
|
|
* [\w\da-f] -> [\w]
|
|
* [abcdef] -> [a-f]
|
|
*/
|
|
|
|
var charClassClassrangesMergeTransform = {
|
|
_hasIUFlags: false,
|
|
init: function init(ast) {
|
|
this._hasIUFlags = ast.flags.includes('i') && ast.flags.includes('u');
|
|
},
|
|
CharacterClass: function CharacterClass(path) {
|
|
var node = path.node;
|
|
|
|
var expressions = node.expressions;
|
|
|
|
var metas = [];
|
|
// Extract metas
|
|
expressions.forEach(function (expression) {
|
|
if (isMeta(expression)) {
|
|
metas.push(expression.value);
|
|
}
|
|
});
|
|
|
|
expressions.sort(sortCharClass);
|
|
|
|
for (var i = 0; i < expressions.length; i++) {
|
|
var expression = expressions[i];
|
|
if (fitsInMetas(expression, metas, this._hasIUFlags) || combinesWithPrecedingClassRange(expression, expressions[i - 1]) || combinesWithFollowingClassRange(expression, expressions[i + 1])) {
|
|
expressions.splice(i, 1);
|
|
i--;
|
|
} else {
|
|
var nbMergedChars = charCombinesWithPrecedingChars(expression, i, expressions);
|
|
expressions.splice(i - nbMergedChars + 1, nbMergedChars);
|
|
i -= nbMergedChars;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Sorts expressions in char class in the following order:
|
|
* - meta chars, ordered alphabetically by value
|
|
* - chars (except `control` kind) and class ranges, ordered alphabetically (`from` char is used for class ranges)
|
|
* - if ambiguous, class range comes before char
|
|
* - if ambiguous between two class ranges, orders alphabetically by `to` char
|
|
* - control chars, ordered alphabetically by value
|
|
* @param {Object} a - Left Char or ClassRange node
|
|
* @param {Object} b - Right Char or ClassRange node
|
|
* @returns {number}
|
|
*/
|
|
function sortCharClass(a, b) {
|
|
var aValue = getSortValue(a);
|
|
var bValue = getSortValue(b);
|
|
|
|
if (aValue === bValue) {
|
|
// We want ClassRange before Char
|
|
// [bb-d] -> [b-db]
|
|
if (a.type === 'ClassRange' && b.type !== 'ClassRange') {
|
|
return -1;
|
|
}
|
|
if (b.type === 'ClassRange' && a.type !== 'ClassRange') {
|
|
return 1;
|
|
}
|
|
if (a.type === 'ClassRange' && b.type === 'ClassRange') {
|
|
return getSortValue(a.to) - getSortValue(b.to);
|
|
}
|
|
if (isMeta(a) && isMeta(b) || isControl(a) && isControl(b)) {
|
|
return a.value < b.value ? -1 : 1;
|
|
}
|
|
}
|
|
return aValue - bValue;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @returns {number}
|
|
*/
|
|
function getSortValue(expression) {
|
|
if (expression.type === 'Char') {
|
|
if (expression.value === '-') {
|
|
return Infinity;
|
|
}
|
|
if (expression.kind === 'control') {
|
|
return Infinity;
|
|
}
|
|
if (expression.kind === 'meta' && isNaN(expression.codePoint)) {
|
|
return -1;
|
|
}
|
|
return expression.codePoint;
|
|
}
|
|
// ClassRange
|
|
return expression.from.codePoint;
|
|
}
|
|
|
|
/**
|
|
* Checks if a node is a meta char from the set \d\w\s\D\W\S
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {?string} value
|
|
* @returns {boolean}
|
|
*/
|
|
function isMeta(expression) {
|
|
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
|
|
return expression.type === 'Char' && expression.kind === 'meta' && (value ? expression.value === value : /^\\[dws]$/i.test(expression.value));
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @returns {boolean}
|
|
*/
|
|
function isControl(expression) {
|
|
return expression.type === 'Char' && expression.kind === 'control';
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {string[]} metas - Array of meta chars, e.g. ["\\w", "\\s"]
|
|
* @param {boolean} hasIUFlags
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMetas(expression, metas, hasIUFlags) {
|
|
for (var i = 0; i < metas.length; i++) {
|
|
if (fitsInMeta(expression, metas[i], hasIUFlags)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {string} meta - e.g. "\\w"
|
|
* @param {boolean} hasIUFlags
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMeta(expression, meta, hasIUFlags) {
|
|
if (expression.type === 'ClassRange') {
|
|
return fitsInMeta(expression.from, meta, hasIUFlags) && fitsInMeta(expression.to, meta, hasIUFlags);
|
|
}
|
|
|
|
// Special cases:
|
|
// \S contains \w and \d
|
|
if (meta === '\\S' && (isMeta(expression, '\\w') || isMeta(expression, '\\d'))) {
|
|
return true;
|
|
}
|
|
// \D contains \W and \s
|
|
if (meta === '\\D' && (isMeta(expression, '\\W') || isMeta(expression, '\\s'))) {
|
|
return true;
|
|
}
|
|
// \w contains \d
|
|
if (meta === '\\w' && isMeta(expression, '\\d')) {
|
|
return true;
|
|
}
|
|
// \W contains \s
|
|
if (meta === '\\W' && isMeta(expression, '\\s')) {
|
|
return true;
|
|
}
|
|
|
|
if (expression.type !== 'Char' || isNaN(expression.codePoint)) {
|
|
return false;
|
|
}
|
|
|
|
if (meta === '\\s') {
|
|
return fitsInMetaS(expression);
|
|
}
|
|
if (meta === '\\S') {
|
|
return !fitsInMetaS(expression);
|
|
}
|
|
if (meta === '\\d') {
|
|
return fitsInMetaD(expression);
|
|
}
|
|
if (meta === '\\D') {
|
|
return !fitsInMetaD(expression);
|
|
}
|
|
if (meta === '\\w') {
|
|
return fitsInMetaW(expression, hasIUFlags);
|
|
}
|
|
if (meta === '\\W') {
|
|
return !fitsInMetaW(expression, hasIUFlags);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char node with codePoint
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMetaS(expression) {
|
|
return expression.codePoint === 0x0009 || // \t
|
|
expression.codePoint === 0x000a || // \n
|
|
expression.codePoint === 0x000b || // \v
|
|
expression.codePoint === 0x000c || // \f
|
|
expression.codePoint === 0x000d || // \r
|
|
expression.codePoint === 0x0020 || // space
|
|
expression.codePoint === 0x00a0 || // nbsp
|
|
expression.codePoint === 0x1680 || // part of Zs
|
|
expression.codePoint >= 0x2000 && expression.codePoint <= 0x200a || // part of Zs
|
|
expression.codePoint === 0x2028 || // line separator
|
|
expression.codePoint === 0x2029 || // paragraph separator
|
|
expression.codePoint === 0x202f || // part of Zs
|
|
expression.codePoint === 0x205f || // part of Zs
|
|
expression.codePoint === 0x3000 || // part of Zs
|
|
expression.codePoint === 0xfeff; // zwnbsp
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char node with codePoint
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMetaD(expression) {
|
|
return expression.codePoint >= 0x30 && expression.codePoint <= 0x39; // 0-9
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char node with codePoint
|
|
* @param {boolean} hasIUFlags
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMetaW(expression, hasIUFlags) {
|
|
return fitsInMetaD(expression) || expression.codePoint >= 0x41 && expression.codePoint <= 0x5a || // A-Z
|
|
expression.codePoint >= 0x61 && expression.codePoint <= 0x7a || // a-z
|
|
expression.value === '_' || hasIUFlags && (expression.codePoint === 0x017f || expression.codePoint === 0x212a);
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {Object} classRange - Char or ClassRange node
|
|
* @returns {boolean}
|
|
*/
|
|
function combinesWithPrecedingClassRange(expression, classRange) {
|
|
if (classRange && classRange.type === 'ClassRange') {
|
|
if (fitsInClassRange(expression, classRange)) {
|
|
// [a-gc] -> [a-g]
|
|
// [a-gc-e] -> [a-g]
|
|
return true;
|
|
} else if (
|
|
// We only want \w chars or char codes to keep readability
|
|
isMetaWCharOrCode(expression) && classRange.to.codePoint === expression.codePoint - 1) {
|
|
// [a-de] -> [a-e]
|
|
classRange.to = expression;
|
|
return true;
|
|
} else if (expression.type === 'ClassRange' && expression.from.codePoint <= classRange.to.codePoint + 1 && expression.to.codePoint >= classRange.from.codePoint - 1) {
|
|
// [a-db-f] -> [a-f]
|
|
// [b-fa-d] -> [a-f]
|
|
// [a-cd-f] -> [a-f]
|
|
if (expression.from.codePoint < classRange.from.codePoint) {
|
|
classRange.from = expression.from;
|
|
}
|
|
if (expression.to.codePoint > classRange.to.codePoint) {
|
|
classRange.to = expression.to;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {Object} classRange - Char or ClassRange node
|
|
* @returns {boolean}
|
|
*/
|
|
function combinesWithFollowingClassRange(expression, classRange) {
|
|
if (classRange && classRange.type === 'ClassRange') {
|
|
// Considering the elements were ordered alphabetically,
|
|
// there is only one case to handle
|
|
// [ab-e] -> [a-e]
|
|
if (
|
|
// We only want \w chars or char codes to keep readability
|
|
isMetaWCharOrCode(expression) && classRange.from.codePoint === expression.codePoint + 1) {
|
|
classRange.from = expression;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {Object} classRange - ClassRange node
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInClassRange(expression, classRange) {
|
|
if (expression.type === 'Char' && isNaN(expression.codePoint)) {
|
|
return false;
|
|
}
|
|
if (expression.type === 'ClassRange') {
|
|
return fitsInClassRange(expression.from, classRange) && fitsInClassRange(expression.to, classRange);
|
|
}
|
|
return expression.codePoint >= classRange.from.codePoint && expression.codePoint <= classRange.to.codePoint;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {Number} index
|
|
* @param {Object[]} expressions - expressions in CharClass
|
|
* @returns {number} - Number of characters combined with expression
|
|
*/
|
|
function charCombinesWithPrecedingChars(expression, index, expressions) {
|
|
// We only want \w chars or char codes to keep readability
|
|
if (!isMetaWCharOrCode(expression)) {
|
|
return 0;
|
|
}
|
|
var nbMergedChars = 0;
|
|
while (index > 0) {
|
|
var currentExpression = expressions[index];
|
|
var precedingExpresion = expressions[index - 1];
|
|
if (isMetaWCharOrCode(precedingExpresion) && precedingExpresion.codePoint === currentExpression.codePoint - 1) {
|
|
nbMergedChars++;
|
|
index--;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (nbMergedChars > 1) {
|
|
expressions[index] = {
|
|
type: 'ClassRange',
|
|
from: expressions[index],
|
|
to: expression
|
|
};
|
|
return nbMergedChars;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function isMetaWCharOrCode(expression) {
|
|
return expression && expression.type === 'Char' && !isNaN(expression.codePoint) && (fitsInMetaW(expression, false) || expression.kind === 'unicode' || expression.kind === 'hex' || expression.kind === 'oct' || expression.kind === 'decimal');
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var NodePath$1 = nodePath;
|
|
|
|
var _require$7 = utils,
|
|
disjunctionToList = _require$7.disjunctionToList,
|
|
listToDisjunction = _require$7.listToDisjunction;
|
|
|
|
/**
|
|
* Removes duplicates from a disjunction sequence:
|
|
*
|
|
* /(ab|bc|ab)+(xy|xy)+/ -> /(ab|bc)+(xy)+/
|
|
*/
|
|
|
|
|
|
var disjunctionRemoveDuplicatesTransform = {
|
|
Disjunction: function Disjunction(path) {
|
|
var node = path.node;
|
|
|
|
// Make unique nodes.
|
|
|
|
var uniqueNodesMap = {};
|
|
|
|
var parts = disjunctionToList(node).filter(function (part) {
|
|
var encoded = part ? NodePath$1.getForNode(part).jsonEncode() : 'null';
|
|
|
|
// Already recorded this part, filter out.
|
|
if (uniqueNodesMap.hasOwnProperty(encoded)) {
|
|
return false;
|
|
}
|
|
|
|
uniqueNodesMap[encoded] = part;
|
|
return true;
|
|
});
|
|
|
|
// Replace with the optimized disjunction.
|
|
path.replace(listToDisjunction(parts));
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to replace single char group disjunction to char group
|
|
*
|
|
* a|b|c -> [abc]
|
|
* [12]|3|4 -> [1234]
|
|
* (a|b|c) -> ([abc])
|
|
* (?:a|b|c) -> [abc]
|
|
*/
|
|
|
|
var groupSingleCharsToCharClass = {
|
|
Disjunction: function Disjunction(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
|
|
if (!handlers[parent.type]) {
|
|
return;
|
|
}
|
|
|
|
var charset = new Map();
|
|
|
|
if (!shouldProcess(node, charset) || !charset.size) {
|
|
return;
|
|
}
|
|
|
|
var characterClass = {
|
|
type: 'CharacterClass',
|
|
expressions: Array.from(charset.keys()).sort().map(function (key) {
|
|
return charset.get(key);
|
|
})
|
|
};
|
|
|
|
handlers[parent.type](path.getParent(), characterClass);
|
|
}
|
|
};
|
|
|
|
var handlers = {
|
|
RegExp: function RegExp(path, characterClass) {
|
|
var node = path.node;
|
|
|
|
|
|
node.body = characterClass;
|
|
},
|
|
Group: function Group(path, characterClass) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.capturing) {
|
|
node.expression = characterClass;
|
|
} else {
|
|
path.replace(characterClass);
|
|
}
|
|
}
|
|
};
|
|
|
|
function shouldProcess(expression, charset) {
|
|
if (!expression) {
|
|
// Abort on empty disjunction part
|
|
return false;
|
|
}
|
|
|
|
var type = expression.type;
|
|
|
|
|
|
if (type === 'Disjunction') {
|
|
var left = expression.left,
|
|
right = expression.right;
|
|
|
|
|
|
return shouldProcess(left, charset) && shouldProcess(right, charset);
|
|
} else if (type === 'Char') {
|
|
if (expression.kind === 'meta' && expression.symbol === '.') {
|
|
return false;
|
|
}
|
|
|
|
var value = expression.value;
|
|
|
|
|
|
charset.set(value, expression);
|
|
|
|
return true;
|
|
} else if (type === 'CharacterClass' && !expression.negative) {
|
|
return expression.expressions.every(function (expression) {
|
|
return shouldProcess(expression, charset);
|
|
});
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove non-capturing empty groups.
|
|
*
|
|
* /(?:)a/ -> /a/
|
|
* /a|(?:)/ -> /a|/
|
|
*/
|
|
|
|
var removeEmptyGroupTransform = {
|
|
Group: function Group(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
var childPath = path.getChild();
|
|
|
|
if (node.capturing || childPath) {
|
|
return;
|
|
}
|
|
|
|
if (parent.type === 'Repetition') {
|
|
|
|
path.getParent().replace(node);
|
|
} else if (parent.type !== 'RegExp') {
|
|
|
|
path.remove();
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove unnecessary groups.
|
|
*
|
|
* /(?:a)/ -> /a/
|
|
*/
|
|
|
|
function _toConsumableArray$5(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var ungroupTransform = {
|
|
Group: function Group(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
var childPath = path.getChild();
|
|
|
|
if (node.capturing || !childPath) {
|
|
return;
|
|
}
|
|
|
|
// Don't optimize \1(?:0) to \10
|
|
if (!hasAppropriateSiblings(path)) {
|
|
return;
|
|
}
|
|
|
|
// Don't optimize /a(?:b|c)/ to /ab|c/
|
|
// but /(?:b|c)/ to /b|c/ is ok
|
|
if (childPath.node.type === 'Disjunction' && parent.type !== 'RegExp') {
|
|
return;
|
|
}
|
|
|
|
// Don't optimize /(?:ab)+/ to /ab+/
|
|
// but /(?:a)+/ to /a+/ is ok
|
|
// and /(?:[a-d])+/ to /[a-d]+/ is ok too
|
|
if (parent.type === 'Repetition' && childPath.node.type !== 'Char' && childPath.node.type !== 'CharacterClass') {
|
|
return;
|
|
}
|
|
|
|
if (childPath.node.type === 'Alternative') {
|
|
var parentPath = path.getParent();
|
|
if (parentPath.node.type === 'Alternative') {
|
|
// /abc(?:def)ghi/ When (?:def) is ungrouped its content must be merged with parent alternative
|
|
|
|
parentPath.replace({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$5(parent.expressions.slice(0, path.index)), _toConsumableArray$5(childPath.node.expressions), _toConsumableArray$5(parent.expressions.slice(path.index + 1)))
|
|
});
|
|
}
|
|
} else {
|
|
path.replace(childPath.node);
|
|
}
|
|
}
|
|
};
|
|
|
|
function hasAppropriateSiblings(path) {
|
|
var parent = path.parent,
|
|
index = path.index;
|
|
|
|
|
|
if (parent.type !== 'Alternative') {
|
|
return true;
|
|
}
|
|
|
|
var previousNode = parent.expressions[index - 1];
|
|
if (previousNode == null) {
|
|
return true;
|
|
}
|
|
|
|
// Don't optimized \1(?:0) to \10
|
|
if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {
|
|
return false;
|
|
}
|
|
|
|
// Don't optimized \2(?:0) to \20
|
|
if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
function _toConsumableArray$4(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var NodePath = nodePath;
|
|
|
|
var _require$6 = utils,
|
|
increaseQuantifierByOne = _require$6.increaseQuantifierByOne;
|
|
|
|
/**
|
|
* A regexp-tree plugin to combine repeating patterns.
|
|
*
|
|
* /^abcabcabc/ -> /^abc{3}/
|
|
* /^(?:abc){2}abc/ -> /^(?:abc){3}/
|
|
* /^abc(?:abc){2}/ -> /^(?:abc){3}/
|
|
*/
|
|
|
|
var combineRepeatingPatternsTransform = {
|
|
Alternative: function Alternative(path) {
|
|
var node = path.node;
|
|
|
|
// We can skip the first child
|
|
|
|
var index = 1;
|
|
while (index < node.expressions.length) {
|
|
var child = path.getChild(index);
|
|
index = Math.max(1, combineRepeatingPatternLeft(path, child, index));
|
|
|
|
if (index >= node.expressions.length) {
|
|
break;
|
|
}
|
|
|
|
child = path.getChild(index);
|
|
index = Math.max(1, combineWithPreviousRepetition(path, child, index));
|
|
|
|
if (index >= node.expressions.length) {
|
|
break;
|
|
}
|
|
|
|
child = path.getChild(index);
|
|
index = Math.max(1, combineRepetitionWithPrevious(path, child, index));
|
|
|
|
index++;
|
|
}
|
|
}
|
|
};
|
|
|
|
// abcabc -> (?:abc){2}
|
|
function combineRepeatingPatternLeft(alternative, child, index) {
|
|
var node = alternative.node;
|
|
|
|
|
|
var nbPossibleLengths = Math.ceil(index / 2);
|
|
var i = 0;
|
|
|
|
while (i < nbPossibleLengths) {
|
|
var startIndex = index - 2 * i - 1;
|
|
var right = void 0,
|
|
left = void 0;
|
|
|
|
if (i === 0) {
|
|
right = child;
|
|
left = alternative.getChild(startIndex);
|
|
} else {
|
|
right = NodePath.getForNode({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$4(node.expressions.slice(index - i, index)), [child.node])
|
|
});
|
|
|
|
left = NodePath.getForNode({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$4(node.expressions.slice(startIndex, index - i)))
|
|
});
|
|
}
|
|
|
|
if (right.hasEqualSource(left)) {
|
|
for (var j = 0; j < 2 * i + 1; j++) {
|
|
alternative.getChild(startIndex).remove();
|
|
}
|
|
|
|
child.replace({
|
|
type: 'Repetition',
|
|
expression: i === 0 && right.node.type !== 'Repetition' ? right.node : {
|
|
type: 'Group',
|
|
capturing: false,
|
|
expression: right.node
|
|
},
|
|
quantifier: {
|
|
type: 'Quantifier',
|
|
kind: 'Range',
|
|
from: 2,
|
|
to: 2,
|
|
greedy: true
|
|
}
|
|
});
|
|
return startIndex;
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
return index;
|
|
}
|
|
|
|
// (?:abc){2}abc -> (?:abc){3}
|
|
function combineWithPreviousRepetition(alternative, child, index) {
|
|
var node = alternative.node;
|
|
|
|
|
|
var i = 0;
|
|
while (i < index) {
|
|
var previousChild = alternative.getChild(i);
|
|
|
|
if (previousChild.node.type === 'Repetition' && previousChild.node.quantifier.greedy) {
|
|
var left = previousChild.getChild();
|
|
var right = void 0;
|
|
|
|
if (left.node.type === 'Group' && !left.node.capturing) {
|
|
left = left.getChild();
|
|
}
|
|
|
|
if (i + 1 === index) {
|
|
right = child;
|
|
if (right.node.type === 'Group' && !right.node.capturing) {
|
|
right = right.getChild();
|
|
}
|
|
} else {
|
|
right = NodePath.getForNode({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$4(node.expressions.slice(i + 1, index + 1)))
|
|
});
|
|
}
|
|
|
|
if (left.hasEqualSource(right)) {
|
|
for (var j = i; j < index; j++) {
|
|
alternative.getChild(i + 1).remove();
|
|
}
|
|
|
|
increaseQuantifierByOne(previousChild.node.quantifier);
|
|
|
|
return i;
|
|
}
|
|
}
|
|
|
|
i++;
|
|
}
|
|
return index;
|
|
}
|
|
|
|
// abc(?:abc){2} -> (?:abc){3}
|
|
function combineRepetitionWithPrevious(alternative, child, index) {
|
|
var node = alternative.node;
|
|
|
|
|
|
if (child.node.type === 'Repetition' && child.node.quantifier.greedy) {
|
|
var right = child.getChild();
|
|
var left = void 0;
|
|
|
|
if (right.node.type === 'Group' && !right.node.capturing) {
|
|
right = right.getChild();
|
|
}
|
|
|
|
var rightLength = void 0;
|
|
if (right.node.type === 'Alternative') {
|
|
rightLength = right.node.expressions.length;
|
|
left = NodePath.getForNode({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$4(node.expressions.slice(index - rightLength, index)))
|
|
});
|
|
} else {
|
|
rightLength = 1;
|
|
left = alternative.getChild(index - 1);
|
|
if (left.node.type === 'Group' && !left.node.capturing) {
|
|
left = left.getChild();
|
|
}
|
|
}
|
|
|
|
if (left.hasEqualSource(right)) {
|
|
for (var j = index - rightLength; j < index; j++) {
|
|
alternative.getChild(index - rightLength).remove();
|
|
}
|
|
|
|
increaseQuantifierByOne(child.node.quantifier);
|
|
|
|
return index - rightLength;
|
|
}
|
|
}
|
|
return index;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var transforms = new Map([
|
|
// \ud83d\ude80 -> \u{1f680}
|
|
['charSurrogatePairToSingleUnicode', charSurrogatePairToSingleUnicodeTransform],
|
|
|
|
// \u0061 -> a
|
|
['charCodeToSimpleChar', charCodeToSimpleCharTransform],
|
|
|
|
// /Aa/i -> /aa/i
|
|
['charCaseInsensitiveLowerCaseTransform', charCaseInsensitiveLowercaseTransform],
|
|
|
|
// [\d\d] -> [\d]
|
|
['charClassRemoveDuplicates', charClassRemoveDuplicatesTransform],
|
|
|
|
// a{1,2}a{2,3} -> a{3,5}
|
|
['quantifiersMerge', quantifiersMergeTransform],
|
|
|
|
// a{1,} -> a+, a{3,3} -> a{3}, a{1} -> a
|
|
['quantifierRangeToSymbol', quantifierRangeToSymbolTransform],
|
|
|
|
// [a-a] -> [a], [a-b] -> [ab]
|
|
['charClassClassrangesToChars', charClassClassrangesToCharsTransform],
|
|
|
|
// [0-9] -> [\d]
|
|
['charClassToMeta', charClassToMetaTransform],
|
|
|
|
// [\d] -> \d, [^\w] -> \W
|
|
['charClassToSingleChar', charClassToSingleCharTransform],
|
|
|
|
// \e -> e
|
|
['charEscapeUnescape', charEscapeUnescapeTransform],
|
|
|
|
// [a-de-f] -> [a-f]
|
|
['charClassClassrangesMerge', charClassClassrangesMergeTransform],
|
|
|
|
// (ab|ab) -> (ab)
|
|
['disjunctionRemoveDuplicates', disjunctionRemoveDuplicatesTransform],
|
|
|
|
// (a|b|c) -> [abc]
|
|
['groupSingleCharsToCharClass', groupSingleCharsToCharClass],
|
|
|
|
// (?:)a -> a
|
|
['removeEmptyGroup', removeEmptyGroupTransform],
|
|
|
|
// (?:a) -> a
|
|
['ungroup', ungroupTransform],
|
|
|
|
// abcabcabc -> (?:abc){3}
|
|
['combineRepeatingPatterns', combineRepeatingPatternsTransform]]);
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var clone = clone$1;
|
|
var parser$2 = parser$4;
|
|
var transform = transform$1;
|
|
var optimizationTransforms = transforms;
|
|
|
|
var optimizer$1 = {
|
|
/**
|
|
* Optimizer transforms a regular expression into an optimized version,
|
|
* replacing some sub-expressions with their idiomatic patterns.
|
|
*
|
|
* @param string | RegExp | AST - a regexp to optimize.
|
|
*
|
|
* @return TransformResult - an optimized regexp.
|
|
*
|
|
* Example:
|
|
*
|
|
* /[a-zA-Z_0-9][a-zA-Z_0-9]*\e{1,}/
|
|
*
|
|
* Optimized to:
|
|
*
|
|
* /\w+e+/
|
|
*/
|
|
optimize: function optimize(regexp) {
|
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
_ref$whitelist = _ref.whitelist,
|
|
whitelist = _ref$whitelist === undefined ? [] : _ref$whitelist,
|
|
_ref$blacklist = _ref.blacklist,
|
|
blacklist = _ref$blacklist === undefined ? [] : _ref$blacklist;
|
|
|
|
var transformsRaw = whitelist.length > 0 ? whitelist : Array.from(optimizationTransforms.keys());
|
|
|
|
var transformToApply = transformsRaw.filter(function (transform) {
|
|
return !blacklist.includes(transform);
|
|
});
|
|
|
|
var ast = regexp;
|
|
if (regexp instanceof RegExp) {
|
|
regexp = '' + regexp;
|
|
}
|
|
|
|
if (typeof regexp === 'string') {
|
|
ast = parser$2.parse(regexp);
|
|
}
|
|
|
|
var result = new transform.TransformResult(ast);
|
|
var prevResultString = void 0;
|
|
|
|
do {
|
|
// Get a copy of the current state here so
|
|
// we can compare it with the state at the
|
|
// end of the loop.
|
|
prevResultString = result.toString();
|
|
ast = clone(result.getAST());
|
|
|
|
transformToApply.forEach(function (transformName) {
|
|
if (!optimizationTransforms.has(transformName)) {
|
|
throw new Error('Unknown optimization-transform: ' + transformName + '. ' + 'Available transforms are: ' + Array.from(optimizationTransforms.keys()).join(', '));
|
|
}
|
|
|
|
var transformer = optimizationTransforms.get(transformName);
|
|
|
|
// Don't override result just yet since we
|
|
// might want to rollback the transform
|
|
var newResult = transform.transform(ast, transformer);
|
|
|
|
if (newResult.toString() !== result.toString()) {
|
|
if (newResult.toString().length <= result.toString().length) {
|
|
result = newResult;
|
|
} else {
|
|
// Result has changed but is not shorter:
|
|
// restore ast to its previous state.
|
|
|
|
ast = clone(result.getAST());
|
|
}
|
|
}
|
|
});
|
|
|
|
// Keep running the optimizer until it stops
|
|
// making any change to the regexp.
|
|
} while (result.toString() !== prevResultString);
|
|
|
|
return result;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* Epsilon, the empty string.
|
|
*/
|
|
|
|
var EPSILON$3 = 'ε';
|
|
|
|
/**
|
|
* Epsilon-closure.
|
|
*/
|
|
var EPSILON_CLOSURE$2 = EPSILON$3 + '*';
|
|
|
|
var specialSymbols = {
|
|
EPSILON: EPSILON$3,
|
|
EPSILON_CLOSURE: EPSILON_CLOSURE$2
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _slicedToArray$1 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
|
|
|
var _createClass$4 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _toConsumableArray$3(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
function _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var _require$5 = specialSymbols,
|
|
EPSILON$2 = _require$5.EPSILON,
|
|
EPSILON_CLOSURE$1 = _require$5.EPSILON_CLOSURE;
|
|
|
|
/**
|
|
* NFA fragment.
|
|
*
|
|
* NFA sub-fragments can be combined to a larger NFAs building
|
|
* the resulting machine. Combining the fragments is done by patching
|
|
* edges of the in- and out-states.
|
|
*
|
|
* 2-states implementation, `in`, and `out`. Eventually all transitions
|
|
* go to the same `out`, which can further be connected via ε-transition
|
|
* with other fragment.
|
|
*/
|
|
|
|
|
|
var NFA$2 = function () {
|
|
function NFA(inState, outState) {
|
|
_classCallCheck$4(this, NFA);
|
|
|
|
this.in = inState;
|
|
this.out = outState;
|
|
}
|
|
|
|
/**
|
|
* Tries to recognize a string based on this NFA fragment.
|
|
*/
|
|
|
|
|
|
_createClass$4(NFA, [{
|
|
key: 'matches',
|
|
value: function matches(string) {
|
|
return this.in.matches(string);
|
|
}
|
|
|
|
/**
|
|
* Returns an alphabet for this NFA.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAlphabet',
|
|
value: function getAlphabet() {
|
|
if (!this._alphabet) {
|
|
this._alphabet = new Set();
|
|
var table = this.getTransitionTable();
|
|
for (var state in table) {
|
|
var transitions = table[state];
|
|
for (var symbol in transitions) {
|
|
if (symbol !== EPSILON_CLOSURE$1) {
|
|
this._alphabet.add(symbol);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return this._alphabet;
|
|
}
|
|
|
|
/**
|
|
* Returns set of accepting states.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAcceptingStates',
|
|
value: function getAcceptingStates() {
|
|
if (!this._acceptingStates) {
|
|
// States are determined during table construction.
|
|
this.getTransitionTable();
|
|
}
|
|
return this._acceptingStates;
|
|
}
|
|
|
|
/**
|
|
* Returns accepting state numbers.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAcceptingStateNumbers',
|
|
value: function getAcceptingStateNumbers() {
|
|
if (!this._acceptingStateNumbers) {
|
|
this._acceptingStateNumbers = new Set();
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = this.getAcceptingStates()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var acceptingState = _step.value;
|
|
|
|
this._acceptingStateNumbers.add(acceptingState.number);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return this._acceptingStateNumbers;
|
|
}
|
|
|
|
/**
|
|
* Builds and returns transition table.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getTransitionTable',
|
|
value: function getTransitionTable() {
|
|
var _this = this;
|
|
|
|
if (!this._transitionTable) {
|
|
this._transitionTable = {};
|
|
this._acceptingStates = new Set();
|
|
|
|
var visited = new Set();
|
|
var symbols = new Set();
|
|
|
|
var visitState = function visitState(state) {
|
|
if (visited.has(state)) {
|
|
return;
|
|
}
|
|
|
|
visited.add(state);
|
|
state.number = visited.size;
|
|
_this._transitionTable[state.number] = {};
|
|
|
|
if (state.accepting) {
|
|
_this._acceptingStates.add(state);
|
|
}
|
|
|
|
var transitions = state.getTransitions();
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = transitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var _ref = _step2.value;
|
|
|
|
var _ref2 = _slicedToArray$1(_ref, 2);
|
|
|
|
var symbol = _ref2[0];
|
|
var symbolTransitions = _ref2[1];
|
|
|
|
var combinedState = [];
|
|
symbols.add(symbol);
|
|
var _iteratorNormalCompletion3 = true;
|
|
var _didIteratorError3 = false;
|
|
var _iteratorError3 = undefined;
|
|
|
|
try {
|
|
for (var _iterator3 = symbolTransitions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
var nextState = _step3.value;
|
|
|
|
visitState(nextState);
|
|
combinedState.push(nextState.number);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError3 = true;
|
|
_iteratorError3 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
|
_iterator3.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError3) {
|
|
throw _iteratorError3;
|
|
}
|
|
}
|
|
}
|
|
|
|
_this._transitionTable[state.number][symbol] = combinedState;
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// Traverse the graph starting from the `in`.
|
|
visitState(this.in);
|
|
|
|
// Append epsilon-closure column.
|
|
visited.forEach(function (state) {
|
|
delete _this._transitionTable[state.number][EPSILON$2];
|
|
_this._transitionTable[state.number][EPSILON_CLOSURE$1] = [].concat(_toConsumableArray$3(state.getEpsilonClosure())).map(function (s) {
|
|
return s.number;
|
|
});
|
|
});
|
|
}
|
|
|
|
return this._transitionTable;
|
|
}
|
|
}]);
|
|
|
|
return NFA;
|
|
}();
|
|
|
|
var nfa = NFA$2;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
// DFA minization.
|
|
|
|
/**
|
|
* Map from state to current set it goes.
|
|
*/
|
|
|
|
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
|
|
|
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }
|
|
|
|
function _toConsumableArray$2(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var currentTransitionMap = null;
|
|
|
|
/**
|
|
* Takes a DFA, and returns a minimized version of it
|
|
* compressing some states to groups (using standard, 0-, 1-,
|
|
* 2-, ... N-equivalence algorithm).
|
|
*/
|
|
function minimize(dfa) {
|
|
var table = dfa.getTransitionTable();
|
|
var allStates = Object.keys(table);
|
|
var alphabet = dfa.getAlphabet();
|
|
var accepting = dfa.getAcceptingStateNumbers();
|
|
|
|
currentTransitionMap = {};
|
|
|
|
var nonAccepting = new Set();
|
|
|
|
allStates.forEach(function (state) {
|
|
state = Number(state);
|
|
var isAccepting = accepting.has(state);
|
|
|
|
if (isAccepting) {
|
|
currentTransitionMap[state] = accepting;
|
|
} else {
|
|
nonAccepting.add(state);
|
|
currentTransitionMap[state] = nonAccepting;
|
|
}
|
|
});
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Step 1: build equivalent sets.
|
|
|
|
// All [1..N] equivalent sets.
|
|
var all = [
|
|
// 0-equivalent sets.
|
|
[nonAccepting, accepting].filter(function (set) {
|
|
return set.size > 0;
|
|
})];
|
|
|
|
var current = void 0;
|
|
var previous = void 0;
|
|
|
|
// Top of the stack is the current list of sets to analyze.
|
|
current = all[all.length - 1];
|
|
|
|
// Previous set (to check whether we need to stop).
|
|
previous = all[all.length - 2];
|
|
|
|
// Until we'll not have the same N and N-1 equivalent rows.
|
|
|
|
var _loop = function _loop() {
|
|
var newTransitionMap = {};
|
|
|
|
var _iteratorNormalCompletion3 = true;
|
|
var _didIteratorError3 = false;
|
|
var _iteratorError3 = undefined;
|
|
|
|
try {
|
|
for (var _iterator3 = current[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
var _set = _step3.value;
|
|
|
|
// Handled states for this set.
|
|
var handledStates = {};
|
|
|
|
var _set2 = _toArray(_set),
|
|
first = _set2[0],
|
|
rest = _set2.slice(1);
|
|
|
|
handledStates[first] = new Set([first]);
|
|
|
|
// Have to compare each from the rest states with
|
|
// the already handled states, and see if they are equivalent.
|
|
var _iteratorNormalCompletion4 = true;
|
|
var _didIteratorError4 = false;
|
|
var _iteratorError4 = undefined;
|
|
|
|
try {
|
|
restSets: for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
var state = _step4.value;
|
|
var _iteratorNormalCompletion5 = true;
|
|
var _didIteratorError5 = false;
|
|
var _iteratorError5 = undefined;
|
|
|
|
try {
|
|
for (var _iterator5 = Object.keys(handledStates)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
|
var handledState = _step5.value;
|
|
|
|
// This and some previously handled state are equivalent --
|
|
// just append this state to the same set.
|
|
if (areEquivalent(state, handledState, table, alphabet)) {
|
|
handledStates[handledState].add(state);
|
|
handledStates[state] = handledStates[handledState];
|
|
continue restSets;
|
|
}
|
|
}
|
|
// Else, this state is not equivalent to any of the
|
|
// handled states -- allocate a new set for it.
|
|
} catch (err) {
|
|
_didIteratorError5 = true;
|
|
_iteratorError5 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion5 && _iterator5.return) {
|
|
_iterator5.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError5) {
|
|
throw _iteratorError5;
|
|
}
|
|
}
|
|
}
|
|
|
|
handledStates[state] = new Set([state]);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError4 = true;
|
|
_iteratorError4 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion4 && _iterator4.return) {
|
|
_iterator4.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError4) {
|
|
throw _iteratorError4;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add these handled states to all states map.
|
|
|
|
|
|
Object.assign(newTransitionMap, handledStates);
|
|
}
|
|
|
|
// Update current transition map for the handled row.
|
|
} catch (err) {
|
|
_didIteratorError3 = true;
|
|
_iteratorError3 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
|
_iterator3.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError3) {
|
|
throw _iteratorError3;
|
|
}
|
|
}
|
|
}
|
|
|
|
currentTransitionMap = newTransitionMap;
|
|
|
|
var newSets = new Set(Object.keys(newTransitionMap).map(function (state) {
|
|
return newTransitionMap[state];
|
|
}));
|
|
|
|
all.push([].concat(_toConsumableArray$2(newSets)));
|
|
|
|
// Top of the stack is the current.
|
|
current = all[all.length - 1];
|
|
|
|
// Previous set.
|
|
previous = all[all.length - 2];
|
|
};
|
|
|
|
while (!sameRow(current, previous)) {
|
|
_loop();
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Step 2: build minimized table from the equivalent sets.
|
|
|
|
// Remap state numbers from sets to index-based.
|
|
var remaped = new Map();
|
|
var idx = 1;
|
|
current.forEach(function (set) {
|
|
return remaped.set(set, idx++);
|
|
});
|
|
|
|
// Build the minimized table from the calculated equivalent sets.
|
|
var minimizedTable = {};
|
|
|
|
var minimizedAcceptingStates = new Set();
|
|
|
|
var updateAcceptingStates = function updateAcceptingStates(set, idx) {
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = set[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var state = _step.value;
|
|
|
|
if (accepting.has(state)) {
|
|
minimizedAcceptingStates.add(idx);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = remaped.entries()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var _ref = _step2.value;
|
|
|
|
var _ref2 = _slicedToArray(_ref, 2);
|
|
|
|
var set = _ref2[0];
|
|
var _idx = _ref2[1];
|
|
|
|
minimizedTable[_idx] = {};
|
|
var _iteratorNormalCompletion6 = true;
|
|
var _didIteratorError6 = false;
|
|
var _iteratorError6 = undefined;
|
|
|
|
try {
|
|
for (var _iterator6 = alphabet[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
|
|
var symbol = _step6.value;
|
|
|
|
updateAcceptingStates(set, _idx);
|
|
|
|
// Determine original transition for this symbol from the set.
|
|
var originalTransition = void 0;
|
|
var _iteratorNormalCompletion7 = true;
|
|
var _didIteratorError7 = false;
|
|
var _iteratorError7 = undefined;
|
|
|
|
try {
|
|
for (var _iterator7 = set[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
|
|
var originalState = _step7.value;
|
|
|
|
originalTransition = table[originalState][symbol];
|
|
if (originalTransition) {
|
|
break;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError7 = true;
|
|
_iteratorError7 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion7 && _iterator7.return) {
|
|
_iterator7.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError7) {
|
|
throw _iteratorError7;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (originalTransition) {
|
|
minimizedTable[_idx][symbol] = remaped.get(currentTransitionMap[originalTransition]);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError6 = true;
|
|
_iteratorError6 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion6 && _iterator6.return) {
|
|
_iterator6.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError6) {
|
|
throw _iteratorError6;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Update the table, and accepting states on the original DFA.
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
|
|
dfa.setTransitionTable(minimizedTable);
|
|
dfa.setAcceptingStateNumbers(minimizedAcceptingStates);
|
|
|
|
return dfa;
|
|
}
|
|
|
|
function sameRow(r1, r2) {
|
|
if (!r2) {
|
|
return false;
|
|
}
|
|
|
|
if (r1.length !== r2.length) {
|
|
return false;
|
|
}
|
|
|
|
for (var i = 0; i < r1.length; i++) {
|
|
var s1 = r1[i];
|
|
var s2 = r2[i];
|
|
|
|
if (s1.size !== s2.size) {
|
|
return false;
|
|
}
|
|
|
|
if ([].concat(_toConsumableArray$2(s1)).sort().join(',') !== [].concat(_toConsumableArray$2(s2)).sort().join(',')) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Checks whether two states are N-equivalent, i.e. whether they go
|
|
* to the same set on a symbol.
|
|
*/
|
|
function areEquivalent(s1, s2, table, alphabet) {
|
|
var _iteratorNormalCompletion8 = true;
|
|
var _didIteratorError8 = false;
|
|
var _iteratorError8 = undefined;
|
|
|
|
try {
|
|
for (var _iterator8 = alphabet[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
|
|
var symbol = _step8.value;
|
|
|
|
if (!goToSameSet(s1, s2, table, symbol)) {
|
|
return false;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError8 = true;
|
|
_iteratorError8 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion8 && _iterator8.return) {
|
|
_iterator8.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError8) {
|
|
throw _iteratorError8;
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Checks whether states go to the same set.
|
|
*/
|
|
function goToSameSet(s1, s2, table, symbol) {
|
|
if (!currentTransitionMap[s1] || !currentTransitionMap[s2]) {
|
|
return false;
|
|
}
|
|
|
|
var originalTransitionS1 = table[s1][symbol];
|
|
var originalTransitionS2 = table[s2][symbol];
|
|
|
|
// If no actual transition on this symbol, treat it as positive.
|
|
if (!originalTransitionS1 && !originalTransitionS2) {
|
|
return true;
|
|
}
|
|
|
|
// Otherwise, check if they are in the same sets.
|
|
return currentTransitionMap[s1].has(originalTransitionS1) && currentTransitionMap[s2].has(originalTransitionS2);
|
|
}
|
|
|
|
var dfaMinimizer = {
|
|
minimize: minimize
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _createClass$3 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
function _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var DFAMinimizer = dfaMinimizer;
|
|
|
|
var _require$4 = specialSymbols,
|
|
EPSILON_CLOSURE = _require$4.EPSILON_CLOSURE;
|
|
|
|
/**
|
|
* DFA is build by converting from NFA (subset construction).
|
|
*/
|
|
|
|
|
|
var DFA$1 = function () {
|
|
function DFA(nfa) {
|
|
_classCallCheck$3(this, DFA);
|
|
|
|
this._nfa = nfa;
|
|
}
|
|
|
|
/**
|
|
* Minimizes DFA.
|
|
*/
|
|
|
|
|
|
_createClass$3(DFA, [{
|
|
key: 'minimize',
|
|
value: function minimize() {
|
|
this.getTransitionTable();
|
|
|
|
this._originalAcceptingStateNumbers = this._acceptingStateNumbers;
|
|
this._originalTransitionTable = this._transitionTable;
|
|
|
|
DFAMinimizer.minimize(this);
|
|
}
|
|
|
|
/**
|
|
* Returns alphabet for this DFA.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAlphabet',
|
|
value: function getAlphabet() {
|
|
return this._nfa.getAlphabet();
|
|
}
|
|
|
|
/**
|
|
* Returns accepting states.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAcceptingStateNumbers',
|
|
value: function getAcceptingStateNumbers() {
|
|
if (!this._acceptingStateNumbers) {
|
|
// Accepting states are determined during table construction.
|
|
this.getTransitionTable();
|
|
}
|
|
|
|
return this._acceptingStateNumbers;
|
|
}
|
|
|
|
/**
|
|
* Returns original accepting states.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getOriginaAcceptingStateNumbers',
|
|
value: function getOriginaAcceptingStateNumbers() {
|
|
if (!this._originalAcceptingStateNumbers) {
|
|
// Accepting states are determined during table construction.
|
|
this.getTransitionTable();
|
|
}
|
|
|
|
return this._originalAcceptingStateNumbers;
|
|
}
|
|
|
|
/**
|
|
* Sets transition table.
|
|
*/
|
|
|
|
}, {
|
|
key: 'setTransitionTable',
|
|
value: function setTransitionTable(table) {
|
|
this._transitionTable = table;
|
|
}
|
|
|
|
/**
|
|
* Sets accepting states.
|
|
*/
|
|
|
|
}, {
|
|
key: 'setAcceptingStateNumbers',
|
|
value: function setAcceptingStateNumbers(stateNumbers) {
|
|
this._acceptingStateNumbers = stateNumbers;
|
|
}
|
|
|
|
/**
|
|
* DFA transition table is built from NFA table.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getTransitionTable',
|
|
value: function getTransitionTable() {
|
|
var _this = this;
|
|
|
|
if (this._transitionTable) {
|
|
return this._transitionTable;
|
|
}
|
|
|
|
// Calculate from NFA transition table.
|
|
var nfaTable = this._nfa.getTransitionTable();
|
|
var nfaStates = Object.keys(nfaTable);
|
|
|
|
this._acceptingStateNumbers = new Set();
|
|
|
|
// Start state of DFA is E(S[nfa])
|
|
var startState = nfaTable[nfaStates[0]][EPSILON_CLOSURE];
|
|
|
|
// Init the worklist (states which should be in the DFA).
|
|
var worklist = [startState];
|
|
|
|
var alphabet = this.getAlphabet();
|
|
var nfaAcceptingStates = this._nfa.getAcceptingStateNumbers();
|
|
|
|
var dfaTable = {};
|
|
|
|
// Determine whether the combined DFA state is accepting.
|
|
var updateAcceptingStates = function updateAcceptingStates(states) {
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = nfaAcceptingStates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var nfaAcceptingState = _step.value;
|
|
|
|
// If any of the states from NFA is accepting, DFA's
|
|
// state is accepting as well.
|
|
if (states.indexOf(nfaAcceptingState) !== -1) {
|
|
_this._acceptingStateNumbers.add(states.join(','));
|
|
break;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
while (worklist.length > 0) {
|
|
var states = worklist.shift();
|
|
var dfaStateLabel = states.join(',');
|
|
dfaTable[dfaStateLabel] = {};
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = alphabet[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var symbol = _step2.value;
|
|
|
|
var onSymbol = [];
|
|
|
|
// Determine whether the combined state is accepting.
|
|
updateAcceptingStates(states);
|
|
|
|
var _iteratorNormalCompletion3 = true;
|
|
var _didIteratorError3 = false;
|
|
var _iteratorError3 = undefined;
|
|
|
|
try {
|
|
for (var _iterator3 = states[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
var state = _step3.value;
|
|
|
|
var nfaStatesOnSymbol = nfaTable[state][symbol];
|
|
if (!nfaStatesOnSymbol) {
|
|
continue;
|
|
}
|
|
|
|
var _iteratorNormalCompletion4 = true;
|
|
var _didIteratorError4 = false;
|
|
var _iteratorError4 = undefined;
|
|
|
|
try {
|
|
for (var _iterator4 = nfaStatesOnSymbol[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
var nfaStateOnSymbol = _step4.value;
|
|
|
|
if (!nfaTable[nfaStateOnSymbol]) {
|
|
continue;
|
|
}
|
|
onSymbol.push.apply(onSymbol, _toConsumableArray$1(nfaTable[nfaStateOnSymbol][EPSILON_CLOSURE]));
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError4 = true;
|
|
_iteratorError4 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion4 && _iterator4.return) {
|
|
_iterator4.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError4) {
|
|
throw _iteratorError4;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError3 = true;
|
|
_iteratorError3 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
|
_iterator3.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError3) {
|
|
throw _iteratorError3;
|
|
}
|
|
}
|
|
}
|
|
|
|
var dfaStatesOnSymbolSet = new Set(onSymbol);
|
|
var dfaStatesOnSymbol = [].concat(_toConsumableArray$1(dfaStatesOnSymbolSet));
|
|
|
|
if (dfaStatesOnSymbol.length > 0) {
|
|
var dfaOnSymbolStr = dfaStatesOnSymbol.join(',');
|
|
|
|
dfaTable[dfaStateLabel][symbol] = dfaOnSymbolStr;
|
|
|
|
if (!dfaTable.hasOwnProperty(dfaOnSymbolStr)) {
|
|
worklist.unshift(dfaStatesOnSymbol);
|
|
}
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return this._transitionTable = this._remapStateNumbers(dfaTable);
|
|
}
|
|
|
|
/**
|
|
* Remaps state numbers in the resulting table:
|
|
* combined states '1,2,3' -> 1, '3,4' -> 2, etc.
|
|
*/
|
|
|
|
}, {
|
|
key: '_remapStateNumbers',
|
|
value: function _remapStateNumbers(calculatedDFATable) {
|
|
var newStatesMap = {};
|
|
|
|
this._originalTransitionTable = calculatedDFATable;
|
|
var transitionTable = {};
|
|
|
|
Object.keys(calculatedDFATable).forEach(function (originalNumber, newNumber) {
|
|
newStatesMap[originalNumber] = newNumber + 1;
|
|
});
|
|
|
|
for (var originalNumber in calculatedDFATable) {
|
|
var originalRow = calculatedDFATable[originalNumber];
|
|
var row = {};
|
|
|
|
for (var symbol in originalRow) {
|
|
row[symbol] = newStatesMap[originalRow[symbol]];
|
|
}
|
|
|
|
transitionTable[newStatesMap[originalNumber]] = row;
|
|
}
|
|
|
|
// Remap accepting states.
|
|
this._originalAcceptingStateNumbers = this._acceptingStateNumbers;
|
|
this._acceptingStateNumbers = new Set();
|
|
|
|
var _iteratorNormalCompletion5 = true;
|
|
var _didIteratorError5 = false;
|
|
var _iteratorError5 = undefined;
|
|
|
|
try {
|
|
for (var _iterator5 = this._originalAcceptingStateNumbers[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
|
var _originalNumber = _step5.value;
|
|
|
|
this._acceptingStateNumbers.add(newStatesMap[_originalNumber]);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError5 = true;
|
|
_iteratorError5 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion5 && _iterator5.return) {
|
|
_iterator5.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError5) {
|
|
throw _iteratorError5;
|
|
}
|
|
}
|
|
}
|
|
|
|
return transitionTable;
|
|
}
|
|
|
|
/**
|
|
* Returns original DFA table, where state numbers
|
|
* are combined numbers from NFA.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getOriginalTransitionTable',
|
|
value: function getOriginalTransitionTable() {
|
|
if (!this._originalTransitionTable) {
|
|
// Original table is determined during table construction.
|
|
this.getTransitionTable();
|
|
}
|
|
return this._originalTransitionTable;
|
|
}
|
|
|
|
/**
|
|
* Checks whether this DFA accepts a string.
|
|
*/
|
|
|
|
}, {
|
|
key: 'matches',
|
|
value: function matches(string) {
|
|
var state = 1;
|
|
var i = 0;
|
|
var table = this.getTransitionTable();
|
|
|
|
while (string[i]) {
|
|
state = table[state][string[i++]];
|
|
if (!state) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (!this.getAcceptingStateNumbers().has(state)) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}]);
|
|
|
|
return DFA;
|
|
}();
|
|
|
|
var dfa = DFA$1;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A generic FA State class (base for NFA and DFA).
|
|
*
|
|
* Maintains the transition map, and the flag whether
|
|
* the state is accepting.
|
|
*/
|
|
|
|
var _createClass$2 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var State$1 = function () {
|
|
function State() {
|
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
_ref$accepting = _ref.accepting,
|
|
accepting = _ref$accepting === undefined ? false : _ref$accepting;
|
|
|
|
_classCallCheck$2(this, State);
|
|
|
|
/**
|
|
* Outgoing transitions to other states.
|
|
*/
|
|
this._transitions = new Map();
|
|
|
|
/**
|
|
* Whether the state is accepting.
|
|
*/
|
|
this.accepting = accepting;
|
|
}
|
|
|
|
/**
|
|
* Returns transitions for this state.
|
|
*/
|
|
|
|
|
|
_createClass$2(State, [{
|
|
key: 'getTransitions',
|
|
value: function getTransitions() {
|
|
return this._transitions;
|
|
}
|
|
|
|
/**
|
|
* Creates a transition on symbol.
|
|
*/
|
|
|
|
}, {
|
|
key: 'addTransition',
|
|
value: function addTransition(symbol, toState) {
|
|
this.getTransitionsOnSymbol(symbol).add(toState);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Returns transitions set on symbol.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getTransitionsOnSymbol',
|
|
value: function getTransitionsOnSymbol(symbol) {
|
|
var transitions = this._transitions.get(symbol);
|
|
|
|
if (!transitions) {
|
|
transitions = new Set();
|
|
this._transitions.set(symbol, transitions);
|
|
}
|
|
|
|
return transitions;
|
|
}
|
|
}]);
|
|
|
|
return State;
|
|
}();
|
|
|
|
var state = State$1;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _createClass$1 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
|
|
var State = state;
|
|
|
|
var _require$3 = specialSymbols,
|
|
EPSILON$1 = _require$3.EPSILON;
|
|
|
|
/**
|
|
* NFA state.
|
|
*
|
|
* Allows nondeterministic transitions to several states on the
|
|
* same symbol, and also epsilon-transitions.
|
|
*/
|
|
|
|
|
|
var NFAState$1 = function (_State) {
|
|
_inherits(NFAState, _State);
|
|
|
|
function NFAState() {
|
|
_classCallCheck$1(this, NFAState);
|
|
|
|
return _possibleConstructorReturn(this, (NFAState.__proto__ || Object.getPrototypeOf(NFAState)).apply(this, arguments));
|
|
}
|
|
|
|
_createClass$1(NFAState, [{
|
|
key: 'matches',
|
|
|
|
|
|
/**
|
|
* Whether this state matches a string.
|
|
*
|
|
* We maintain set of visited epsilon-states to avoid infinite loops
|
|
* when an epsilon-transition goes eventually to itself.
|
|
*
|
|
* NOTE: this function is rather "educational", since we use DFA for strings
|
|
* matching. DFA is built on top of NFA, and uses fast transition table.
|
|
*/
|
|
value: function matches(string) {
|
|
var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();
|
|
|
|
// An epsilon-state has been visited, stop to avoid infinite loop.
|
|
if (visited.has(this)) {
|
|
return false;
|
|
}
|
|
|
|
visited.add(this);
|
|
|
|
// No symbols left..
|
|
if (string.length === 0) {
|
|
// .. and we're in the accepting state.
|
|
if (this.accepting) {
|
|
return true;
|
|
}
|
|
|
|
// Check if we can reach any accepting state from
|
|
// on the epsilon transitions.
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = this.getTransitionsOnSymbol(EPSILON$1)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var nextState = _step.value;
|
|
|
|
if (nextState.matches('', visited)) {
|
|
return true;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Else, we get some symbols.
|
|
var symbol = string[0];
|
|
var rest = string.slice(1);
|
|
|
|
var symbolTransitions = this.getTransitionsOnSymbol(symbol);
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = symbolTransitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var _nextState = _step2.value;
|
|
|
|
if (_nextState.matches(rest)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// If we couldn't match on symbol, check still epsilon-transitions
|
|
// without consuming the symbol (i.e. continue from `string`, not `rest`).
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
|
|
var _iteratorNormalCompletion3 = true;
|
|
var _didIteratorError3 = false;
|
|
var _iteratorError3 = undefined;
|
|
|
|
try {
|
|
for (var _iterator3 = this.getTransitionsOnSymbol(EPSILON$1)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
var _nextState2 = _step3.value;
|
|
|
|
if (_nextState2.matches(string, visited)) {
|
|
return true;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError3 = true;
|
|
_iteratorError3 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
|
_iterator3.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError3) {
|
|
throw _iteratorError3;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Returns an ε-closure for this state:
|
|
* self + all states following ε-transitions.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getEpsilonClosure',
|
|
value: function getEpsilonClosure() {
|
|
var _this2 = this;
|
|
|
|
if (!this._epsilonClosure) {
|
|
(function () {
|
|
var epsilonTransitions = _this2.getTransitionsOnSymbol(EPSILON$1);
|
|
var closure = _this2._epsilonClosure = new Set();
|
|
closure.add(_this2);
|
|
var _iteratorNormalCompletion4 = true;
|
|
var _didIteratorError4 = false;
|
|
var _iteratorError4 = undefined;
|
|
|
|
try {
|
|
for (var _iterator4 = epsilonTransitions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
var nextState = _step4.value;
|
|
|
|
if (!closure.has(nextState)) {
|
|
closure.add(nextState);
|
|
var nextClosure = nextState.getEpsilonClosure();
|
|
nextClosure.forEach(function (state) {
|
|
return closure.add(state);
|
|
});
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError4 = true;
|
|
_iteratorError4 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion4 && _iterator4.return) {
|
|
_iterator4.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError4) {
|
|
throw _iteratorError4;
|
|
}
|
|
}
|
|
}
|
|
})();
|
|
}
|
|
|
|
return this._epsilonClosure;
|
|
}
|
|
}]);
|
|
|
|
return NFAState;
|
|
}(State);
|
|
|
|
var nfaState = NFAState$1;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var NFA$1 = nfa;
|
|
var NFAState = nfaState;
|
|
|
|
var _require$2 = specialSymbols,
|
|
EPSILON = _require$2.EPSILON;
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Char NFA fragment: `c`
|
|
|
|
/**
|
|
* Char factory.
|
|
*
|
|
* Creates an NFA fragment for a single char.
|
|
*
|
|
* [in] --c--> [out]
|
|
*/
|
|
|
|
|
|
function char$1(c) {
|
|
var inState = new NFAState();
|
|
var outState = new NFAState({
|
|
accepting: true
|
|
});
|
|
|
|
return new NFA$1(inState.addTransition(c, outState), outState);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Epsilon NFA fragment
|
|
|
|
/**
|
|
* Epsilon factory.
|
|
*
|
|
* Creates an NFA fragment for ε (recognizes an empty string).
|
|
*
|
|
* [in] --ε--> [out]
|
|
*/
|
|
function e() {
|
|
return char$1(EPSILON);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Alteration NFA fragment: `abc`
|
|
|
|
/**
|
|
* Creates a connection between two NFA fragments on epsilon transition.
|
|
*
|
|
* [in-a] --a--> [out-a] --ε--> [in-b] --b--> [out-b]
|
|
*/
|
|
function altPair(first, second) {
|
|
first.out.accepting = false;
|
|
second.out.accepting = true;
|
|
|
|
first.out.addTransition(EPSILON, second.in);
|
|
|
|
return new NFA$1(first.in, second.out);
|
|
}
|
|
|
|
/**
|
|
* Alteration factory.
|
|
*
|
|
* Creates a alteration NFA for (at least) two NFA-fragments.
|
|
*/
|
|
function alt$1(first) {
|
|
for (var _len = arguments.length, fragments = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
fragments[_key - 1] = arguments[_key];
|
|
}
|
|
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = fragments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var fragment = _step.value;
|
|
|
|
first = altPair(first, fragment);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
|
|
return first;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Disjunction NFA fragment: `a|b`
|
|
|
|
/**
|
|
* Creates a disjunction choice between two fragments.
|
|
*/
|
|
function orPair(first, second) {
|
|
var inState = new NFAState();
|
|
var outState = new NFAState();
|
|
|
|
inState.addTransition(EPSILON, first.in);
|
|
inState.addTransition(EPSILON, second.in);
|
|
|
|
outState.accepting = true;
|
|
first.out.accepting = false;
|
|
second.out.accepting = false;
|
|
|
|
first.out.addTransition(EPSILON, outState);
|
|
second.out.addTransition(EPSILON, outState);
|
|
|
|
return new NFA$1(inState, outState);
|
|
}
|
|
|
|
/**
|
|
* Disjunction factory.
|
|
*
|
|
* Creates a disjunction NFA for (at least) two NFA-fragments.
|
|
*/
|
|
function or$1(first) {
|
|
for (var _len2 = arguments.length, fragments = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
fragments[_key2 - 1] = arguments[_key2];
|
|
}
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = fragments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var fragment = _step2.value;
|
|
|
|
first = orPair(first, fragment);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
|
|
return first;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Kleene-closure
|
|
|
|
/**
|
|
* Kleene star/closure.
|
|
*
|
|
* a*
|
|
*/
|
|
function repExplicit(fragment) {
|
|
var inState = new NFAState();
|
|
var outState = new NFAState({
|
|
accepting: true
|
|
});
|
|
|
|
// 0 or more.
|
|
inState.addTransition(EPSILON, fragment.in);
|
|
inState.addTransition(EPSILON, outState);
|
|
|
|
fragment.out.accepting = false;
|
|
fragment.out.addTransition(EPSILON, outState);
|
|
outState.addTransition(EPSILON, fragment.in);
|
|
|
|
return new NFA$1(inState, outState);
|
|
}
|
|
|
|
/**
|
|
* Optimized Kleene-star: just adds ε-transitions from
|
|
* input to the output, and back.
|
|
*/
|
|
function rep$1(fragment) {
|
|
fragment.in.addTransition(EPSILON, fragment.out);
|
|
fragment.out.addTransition(EPSILON, fragment.in);
|
|
return fragment;
|
|
}
|
|
|
|
/**
|
|
* Optimized Plus: just adds ε-transitions from
|
|
* the output to the input.
|
|
*/
|
|
function plusRep$1(fragment) {
|
|
fragment.out.addTransition(EPSILON, fragment.in);
|
|
return fragment;
|
|
}
|
|
|
|
/**
|
|
* Optimized ? repetition: just adds ε-transitions from
|
|
* the input to the output.
|
|
*/
|
|
function questionRep$1(fragment) {
|
|
fragment.in.addTransition(EPSILON, fragment.out);
|
|
return fragment;
|
|
}
|
|
|
|
var builders$1 = {
|
|
alt: alt$1,
|
|
char: char$1,
|
|
e: e,
|
|
or: or$1,
|
|
rep: rep$1,
|
|
repExplicit: repExplicit,
|
|
plusRep: plusRep$1,
|
|
questionRep: questionRep$1
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var parser$1 = parser$4;
|
|
|
|
var _require$1 = builders$1,
|
|
alt = _require$1.alt,
|
|
char = _require$1.char,
|
|
or = _require$1.or,
|
|
rep = _require$1.rep,
|
|
plusRep = _require$1.plusRep,
|
|
questionRep = _require$1.questionRep;
|
|
|
|
/**
|
|
* Helper `gen` function calls node type handler.
|
|
*/
|
|
|
|
|
|
function gen(node) {
|
|
if (node && !generator$1[node.type]) {
|
|
throw new Error(node.type + ' is not supported in NFA/DFA interpreter.');
|
|
}
|
|
|
|
return node ? generator$1[node.type](node) : '';
|
|
}
|
|
|
|
/**
|
|
* AST handler.
|
|
*/
|
|
var generator$1 = {
|
|
RegExp: function RegExp(node) {
|
|
if (node.flags !== '') {
|
|
throw new Error('NFA/DFA: Flags are not supported yet.');
|
|
}
|
|
|
|
return gen(node.body);
|
|
},
|
|
Alternative: function Alternative(node) {
|
|
var fragments = (node.expressions || []).map(gen);
|
|
return alt.apply(undefined, _toConsumableArray(fragments));
|
|
},
|
|
Disjunction: function Disjunction(node) {
|
|
return or(gen(node.left), gen(node.right));
|
|
},
|
|
Repetition: function Repetition(node) {
|
|
switch (node.quantifier.kind) {
|
|
case '*':
|
|
return rep(gen(node.expression));
|
|
case '+':
|
|
return plusRep(gen(node.expression));
|
|
case '?':
|
|
return questionRep(gen(node.expression));
|
|
default:
|
|
throw new Error('Unknown repeatition: ' + node.quantifier.kind + '.');
|
|
}
|
|
},
|
|
Char: function Char(node) {
|
|
if (node.kind !== 'simple') {
|
|
throw new Error('NFA/DFA: Only simple chars are supported yet.');
|
|
}
|
|
|
|
return char(node.value);
|
|
},
|
|
Group: function Group(node) {
|
|
return gen(node.expression);
|
|
}
|
|
};
|
|
|
|
var nfaFromRegexp = {
|
|
/**
|
|
* Builds an NFA from the passed regexp.
|
|
*/
|
|
build: function build(regexp) {
|
|
var ast = regexp;
|
|
|
|
if (regexp instanceof RegExp) {
|
|
regexp = '' + regexp;
|
|
}
|
|
|
|
if (typeof regexp === 'string') {
|
|
ast = parser$1.parse(regexp, {
|
|
captureLocations: true
|
|
});
|
|
}
|
|
|
|
return gen(ast);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var NFA = nfa;
|
|
var DFA = dfa;
|
|
|
|
var nfaFromRegExp = nfaFromRegexp;
|
|
var builders = builders$1;
|
|
|
|
var finiteAutomaton = {
|
|
|
|
/**
|
|
* Export NFA and DFA classes.
|
|
*/
|
|
NFA: NFA,
|
|
DFA: DFA,
|
|
|
|
/**
|
|
* Expose builders.
|
|
*/
|
|
builders: builders,
|
|
|
|
/**
|
|
* Builds an NFA for the passed regexp.
|
|
*
|
|
* @param string | AST | RegExp:
|
|
*
|
|
* a regular expression in different representations: a string,
|
|
* a RegExp object, or an AST.
|
|
*/
|
|
toNFA: function toNFA(regexp) {
|
|
return nfaFromRegExp.build(regexp);
|
|
},
|
|
|
|
|
|
/**
|
|
* Builds DFA for the passed regexp.
|
|
*
|
|
* @param string | AST | RegExp:
|
|
*
|
|
* a regular expression in different representations: a string,
|
|
* a RegExp object, or an AST.
|
|
*/
|
|
toDFA: function toDFA(regexp) {
|
|
return new DFA(this.toNFA(regexp));
|
|
},
|
|
|
|
|
|
/**
|
|
* Returns true if regexp accepts the string.
|
|
*/
|
|
test: function test(regexp, string) {
|
|
return this.toDFA(regexp).matches(string);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* The `RegExpTree` class provides runtime support for `compat-transpiler`
|
|
* module from `regexp-tree`.
|
|
*
|
|
* E.g. it tracks names of the capturing groups, in order to access the
|
|
* names on the matched result.
|
|
*
|
|
* It's a thin-wrapper on top of original regexp.
|
|
*/
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var RegExpTree$1 = function () {
|
|
/**
|
|
* Initializes a `RegExpTree` instance.
|
|
*
|
|
* @param RegExp - a regular expression
|
|
*
|
|
* @param Object state:
|
|
*
|
|
* An extra state which may store any related to transformation
|
|
* data, for example, names of the groups.
|
|
*
|
|
* - flags - original flags
|
|
* - groups - names of the groups, and their indices
|
|
* - source - original source
|
|
*/
|
|
function RegExpTree(re, _ref) {
|
|
var flags = _ref.flags,
|
|
groups = _ref.groups,
|
|
source = _ref.source;
|
|
|
|
_classCallCheck(this, RegExpTree);
|
|
|
|
this._re = re;
|
|
this._groups = groups;
|
|
|
|
// Original props.
|
|
this.flags = flags;
|
|
this.source = source || re.source;
|
|
this.dotAll = flags.includes('s');
|
|
|
|
// Inherited directly from `re`.
|
|
this.global = re.global;
|
|
this.ignoreCase = re.ignoreCase;
|
|
this.multiline = re.multiline;
|
|
this.sticky = re.sticky;
|
|
this.unicode = re.unicode;
|
|
}
|
|
|
|
/**
|
|
* Facade wrapper for RegExp `test` method.
|
|
*/
|
|
|
|
|
|
_createClass(RegExpTree, [{
|
|
key: 'test',
|
|
value: function test(string) {
|
|
return this._re.test(string);
|
|
}
|
|
|
|
/**
|
|
* Facade wrapper for RegExp `compile` method.
|
|
*/
|
|
|
|
}, {
|
|
key: 'compile',
|
|
value: function compile(string) {
|
|
return this._re.compile(string);
|
|
}
|
|
|
|
/**
|
|
* Facade wrapper for RegExp `toString` method.
|
|
*/
|
|
|
|
}, {
|
|
key: 'toString',
|
|
value: function toString() {
|
|
if (!this._toStringResult) {
|
|
this._toStringResult = '/' + this.source + '/' + this.flags;
|
|
}
|
|
return this._toStringResult;
|
|
}
|
|
|
|
/**
|
|
* Facade wrapper for RegExp `exec` method.
|
|
*/
|
|
|
|
}, {
|
|
key: 'exec',
|
|
value: function exec(string) {
|
|
var result = this._re.exec(string);
|
|
|
|
if (!this._groups || !result) {
|
|
return result;
|
|
}
|
|
|
|
result.groups = {};
|
|
|
|
for (var group in this._groups) {
|
|
var groupNumber = this._groups[group];
|
|
result.groups[group] = result[groupNumber];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}]);
|
|
|
|
return RegExpTree;
|
|
}();
|
|
|
|
var runtime = {
|
|
RegExpTree: RegExpTree$1
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var compatTranspiler = compatTranspiler$1;
|
|
var generator = generator_1;
|
|
var optimizer = optimizer$1;
|
|
var parser = parser$4;
|
|
var _transform = transform$1;
|
|
var _traverse = traverse$1;
|
|
var fa = finiteAutomaton;
|
|
|
|
var _require = runtime,
|
|
RegExpTree = _require.RegExpTree;
|
|
|
|
/**
|
|
* An API object for RegExp processing (parsing/transform/generation).
|
|
*/
|
|
|
|
|
|
var regexpTree$3 = {
|
|
/**
|
|
* Parser module exposed.
|
|
*/
|
|
parser: parser,
|
|
|
|
/**
|
|
* Expose finite-automaton module.
|
|
*/
|
|
fa: fa,
|
|
|
|
/**
|
|
* `TransformResult` exposed.
|
|
*/
|
|
TransformResult: _transform.TransformResult,
|
|
|
|
/**
|
|
* Parses a regexp string, producing an AST.
|
|
*
|
|
* @param string regexp
|
|
*
|
|
* a regular expression in different formats: string, AST, RegExp.
|
|
*
|
|
* @param Object options
|
|
*
|
|
* parsing options for this parse call. Default are:
|
|
*
|
|
* - captureLocations: boolean
|
|
* - any other custom options
|
|
*
|
|
* @return Object AST
|
|
*/
|
|
parse: function parse(regexp, options) {
|
|
return parser.parse('' + regexp, options);
|
|
},
|
|
|
|
|
|
/**
|
|
* Traverses a RegExp AST.
|
|
*
|
|
* @param Object ast
|
|
* @param Object | Array<Object> handlers
|
|
*
|
|
* Each `handler` is an object containing handler function for needed
|
|
* node types. Example:
|
|
*
|
|
* regexpTree.traverse(ast, {
|
|
* onChar(node) {
|
|
* ...
|
|
* },
|
|
* });
|
|
*
|
|
* The value for a node type may also be an object with functions pre and post.
|
|
* This enables more context-aware analyses, e.g. measuring star height.
|
|
*/
|
|
traverse: function traverse(ast, handlers, options) {
|
|
return _traverse.traverse(ast, handlers, options);
|
|
},
|
|
|
|
|
|
/**
|
|
* Transforms a regular expression.
|
|
*
|
|
* A regexp can be passed in different formats (string, regexp or AST),
|
|
* applying a set of transformations. It is a convenient wrapper
|
|
* on top of "parse-traverse-generate" tool chain.
|
|
*
|
|
* @param string | AST | RegExp regexp - a regular expression;
|
|
* @param Object | Array<Object> handlers - a list of handlers.
|
|
*
|
|
* @return TransformResult - a transformation result.
|
|
*/
|
|
transform: function transform(regexp, handlers) {
|
|
return _transform.transform(regexp, handlers);
|
|
},
|
|
|
|
|
|
/**
|
|
* Generates a RegExp string from an AST.
|
|
*
|
|
* @param Object ast
|
|
*
|
|
* Invariant:
|
|
*
|
|
* regexpTree.generate(regexpTree.parse('/[a-z]+/i')); // '/[a-z]+/i'
|
|
*/
|
|
generate: function generate(ast) {
|
|
return generator.generate(ast);
|
|
},
|
|
|
|
|
|
/**
|
|
* Creates a RegExp object from a regexp string.
|
|
*
|
|
* @param string regexp
|
|
*/
|
|
toRegExp: function toRegExp(regexp) {
|
|
var compat = this.compatTranspile(regexp);
|
|
return new RegExp(compat.getSource(), compat.getFlags());
|
|
},
|
|
|
|
|
|
/**
|
|
* Optimizes a regular expression by replacing some
|
|
* sub-expressions with their idiomatic patterns.
|
|
*
|
|
* @param string regexp
|
|
*
|
|
* @return TransformResult object
|
|
*/
|
|
optimize: function optimize(regexp, whitelist) {
|
|
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
|
|
blacklist = _ref.blacklist;
|
|
|
|
return optimizer.optimize(regexp, { whitelist: whitelist, blacklist: blacklist });
|
|
},
|
|
|
|
|
|
/**
|
|
* Translates a regular expression in new syntax or in new format
|
|
* into equivalent expressions in old syntax.
|
|
*
|
|
* @param string regexp
|
|
*
|
|
* @return TransformResult object
|
|
*/
|
|
compatTranspile: function compatTranspile(regexp, whitelist) {
|
|
return compatTranspiler.transform(regexp, whitelist);
|
|
},
|
|
|
|
|
|
/**
|
|
* Executes a regular expression on a string.
|
|
*
|
|
* @param RegExp|string re - a regular expression.
|
|
* @param string string - a testing string.
|
|
*/
|
|
exec: function exec(re, string) {
|
|
if (typeof re === 'string') {
|
|
var compat = this.compatTranspile(re);
|
|
var extra = compat.getExtra();
|
|
|
|
if (extra.namedCapturingGroups) {
|
|
re = new RegExpTree(compat.toRegExp(), {
|
|
flags: compat.getFlags(),
|
|
source: compat.getSource(),
|
|
groups: extra.namedCapturingGroups
|
|
});
|
|
} else {
|
|
re = compat.toRegExp();
|
|
}
|
|
}
|
|
|
|
return re.exec(string);
|
|
}
|
|
};
|
|
|
|
var regexpTree_1 = regexpTree$3;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var regexpTree$2 = regexpTree_1;
|
|
|
|
// Exports an Analyzer subclass
|
|
|
|
const regexpTree$1 = regexpTree$2;
|
|
const analyzer$1 = analyzer$2;
|
|
|
|
class HeuristicAnalyzer extends analyzer$1.Analyzer {
|
|
constructor(analyzerOptions) {
|
|
super(analyzerOptions);
|
|
}
|
|
|
|
isVulnerable(regExp) {
|
|
// Heuristic #1: Star height > 1
|
|
const starHeight = this._measureStarHeight(regExp);
|
|
if (starHeight > 1) {
|
|
return true;
|
|
}
|
|
|
|
// Heuristic #2: # repetitions > limit
|
|
// TODO This is a poor heuristic
|
|
const nRepetitions = this._measureRepetitions(regExp);
|
|
if (nRepetitions > this.options.heuristic_replimit) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
genAttackString(regExp) {
|
|
return null;
|
|
}
|
|
|
|
_measureStarHeight(regExp) {
|
|
let currentStarHeight = 0;
|
|
let maxObservedStarHeight = 0;
|
|
|
|
const ast = regexpTree$1.parse(regExp);
|
|
|
|
regexpTree$1.traverse(ast, {
|
|
Repetition: {
|
|
pre({ node }) {
|
|
currentStarHeight++;
|
|
if (maxObservedStarHeight < currentStarHeight) {
|
|
maxObservedStarHeight = currentStarHeight;
|
|
}
|
|
},
|
|
|
|
post({ node }) {
|
|
currentStarHeight--;
|
|
}
|
|
}
|
|
});
|
|
|
|
return maxObservedStarHeight;
|
|
}
|
|
|
|
_measureRepetitions(regExp) {
|
|
let nRepetitions = 0;
|
|
|
|
const ast = regexpTree$1.parse(regExp);
|
|
regexpTree$1.traverse(ast, {
|
|
Repetition: {
|
|
pre({ node }) {
|
|
nRepetitions++;
|
|
}
|
|
}
|
|
});
|
|
|
|
return nRepetitions;
|
|
}
|
|
}
|
|
|
|
var heuristicAnalyzer$1 = HeuristicAnalyzer;
|
|
|
|
// Load the analyzers
|
|
const heuristicAnalyzer = heuristicAnalyzer$1;
|
|
|
|
var analyzerFamily$1 = [heuristicAnalyzer];
|
|
|
|
const analyzer = analyzer$2;
|
|
const analyzerFamily = analyzerFamily$1;
|
|
|
|
const DEFAULT_SAFE_REP_LIMIT = 25;
|
|
const RET_IS_SAFE = true;
|
|
const RET_IS_VULNERABLE = false;
|
|
|
|
class Args {
|
|
constructor(regExp, analyzerOptions) {
|
|
this.regExp = regExp;
|
|
this.analyzerOptions = analyzerOptions;
|
|
}
|
|
}
|
|
|
|
function safeRegex(re, opts) {
|
|
try {
|
|
const args = buildArgs(re, opts);
|
|
const analyzerResponses = askAnalyzersIfVulnerable(args);
|
|
|
|
// Did any analyzer say true?
|
|
if (analyzerResponses.find((isVulnerable) => isVulnerable)) {
|
|
return RET_IS_VULNERABLE;
|
|
} else {
|
|
return RET_IS_SAFE;
|
|
}
|
|
} catch (err) {
|
|
// Invalid or unparseable input
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function buildArgs(re, opts) {
|
|
// Build AnalyzerOptions
|
|
if (!opts) opts = {};
|
|
const heuristic_replimit = opts.limit === undefined ? DEFAULT_SAFE_REP_LIMIT : opts.limit;
|
|
|
|
const analyzerOptions = new analyzer.AnalyzerOptions(heuristic_replimit);
|
|
|
|
// Build RegExp
|
|
let regExp = null;
|
|
// Construct a RegExp object
|
|
if (re instanceof RegExp) {
|
|
regExp = re;
|
|
} else if (typeof re === 'string') {
|
|
regExp = new RegExp(re);
|
|
} else {
|
|
regExp = new RegExp(String(re));
|
|
}
|
|
|
|
return new Args(regExp, analyzerOptions);
|
|
}
|
|
|
|
function askAnalyzersIfVulnerable(args) {
|
|
let analyzerSaysVulnerable = [];
|
|
|
|
// Query the Analyzers
|
|
let Analyzer;
|
|
for (Analyzer of analyzerFamily) {
|
|
try {
|
|
const analyzer = new Analyzer(args.analyzerOptions);
|
|
analyzerSaysVulnerable.push(analyzer.isVulnerable(args.regExp));
|
|
} catch (err) {
|
|
/* istanbul ignore next */ // No need to worry about code coverage here.
|
|
analyzerSaysVulnerable.push(false);
|
|
}
|
|
}
|
|
|
|
return analyzerSaysVulnerable;
|
|
}
|
|
|
|
// Export
|
|
|
|
var safeRegex_1 = safeRegex;
|
|
|
|
var safeRegex$1 = /*@__PURE__*/getDefaultExportFromCjs(safeRegex_1);
|
|
|
|
var lib$3 = {};
|
|
|
|
var FsPromise = {};
|
|
|
|
/**
|
|
* Module convert fs functions to promise based functions
|
|
*/
|
|
Object.defineProperty(FsPromise, "__esModule", { value: true });
|
|
FsPromise.readFile = FsPromise.writeFileSync = FsPromise.writeFile = FsPromise.read = FsPromise.open = FsPromise.close = FsPromise.stat = FsPromise.createReadStream = FsPromise.pathExists = void 0;
|
|
const fs$2 = require$$0__default["default"];
|
|
FsPromise.pathExists = fs$2.existsSync;
|
|
FsPromise.createReadStream = fs$2.createReadStream;
|
|
async function stat(path) {
|
|
return new Promise((resolve, reject) => {
|
|
fs$2.stat(path, (err, stats) => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve(stats);
|
|
});
|
|
});
|
|
}
|
|
FsPromise.stat = stat;
|
|
async function close(fd) {
|
|
return new Promise((resolve, reject) => {
|
|
fs$2.close(fd, err => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
FsPromise.close = close;
|
|
async function open(path, mode) {
|
|
return new Promise((resolve, reject) => {
|
|
fs$2.open(path, mode, (err, fd) => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve(fd);
|
|
});
|
|
});
|
|
}
|
|
FsPromise.open = open;
|
|
async function read(fd, buffer, offset, length, position) {
|
|
return new Promise((resolve, reject) => {
|
|
fs$2.read(fd, buffer, offset, length, position, (err, bytesRead, _buffer) => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve({ bytesRead, buffer: _buffer });
|
|
});
|
|
});
|
|
}
|
|
FsPromise.read = read;
|
|
async function writeFile(path, data) {
|
|
return new Promise((resolve, reject) => {
|
|
fs$2.writeFile(path, data, err => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
FsPromise.writeFile = writeFile;
|
|
function writeFileSync(path, data) {
|
|
fs$2.writeFileSync(path, data);
|
|
}
|
|
FsPromise.writeFileSync = writeFileSync;
|
|
async function readFile(path) {
|
|
return new Promise((resolve, reject) => {
|
|
fs$2.readFile(path, (err, buffer) => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve(buffer);
|
|
});
|
|
});
|
|
}
|
|
FsPromise.readFile = readFile;
|
|
|
|
var core$3 = {};
|
|
|
|
var ReadStreamTokenizer$1 = {};
|
|
|
|
var AbstractTokenizer$1 = {};
|
|
|
|
var lib$2 = {};
|
|
|
|
var EndOfFileStream = {};
|
|
|
|
(function (exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.EndOfStreamError = exports.defaultMessages = void 0;
|
|
exports.defaultMessages = 'End-Of-Stream';
|
|
/**
|
|
* Thrown on read operation of the end of file or stream has been reached
|
|
*/
|
|
class EndOfStreamError extends Error {
|
|
constructor() {
|
|
super(exports.defaultMessages);
|
|
}
|
|
}
|
|
exports.EndOfStreamError = EndOfStreamError;
|
|
} (EndOfFileStream));
|
|
|
|
var StreamReader = {};
|
|
|
|
var Deferred$1 = {};
|
|
|
|
Object.defineProperty(Deferred$1, "__esModule", { value: true });
|
|
Deferred$1.Deferred = void 0;
|
|
class Deferred {
|
|
constructor() {
|
|
this.resolve = () => null;
|
|
this.reject = () => null;
|
|
this.promise = new Promise((resolve, reject) => {
|
|
this.reject = reject;
|
|
this.resolve = resolve;
|
|
});
|
|
}
|
|
}
|
|
Deferred$1.Deferred = Deferred;
|
|
|
|
(function (exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.StreamReader = exports.EndOfStreamError = void 0;
|
|
const EndOfFileStream_1 = EndOfFileStream;
|
|
const Deferred_1 = Deferred$1;
|
|
var EndOfFileStream_2 = EndOfFileStream;
|
|
Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return EndOfFileStream_2.EndOfStreamError; } });
|
|
const maxStreamReadSize = 1 * 1024 * 1024; // Maximum request length on read-stream operation
|
|
class StreamReader {
|
|
constructor(s) {
|
|
this.s = s;
|
|
/**
|
|
* Deferred used for postponed read request (as not data is yet available to read)
|
|
*/
|
|
this.deferred = null;
|
|
this.endOfStream = false;
|
|
/**
|
|
* Store peeked data
|
|
* @type {Array}
|
|
*/
|
|
this.peekQueue = [];
|
|
if (!s.read || !s.once) {
|
|
throw new Error('Expected an instance of stream.Readable');
|
|
}
|
|
this.s.once('end', () => this.reject(new EndOfFileStream_1.EndOfStreamError()));
|
|
this.s.once('error', err => this.reject(err));
|
|
this.s.once('close', () => this.reject(new Error('Stream closed')));
|
|
}
|
|
/**
|
|
* Read ahead (peek) from stream. Subsequent read or peeks will return the same data
|
|
* @param uint8Array - Uint8Array (or Buffer) to store data read from stream in
|
|
* @param offset - Offset target
|
|
* @param length - Number of bytes to read
|
|
* @returns Number of bytes peeked
|
|
*/
|
|
async peek(uint8Array, offset, length) {
|
|
const bytesRead = await this.read(uint8Array, offset, length);
|
|
this.peekQueue.push(uint8Array.subarray(offset, offset + bytesRead)); // Put read data back to peek buffer
|
|
return bytesRead;
|
|
}
|
|
/**
|
|
* Read chunk from stream
|
|
* @param buffer - Target Uint8Array (or Buffer) to store data read from stream in
|
|
* @param offset - Offset target
|
|
* @param length - Number of bytes to read
|
|
* @returns Number of bytes read
|
|
*/
|
|
async read(buffer, offset, length) {
|
|
if (length === 0) {
|
|
return 0;
|
|
}
|
|
if (this.peekQueue.length === 0 && this.endOfStream) {
|
|
throw new EndOfFileStream_1.EndOfStreamError();
|
|
}
|
|
let remaining = length;
|
|
let bytesRead = 0;
|
|
// consume peeked data first
|
|
while (this.peekQueue.length > 0 && remaining > 0) {
|
|
const peekData = this.peekQueue.pop(); // Front of queue
|
|
if (!peekData)
|
|
throw new Error('peekData should be defined');
|
|
const lenCopy = Math.min(peekData.length, remaining);
|
|
buffer.set(peekData.subarray(0, lenCopy), offset + bytesRead);
|
|
bytesRead += lenCopy;
|
|
remaining -= lenCopy;
|
|
if (lenCopy < peekData.length) {
|
|
// remainder back to queue
|
|
this.peekQueue.push(peekData.subarray(lenCopy));
|
|
}
|
|
}
|
|
// continue reading from stream if required
|
|
while (remaining > 0 && !this.endOfStream) {
|
|
const reqLen = Math.min(remaining, maxStreamReadSize);
|
|
const chunkLen = await this.readFromStream(buffer, offset + bytesRead, reqLen);
|
|
bytesRead += chunkLen;
|
|
if (chunkLen < reqLen)
|
|
break;
|
|
remaining -= chunkLen;
|
|
}
|
|
return bytesRead;
|
|
}
|
|
/**
|
|
* Read chunk from stream
|
|
* @param buffer Target Uint8Array (or Buffer) to store data read from stream in
|
|
* @param offset Offset target
|
|
* @param length Number of bytes to read
|
|
* @returns Number of bytes read
|
|
*/
|
|
async readFromStream(buffer, offset, length) {
|
|
const readBuffer = this.s.read(length);
|
|
if (readBuffer) {
|
|
buffer.set(readBuffer, offset);
|
|
return readBuffer.length;
|
|
}
|
|
else {
|
|
const request = {
|
|
buffer,
|
|
offset,
|
|
length,
|
|
deferred: new Deferred_1.Deferred()
|
|
};
|
|
this.deferred = request.deferred;
|
|
this.s.once('readable', () => {
|
|
this.readDeferred(request);
|
|
});
|
|
return request.deferred.promise;
|
|
}
|
|
}
|
|
/**
|
|
* Process deferred read request
|
|
* @param request Deferred read request
|
|
*/
|
|
readDeferred(request) {
|
|
const readBuffer = this.s.read(request.length);
|
|
if (readBuffer) {
|
|
request.buffer.set(readBuffer, request.offset);
|
|
request.deferred.resolve(readBuffer.length);
|
|
this.deferred = null;
|
|
}
|
|
else {
|
|
this.s.once('readable', () => {
|
|
this.readDeferred(request);
|
|
});
|
|
}
|
|
}
|
|
reject(err) {
|
|
this.endOfStream = true;
|
|
if (this.deferred) {
|
|
this.deferred.reject(err);
|
|
this.deferred = null;
|
|
}
|
|
}
|
|
}
|
|
exports.StreamReader = StreamReader;
|
|
} (StreamReader));
|
|
|
|
(function (exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.StreamReader = exports.EndOfStreamError = void 0;
|
|
var EndOfFileStream_1 = EndOfFileStream;
|
|
Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return EndOfFileStream_1.EndOfStreamError; } });
|
|
var StreamReader_1 = StreamReader;
|
|
Object.defineProperty(exports, "StreamReader", { enumerable: true, get: function () { return StreamReader_1.StreamReader; } });
|
|
} (lib$2));
|
|
|
|
Object.defineProperty(AbstractTokenizer$1, "__esModule", { value: true });
|
|
AbstractTokenizer$1.AbstractTokenizer = void 0;
|
|
const peek_readable_1$3 = lib$2;
|
|
/**
|
|
* Core tokenizer
|
|
*/
|
|
class AbstractTokenizer {
|
|
constructor(fileInfo) {
|
|
/**
|
|
* Tokenizer-stream position
|
|
*/
|
|
this.position = 0;
|
|
this.numBuffer = new Uint8Array(8);
|
|
this.fileInfo = fileInfo ? fileInfo : {};
|
|
}
|
|
/**
|
|
* Read a token from the tokenizer-stream
|
|
* @param token - The token to read
|
|
* @param position - If provided, the desired position in the tokenizer-stream
|
|
* @returns Promise with token data
|
|
*/
|
|
async readToken(token, position = this.position) {
|
|
const uint8Array = Buffer.alloc(token.len);
|
|
const len = await this.readBuffer(uint8Array, { position });
|
|
if (len < token.len)
|
|
throw new peek_readable_1$3.EndOfStreamError();
|
|
return token.get(uint8Array, 0);
|
|
}
|
|
/**
|
|
* Peek a token from the tokenizer-stream.
|
|
* @param token - Token to peek from the tokenizer-stream.
|
|
* @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.
|
|
* @returns Promise with token data
|
|
*/
|
|
async peekToken(token, position = this.position) {
|
|
const uint8Array = Buffer.alloc(token.len);
|
|
const len = await this.peekBuffer(uint8Array, { position });
|
|
if (len < token.len)
|
|
throw new peek_readable_1$3.EndOfStreamError();
|
|
return token.get(uint8Array, 0);
|
|
}
|
|
/**
|
|
* Read a numeric token from the stream
|
|
* @param token - Numeric token
|
|
* @returns Promise with number
|
|
*/
|
|
async readNumber(token) {
|
|
const len = await this.readBuffer(this.numBuffer, { length: token.len });
|
|
if (len < token.len)
|
|
throw new peek_readable_1$3.EndOfStreamError();
|
|
return token.get(this.numBuffer, 0);
|
|
}
|
|
/**
|
|
* Read a numeric token from the stream
|
|
* @param token - Numeric token
|
|
* @returns Promise with number
|
|
*/
|
|
async peekNumber(token) {
|
|
const len = await this.peekBuffer(this.numBuffer, { length: token.len });
|
|
if (len < token.len)
|
|
throw new peek_readable_1$3.EndOfStreamError();
|
|
return token.get(this.numBuffer, 0);
|
|
}
|
|
/**
|
|
* Ignore number of bytes, advances the pointer in under tokenizer-stream.
|
|
* @param length - Number of bytes to ignore
|
|
* @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available
|
|
*/
|
|
async ignore(length) {
|
|
if (this.fileInfo.size !== undefined) {
|
|
const bytesLeft = this.fileInfo.size - this.position;
|
|
if (length > bytesLeft) {
|
|
this.position += bytesLeft;
|
|
return bytesLeft;
|
|
}
|
|
}
|
|
this.position += length;
|
|
return length;
|
|
}
|
|
async close() {
|
|
// empty
|
|
}
|
|
normalizeOptions(uint8Array, options) {
|
|
if (options && options.position !== undefined && options.position < this.position) {
|
|
throw new Error('`options.position` must be equal or greater than `tokenizer.position`');
|
|
}
|
|
if (options) {
|
|
return {
|
|
mayBeLess: options.mayBeLess === true,
|
|
offset: options.offset ? options.offset : 0,
|
|
length: options.length ? options.length : (uint8Array.length - (options.offset ? options.offset : 0)),
|
|
position: options.position ? options.position : this.position
|
|
};
|
|
}
|
|
return {
|
|
mayBeLess: false,
|
|
offset: 0,
|
|
length: uint8Array.length,
|
|
position: this.position
|
|
};
|
|
}
|
|
}
|
|
AbstractTokenizer$1.AbstractTokenizer = AbstractTokenizer;
|
|
|
|
Object.defineProperty(ReadStreamTokenizer$1, "__esModule", { value: true });
|
|
ReadStreamTokenizer$1.ReadStreamTokenizer = void 0;
|
|
const AbstractTokenizer_1$2 = AbstractTokenizer$1;
|
|
const peek_readable_1$2 = lib$2;
|
|
const maxBufferSize = 256000;
|
|
class ReadStreamTokenizer extends AbstractTokenizer_1$2.AbstractTokenizer {
|
|
constructor(stream, fileInfo) {
|
|
super(fileInfo);
|
|
this.streamReader = new peek_readable_1$2.StreamReader(stream);
|
|
}
|
|
/**
|
|
* Get file information, an HTTP-client may implement this doing a HEAD request
|
|
* @return Promise with file information
|
|
*/
|
|
async getFileInfo() {
|
|
return this.fileInfo;
|
|
}
|
|
/**
|
|
* Read buffer from tokenizer
|
|
* @param uint8Array - Target Uint8Array to fill with data read from the tokenizer-stream
|
|
* @param options - Read behaviour options
|
|
* @returns Promise with number of bytes read
|
|
*/
|
|
async readBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
const skipBytes = normOptions.position - this.position;
|
|
if (skipBytes > 0) {
|
|
await this.ignore(skipBytes);
|
|
return this.readBuffer(uint8Array, options);
|
|
}
|
|
else if (skipBytes < 0) {
|
|
throw new Error('`options.position` must be equal or greater than `tokenizer.position`');
|
|
}
|
|
if (normOptions.length === 0) {
|
|
return 0;
|
|
}
|
|
const bytesRead = await this.streamReader.read(uint8Array, normOptions.offset, normOptions.length);
|
|
this.position += bytesRead;
|
|
if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) {
|
|
throw new peek_readable_1$2.EndOfStreamError();
|
|
}
|
|
return bytesRead;
|
|
}
|
|
/**
|
|
* Peek (read ahead) buffer from tokenizer
|
|
* @param uint8Array - Uint8Array (or Buffer) to write data to
|
|
* @param options - Read behaviour options
|
|
* @returns Promise with number of bytes peeked
|
|
*/
|
|
async peekBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
let bytesRead = 0;
|
|
if (normOptions.position) {
|
|
const skipBytes = normOptions.position - this.position;
|
|
if (skipBytes > 0) {
|
|
const skipBuffer = new Uint8Array(normOptions.length + skipBytes);
|
|
bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess });
|
|
uint8Array.set(skipBuffer.subarray(skipBytes), normOptions.offset);
|
|
return bytesRead - skipBytes;
|
|
}
|
|
else if (skipBytes < 0) {
|
|
throw new Error('Cannot peek from a negative offset in a stream');
|
|
}
|
|
}
|
|
if (normOptions.length > 0) {
|
|
try {
|
|
bytesRead = await this.streamReader.peek(uint8Array, normOptions.offset, normOptions.length);
|
|
}
|
|
catch (err) {
|
|
if (options && options.mayBeLess && err instanceof peek_readable_1$2.EndOfStreamError) {
|
|
return 0;
|
|
}
|
|
throw err;
|
|
}
|
|
if ((!normOptions.mayBeLess) && bytesRead < normOptions.length) {
|
|
throw new peek_readable_1$2.EndOfStreamError();
|
|
}
|
|
}
|
|
return bytesRead;
|
|
}
|
|
async ignore(length) {
|
|
// debug(`ignore ${this.position}...${this.position + length - 1}`);
|
|
const bufSize = Math.min(maxBufferSize, length);
|
|
const buf = new Uint8Array(bufSize);
|
|
let totBytesRead = 0;
|
|
while (totBytesRead < length) {
|
|
const remaining = length - totBytesRead;
|
|
const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) });
|
|
if (bytesRead < 0) {
|
|
return bytesRead;
|
|
}
|
|
totBytesRead += bytesRead;
|
|
}
|
|
return totBytesRead;
|
|
}
|
|
}
|
|
ReadStreamTokenizer$1.ReadStreamTokenizer = ReadStreamTokenizer;
|
|
|
|
var BufferTokenizer$1 = {};
|
|
|
|
Object.defineProperty(BufferTokenizer$1, "__esModule", { value: true });
|
|
BufferTokenizer$1.BufferTokenizer = void 0;
|
|
const peek_readable_1$1 = lib$2;
|
|
const AbstractTokenizer_1$1 = AbstractTokenizer$1;
|
|
class BufferTokenizer extends AbstractTokenizer_1$1.AbstractTokenizer {
|
|
/**
|
|
* Construct BufferTokenizer
|
|
* @param uint8Array - Uint8Array to tokenize
|
|
* @param fileInfo - Pass additional file information to the tokenizer
|
|
*/
|
|
constructor(uint8Array, fileInfo) {
|
|
super(fileInfo);
|
|
this.uint8Array = uint8Array;
|
|
this.fileInfo.size = this.fileInfo.size ? this.fileInfo.size : uint8Array.length;
|
|
}
|
|
/**
|
|
* Read buffer from tokenizer
|
|
* @param uint8Array - Uint8Array to tokenize
|
|
* @param options - Read behaviour options
|
|
* @returns {Promise<number>}
|
|
*/
|
|
async readBuffer(uint8Array, options) {
|
|
if (options && options.position) {
|
|
if (options.position < this.position) {
|
|
throw new Error('`options.position` must be equal or greater than `tokenizer.position`');
|
|
}
|
|
this.position = options.position;
|
|
}
|
|
const bytesRead = await this.peekBuffer(uint8Array, options);
|
|
this.position += bytesRead;
|
|
return bytesRead;
|
|
}
|
|
/**
|
|
* Peek (read ahead) buffer from tokenizer
|
|
* @param uint8Array
|
|
* @param options - Read behaviour options
|
|
* @returns {Promise<number>}
|
|
*/
|
|
async peekBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);
|
|
if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {
|
|
throw new peek_readable_1$1.EndOfStreamError();
|
|
}
|
|
else {
|
|
uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read), normOptions.offset);
|
|
return bytes2read;
|
|
}
|
|
}
|
|
async close() {
|
|
// empty
|
|
}
|
|
}
|
|
BufferTokenizer$1.BufferTokenizer = BufferTokenizer;
|
|
|
|
(function (exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.fromBuffer = exports.fromStream = exports.EndOfStreamError = void 0;
|
|
const ReadStreamTokenizer_1 = ReadStreamTokenizer$1;
|
|
const BufferTokenizer_1 = BufferTokenizer$1;
|
|
var peek_readable_1 = lib$2;
|
|
Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return peek_readable_1.EndOfStreamError; } });
|
|
/**
|
|
* Construct ReadStreamTokenizer from given Stream.
|
|
* Will set fileSize, if provided given Stream has set the .path property/
|
|
* @param stream - Read from Node.js Stream.Readable
|
|
* @param fileInfo - Pass the file information, like size and MIME-type of the corresponding stream.
|
|
* @returns ReadStreamTokenizer
|
|
*/
|
|
function fromStream(stream, fileInfo) {
|
|
fileInfo = fileInfo ? fileInfo : {};
|
|
return new ReadStreamTokenizer_1.ReadStreamTokenizer(stream, fileInfo);
|
|
}
|
|
exports.fromStream = fromStream;
|
|
/**
|
|
* Construct ReadStreamTokenizer from given Buffer.
|
|
* @param uint8Array - Uint8Array to tokenize
|
|
* @param fileInfo - Pass additional file information to the tokenizer
|
|
* @returns BufferTokenizer
|
|
*/
|
|
function fromBuffer(uint8Array, fileInfo) {
|
|
return new BufferTokenizer_1.BufferTokenizer(uint8Array, fileInfo);
|
|
}
|
|
exports.fromBuffer = fromBuffer;
|
|
} (core$3));
|
|
|
|
var FileTokenizer$1 = {};
|
|
|
|
Object.defineProperty(FileTokenizer$1, "__esModule", { value: true });
|
|
FileTokenizer$1.fromFile = FileTokenizer$1.FileTokenizer = void 0;
|
|
const AbstractTokenizer_1 = AbstractTokenizer$1;
|
|
const peek_readable_1 = lib$2;
|
|
const fs$1 = FsPromise;
|
|
class FileTokenizer extends AbstractTokenizer_1.AbstractTokenizer {
|
|
constructor(fd, fileInfo) {
|
|
super(fileInfo);
|
|
this.fd = fd;
|
|
}
|
|
/**
|
|
* Read buffer from file
|
|
* @param uint8Array - Uint8Array to write result to
|
|
* @param options - Read behaviour options
|
|
* @returns Promise number of bytes read
|
|
*/
|
|
async readBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
this.position = normOptions.position;
|
|
const res = await fs$1.read(this.fd, uint8Array, normOptions.offset, normOptions.length, normOptions.position);
|
|
this.position += res.bytesRead;
|
|
if (res.bytesRead < normOptions.length && (!options || !options.mayBeLess)) {
|
|
throw new peek_readable_1.EndOfStreamError();
|
|
}
|
|
return res.bytesRead;
|
|
}
|
|
/**
|
|
* Peek buffer from file
|
|
* @param uint8Array - Uint8Array (or Buffer) to write data to
|
|
* @param options - Read behaviour options
|
|
* @returns Promise number of bytes read
|
|
*/
|
|
async peekBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
const res = await fs$1.read(this.fd, uint8Array, normOptions.offset, normOptions.length, normOptions.position);
|
|
if ((!normOptions.mayBeLess) && res.bytesRead < normOptions.length) {
|
|
throw new peek_readable_1.EndOfStreamError();
|
|
}
|
|
return res.bytesRead;
|
|
}
|
|
async close() {
|
|
return fs$1.close(this.fd);
|
|
}
|
|
}
|
|
FileTokenizer$1.FileTokenizer = FileTokenizer;
|
|
async function fromFile$1(sourceFilePath) {
|
|
const stat = await fs$1.stat(sourceFilePath);
|
|
if (!stat.isFile) {
|
|
throw new Error(`File not a file: ${sourceFilePath}`);
|
|
}
|
|
const fd = await fs$1.open(sourceFilePath, 'r');
|
|
return new FileTokenizer(fd, { path: sourceFilePath, size: stat.size });
|
|
}
|
|
FileTokenizer$1.fromFile = fromFile$1;
|
|
|
|
(function (exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.fromStream = exports.fromBuffer = exports.EndOfStreamError = exports.fromFile = void 0;
|
|
const fs = FsPromise;
|
|
const core = core$3;
|
|
var FileTokenizer_1 = FileTokenizer$1;
|
|
Object.defineProperty(exports, "fromFile", { enumerable: true, get: function () { return FileTokenizer_1.fromFile; } });
|
|
var core_1 = core$3;
|
|
Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return core_1.EndOfStreamError; } });
|
|
Object.defineProperty(exports, "fromBuffer", { enumerable: true, get: function () { return core_1.fromBuffer; } });
|
|
/**
|
|
* Construct ReadStreamTokenizer from given Stream.
|
|
* Will set fileSize, if provided given Stream has set the .path property.
|
|
* @param stream - Node.js Stream.Readable
|
|
* @param fileInfo - Pass additional file information to the tokenizer
|
|
* @returns Tokenizer
|
|
*/
|
|
async function fromStream(stream, fileInfo) {
|
|
fileInfo = fileInfo ? fileInfo : {};
|
|
if (stream.path) {
|
|
const stat = await fs.stat(stream.path);
|
|
fileInfo.path = stream.path;
|
|
fileInfo.size = stat.size;
|
|
}
|
|
return core.fromStream(stream, fileInfo);
|
|
}
|
|
exports.fromStream = fromStream;
|
|
} (lib$3));
|
|
|
|
var lib$1 = {};
|
|
|
|
var ieee754 = {};
|
|
|
|
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
|
|
ieee754.read = function (buffer, offset, isLE, mLen, nBytes) {
|
|
var e, m;
|
|
var eLen = (nBytes * 8) - mLen - 1;
|
|
var eMax = (1 << eLen) - 1;
|
|
var eBias = eMax >> 1;
|
|
var nBits = -7;
|
|
var i = isLE ? (nBytes - 1) : 0;
|
|
var d = isLE ? -1 : 1;
|
|
var s = buffer[offset + i];
|
|
|
|
i += d;
|
|
|
|
e = s & ((1 << (-nBits)) - 1);
|
|
s >>= (-nBits);
|
|
nBits += eLen;
|
|
for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
|
|
|
|
m = e & ((1 << (-nBits)) - 1);
|
|
e >>= (-nBits);
|
|
nBits += mLen;
|
|
for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
|
|
|
|
if (e === 0) {
|
|
e = 1 - eBias;
|
|
} else if (e === eMax) {
|
|
return m ? NaN : ((s ? -1 : 1) * Infinity)
|
|
} else {
|
|
m = m + Math.pow(2, mLen);
|
|
e = e - eBias;
|
|
}
|
|
return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
|
|
};
|
|
|
|
ieee754.write = function (buffer, value, offset, isLE, mLen, nBytes) {
|
|
var e, m, c;
|
|
var eLen = (nBytes * 8) - mLen - 1;
|
|
var eMax = (1 << eLen) - 1;
|
|
var eBias = eMax >> 1;
|
|
var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
|
|
var i = isLE ? 0 : (nBytes - 1);
|
|
var d = isLE ? 1 : -1;
|
|
var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
|
|
|
|
value = Math.abs(value);
|
|
|
|
if (isNaN(value) || value === Infinity) {
|
|
m = isNaN(value) ? 1 : 0;
|
|
e = eMax;
|
|
} else {
|
|
e = Math.floor(Math.log(value) / Math.LN2);
|
|
if (value * (c = Math.pow(2, -e)) < 1) {
|
|
e--;
|
|
c *= 2;
|
|
}
|
|
if (e + eBias >= 1) {
|
|
value += rt / c;
|
|
} else {
|
|
value += rt * Math.pow(2, 1 - eBias);
|
|
}
|
|
if (value * c >= 2) {
|
|
e++;
|
|
c /= 2;
|
|
}
|
|
|
|
if (e + eBias >= eMax) {
|
|
m = 0;
|
|
e = eMax;
|
|
} else if (e + eBias >= 1) {
|
|
m = ((value * c) - 1) * Math.pow(2, mLen);
|
|
e = e + eBias;
|
|
} else {
|
|
m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
|
|
e = 0;
|
|
}
|
|
}
|
|
|
|
for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
|
|
|
|
e = (e << mLen) | m;
|
|
eLen += mLen;
|
|
for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
|
|
|
|
buffer[offset + i - d] |= s * 128;
|
|
};
|
|
|
|
(function (exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.AnsiStringType = exports.StringType = exports.BufferType = exports.Uint8ArrayType = exports.IgnoreType = exports.Float80_LE = exports.Float80_BE = exports.Float64_LE = exports.Float64_BE = exports.Float32_LE = exports.Float32_BE = exports.Float16_LE = exports.Float16_BE = exports.INT64_BE = exports.UINT64_BE = exports.INT64_LE = exports.UINT64_LE = exports.INT32_LE = exports.INT32_BE = exports.INT24_BE = exports.INT24_LE = exports.INT16_LE = exports.INT16_BE = exports.INT8 = exports.UINT32_BE = exports.UINT32_LE = exports.UINT24_BE = exports.UINT24_LE = exports.UINT16_BE = exports.UINT16_LE = exports.UINT8 = void 0;
|
|
const ieee754$1 = ieee754;
|
|
// Primitive types
|
|
function dv(array) {
|
|
return new DataView(array.buffer, array.byteOffset);
|
|
}
|
|
/**
|
|
* 8-bit unsigned integer
|
|
*/
|
|
exports.UINT8 = {
|
|
len: 1,
|
|
get(array, offset) {
|
|
return dv(array).getUint8(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint8(offset, value);
|
|
return offset + 1;
|
|
}
|
|
};
|
|
/**
|
|
* 16-bit unsigned integer, Little Endian byte order
|
|
*/
|
|
exports.UINT16_LE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return dv(array).getUint16(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint16(offset, value, true);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 16-bit unsigned integer, Big Endian byte order
|
|
*/
|
|
exports.UINT16_BE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return dv(array).getUint16(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint16(offset, value);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 24-bit unsigned integer, Little Endian byte order
|
|
*/
|
|
exports.UINT24_LE = {
|
|
len: 3,
|
|
get(array, offset) {
|
|
const dataView = dv(array);
|
|
return dataView.getUint8(offset) + (dataView.getUint16(offset + 1, true) << 8);
|
|
},
|
|
put(array, offset, value) {
|
|
const dataView = dv(array);
|
|
dataView.setUint8(offset, value & 0xff);
|
|
dataView.setUint16(offset + 1, value >> 8, true);
|
|
return offset + 3;
|
|
}
|
|
};
|
|
/**
|
|
* 24-bit unsigned integer, Big Endian byte order
|
|
*/
|
|
exports.UINT24_BE = {
|
|
len: 3,
|
|
get(array, offset) {
|
|
const dataView = dv(array);
|
|
return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);
|
|
},
|
|
put(array, offset, value) {
|
|
const dataView = dv(array);
|
|
dataView.setUint16(offset, value >> 8);
|
|
dataView.setUint8(offset + 2, value & 0xff);
|
|
return offset + 3;
|
|
}
|
|
};
|
|
/**
|
|
* 32-bit unsigned integer, Little Endian byte order
|
|
*/
|
|
exports.UINT32_LE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getUint32(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint32(offset, value, true);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* 32-bit unsigned integer, Big Endian byte order
|
|
*/
|
|
exports.UINT32_BE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getUint32(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint32(offset, value);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* 8-bit signed integer
|
|
*/
|
|
exports.INT8 = {
|
|
len: 1,
|
|
get(array, offset) {
|
|
return dv(array).getInt8(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt8(offset, value);
|
|
return offset + 1;
|
|
}
|
|
};
|
|
/**
|
|
* 16-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT16_BE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return dv(array).getInt16(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt16(offset, value);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 16-bit signed integer, Little Endian byte order
|
|
*/
|
|
exports.INT16_LE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return dv(array).getInt16(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt16(offset, value, true);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 24-bit signed integer, Little Endian byte order
|
|
*/
|
|
exports.INT24_LE = {
|
|
len: 3,
|
|
get(array, offset) {
|
|
const unsigned = exports.UINT24_LE.get(array, offset);
|
|
return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;
|
|
},
|
|
put(array, offset, value) {
|
|
const dataView = dv(array);
|
|
dataView.setUint8(offset, value & 0xff);
|
|
dataView.setUint16(offset + 1, value >> 8, true);
|
|
return offset + 3;
|
|
}
|
|
};
|
|
/**
|
|
* 24-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT24_BE = {
|
|
len: 3,
|
|
get(array, offset) {
|
|
const unsigned = exports.UINT24_BE.get(array, offset);
|
|
return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;
|
|
},
|
|
put(array, offset, value) {
|
|
const dataView = dv(array);
|
|
dataView.setUint16(offset, value >> 8);
|
|
dataView.setUint8(offset + 2, value & 0xff);
|
|
return offset + 3;
|
|
}
|
|
};
|
|
/**
|
|
* 32-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT32_BE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getInt32(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt32(offset, value);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* 32-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT32_LE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getInt32(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt32(offset, value, true);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* 64-bit unsigned integer, Little Endian byte order
|
|
*/
|
|
exports.UINT64_LE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getBigUint64(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setBigUint64(offset, value, true);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* 64-bit signed integer, Little Endian byte order
|
|
*/
|
|
exports.INT64_LE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getBigInt64(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setBigInt64(offset, value, true);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* 64-bit unsigned integer, Big Endian byte order
|
|
*/
|
|
exports.UINT64_BE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getBigUint64(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setBigUint64(offset, value);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* 64-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT64_BE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getBigInt64(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setBigInt64(offset, value);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 16-bit (half precision) float, big endian
|
|
*/
|
|
exports.Float16_BE = {
|
|
len: 2,
|
|
get(dataView, offset) {
|
|
return ieee754$1.read(dataView, offset, false, 10, this.len);
|
|
},
|
|
put(dataView, offset, value) {
|
|
ieee754$1.write(dataView, value, offset, false, 10, this.len);
|
|
return offset + this.len;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 16-bit (half precision) float, little endian
|
|
*/
|
|
exports.Float16_LE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return ieee754$1.read(array, offset, true, 10, this.len);
|
|
},
|
|
put(array, offset, value) {
|
|
ieee754$1.write(array, value, offset, true, 10, this.len);
|
|
return offset + this.len;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 32-bit (single precision) float, big endian
|
|
*/
|
|
exports.Float32_BE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getFloat32(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setFloat32(offset, value);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 32-bit (single precision) float, little endian
|
|
*/
|
|
exports.Float32_LE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getFloat32(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setFloat32(offset, value, true);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 64-bit (double precision) float, big endian
|
|
*/
|
|
exports.Float64_BE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getFloat64(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setFloat64(offset, value);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 64-bit (double precision) float, little endian
|
|
*/
|
|
exports.Float64_LE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getFloat64(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setFloat64(offset, value, true);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 80-bit (extended precision) float, big endian
|
|
*/
|
|
exports.Float80_BE = {
|
|
len: 10,
|
|
get(array, offset) {
|
|
return ieee754$1.read(array, offset, false, 63, this.len);
|
|
},
|
|
put(array, offset, value) {
|
|
ieee754$1.write(array, value, offset, false, 63, this.len);
|
|
return offset + this.len;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 80-bit (extended precision) float, little endian
|
|
*/
|
|
exports.Float80_LE = {
|
|
len: 10,
|
|
get(array, offset) {
|
|
return ieee754$1.read(array, offset, true, 63, this.len);
|
|
},
|
|
put(array, offset, value) {
|
|
ieee754$1.write(array, value, offset, true, 63, this.len);
|
|
return offset + this.len;
|
|
}
|
|
};
|
|
/**
|
|
* Ignore a given number of bytes
|
|
*/
|
|
class IgnoreType {
|
|
/**
|
|
* @param len number of bytes to ignore
|
|
*/
|
|
constructor(len) {
|
|
this.len = len;
|
|
}
|
|
// ToDo: don't read, but skip data
|
|
get(array, off) {
|
|
}
|
|
}
|
|
exports.IgnoreType = IgnoreType;
|
|
class Uint8ArrayType {
|
|
constructor(len) {
|
|
this.len = len;
|
|
}
|
|
get(array, offset) {
|
|
return array.subarray(offset, offset + this.len);
|
|
}
|
|
}
|
|
exports.Uint8ArrayType = Uint8ArrayType;
|
|
class BufferType {
|
|
constructor(len) {
|
|
this.len = len;
|
|
}
|
|
get(uint8Array, off) {
|
|
return Buffer.from(uint8Array.subarray(off, off + this.len));
|
|
}
|
|
}
|
|
exports.BufferType = BufferType;
|
|
/**
|
|
* Consume a fixed number of bytes from the stream and return a string with a specified encoding.
|
|
*/
|
|
class StringType {
|
|
constructor(len, encoding) {
|
|
this.len = len;
|
|
this.encoding = encoding;
|
|
}
|
|
get(uint8Array, offset) {
|
|
return Buffer.from(uint8Array).toString(this.encoding, offset, offset + this.len);
|
|
}
|
|
}
|
|
exports.StringType = StringType;
|
|
/**
|
|
* ANSI Latin 1 String
|
|
* Using windows-1252 / ISO 8859-1 decoding
|
|
*/
|
|
class AnsiStringType {
|
|
constructor(len) {
|
|
this.len = len;
|
|
}
|
|
static decode(buffer, offset, until) {
|
|
let str = '';
|
|
for (let i = offset; i < until; ++i) {
|
|
str += AnsiStringType.codePointToString(AnsiStringType.singleByteDecoder(buffer[i]));
|
|
}
|
|
return str;
|
|
}
|
|
static inRange(a, min, max) {
|
|
return min <= a && a <= max;
|
|
}
|
|
static codePointToString(cp) {
|
|
if (cp <= 0xFFFF) {
|
|
return String.fromCharCode(cp);
|
|
}
|
|
else {
|
|
cp -= 0x10000;
|
|
return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00);
|
|
}
|
|
}
|
|
static singleByteDecoder(bite) {
|
|
if (AnsiStringType.inRange(bite, 0x00, 0x7F)) {
|
|
return bite;
|
|
}
|
|
const codePoint = AnsiStringType.windows1252[bite - 0x80];
|
|
if (codePoint === null) {
|
|
throw Error('invaliding encoding');
|
|
}
|
|
return codePoint;
|
|
}
|
|
get(buffer, offset = 0) {
|
|
return AnsiStringType.decode(buffer, offset, offset + this.len);
|
|
}
|
|
}
|
|
exports.AnsiStringType = AnsiStringType;
|
|
AnsiStringType.windows1252 = [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352,
|
|
8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732,
|
|
8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168,
|
|
169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
|
|
185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
|
|
201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
|
|
217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
|
|
233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
|
|
248, 249, 250, 251, 252, 253, 254, 255];
|
|
} (lib$1));
|
|
|
|
var util$3 = {};
|
|
|
|
util$3.stringToBytes = string => [...string].map(character => character.charCodeAt(0));
|
|
|
|
/**
|
|
Checks whether the TAR checksum is valid.
|
|
|
|
@param {Buffer} buffer - The TAR header `[offset ... offset + 512]`.
|
|
@param {number} offset - TAR header offset.
|
|
@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.
|
|
*/
|
|
util$3.tarHeaderChecksumMatches = (buffer, offset = 0) => {
|
|
const readSum = parseInt(buffer.toString('utf8', 148, 154).replace(/\0.*$/, '').trim(), 8); // Read sum in header
|
|
if (isNaN(readSum)) {
|
|
return false;
|
|
}
|
|
|
|
let sum = 8 * 0x20; // Initialize signed bit sum
|
|
|
|
for (let i = offset; i < offset + 148; i++) {
|
|
sum += buffer[i];
|
|
}
|
|
|
|
for (let i = offset + 156; i < offset + 512; i++) {
|
|
sum += buffer[i];
|
|
}
|
|
|
|
return readSum === sum;
|
|
};
|
|
|
|
/**
|
|
ID3 UINT32 sync-safe tokenizer token.
|
|
28 bits (representing up to 256MB) integer, the msb is 0 to avoid "false syncsignals".
|
|
*/
|
|
util$3.uint32SyncSafeToken = {
|
|
get: (buffer, offset) => {
|
|
return (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21);
|
|
},
|
|
len: 4
|
|
};
|
|
|
|
var supported$1 = {
|
|
extensions: [
|
|
'jpg',
|
|
'png',
|
|
'apng',
|
|
'gif',
|
|
'webp',
|
|
'flif',
|
|
'xcf',
|
|
'cr2',
|
|
'cr3',
|
|
'orf',
|
|
'arw',
|
|
'dng',
|
|
'nef',
|
|
'rw2',
|
|
'raf',
|
|
'tif',
|
|
'bmp',
|
|
'icns',
|
|
'jxr',
|
|
'psd',
|
|
'indd',
|
|
'zip',
|
|
'tar',
|
|
'rar',
|
|
'gz',
|
|
'bz2',
|
|
'7z',
|
|
'dmg',
|
|
'mp4',
|
|
'mid',
|
|
'mkv',
|
|
'webm',
|
|
'mov',
|
|
'avi',
|
|
'mpg',
|
|
'mp2',
|
|
'mp3',
|
|
'm4a',
|
|
'oga',
|
|
'ogg',
|
|
'ogv',
|
|
'opus',
|
|
'flac',
|
|
'wav',
|
|
'spx',
|
|
'amr',
|
|
'pdf',
|
|
'epub',
|
|
'exe',
|
|
'swf',
|
|
'rtf',
|
|
'wasm',
|
|
'woff',
|
|
'woff2',
|
|
'eot',
|
|
'ttf',
|
|
'otf',
|
|
'ico',
|
|
'flv',
|
|
'ps',
|
|
'xz',
|
|
'sqlite',
|
|
'nes',
|
|
'crx',
|
|
'xpi',
|
|
'cab',
|
|
'deb',
|
|
'ar',
|
|
'rpm',
|
|
'Z',
|
|
'lz',
|
|
'cfb',
|
|
'mxf',
|
|
'mts',
|
|
'blend',
|
|
'bpg',
|
|
'docx',
|
|
'pptx',
|
|
'xlsx',
|
|
'3gp',
|
|
'3g2',
|
|
'jp2',
|
|
'jpm',
|
|
'jpx',
|
|
'mj2',
|
|
'aif',
|
|
'qcp',
|
|
'odt',
|
|
'ods',
|
|
'odp',
|
|
'xml',
|
|
'mobi',
|
|
'heic',
|
|
'cur',
|
|
'ktx',
|
|
'ape',
|
|
'wv',
|
|
'dcm',
|
|
'ics',
|
|
'glb',
|
|
'pcap',
|
|
'dsf',
|
|
'lnk',
|
|
'alias',
|
|
'voc',
|
|
'ac3',
|
|
'm4v',
|
|
'm4p',
|
|
'm4b',
|
|
'f4v',
|
|
'f4p',
|
|
'f4b',
|
|
'f4a',
|
|
'mie',
|
|
'asf',
|
|
'ogm',
|
|
'ogx',
|
|
'mpc',
|
|
'arrow',
|
|
'shp',
|
|
'aac',
|
|
'mp1',
|
|
'it',
|
|
's3m',
|
|
'xm',
|
|
'ai',
|
|
'skp',
|
|
'avif',
|
|
'eps',
|
|
'lzh',
|
|
'pgp',
|
|
'asar',
|
|
'stl',
|
|
'chm',
|
|
'3mf',
|
|
'zst',
|
|
'jxl',
|
|
'vcf'
|
|
],
|
|
mimeTypes: [
|
|
'image/jpeg',
|
|
'image/png',
|
|
'image/gif',
|
|
'image/webp',
|
|
'image/flif',
|
|
'image/x-xcf',
|
|
'image/x-canon-cr2',
|
|
'image/x-canon-cr3',
|
|
'image/tiff',
|
|
'image/bmp',
|
|
'image/vnd.ms-photo',
|
|
'image/vnd.adobe.photoshop',
|
|
'application/x-indesign',
|
|
'application/epub+zip',
|
|
'application/x-xpinstall',
|
|
'application/vnd.oasis.opendocument.text',
|
|
'application/vnd.oasis.opendocument.spreadsheet',
|
|
'application/vnd.oasis.opendocument.presentation',
|
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
'application/zip',
|
|
'application/x-tar',
|
|
'application/x-rar-compressed',
|
|
'application/gzip',
|
|
'application/x-bzip2',
|
|
'application/x-7z-compressed',
|
|
'application/x-apple-diskimage',
|
|
'application/x-apache-arrow',
|
|
'video/mp4',
|
|
'audio/midi',
|
|
'video/x-matroska',
|
|
'video/webm',
|
|
'video/quicktime',
|
|
'video/vnd.avi',
|
|
'audio/vnd.wave',
|
|
'audio/qcelp',
|
|
'audio/x-ms-asf',
|
|
'video/x-ms-asf',
|
|
'application/vnd.ms-asf',
|
|
'video/mpeg',
|
|
'video/3gpp',
|
|
'audio/mpeg',
|
|
'audio/mp4', // RFC 4337
|
|
'audio/opus',
|
|
'video/ogg',
|
|
'audio/ogg',
|
|
'application/ogg',
|
|
'audio/x-flac',
|
|
'audio/ape',
|
|
'audio/wavpack',
|
|
'audio/amr',
|
|
'application/pdf',
|
|
'application/x-msdownload',
|
|
'application/x-shockwave-flash',
|
|
'application/rtf',
|
|
'application/wasm',
|
|
'font/woff',
|
|
'font/woff2',
|
|
'application/vnd.ms-fontobject',
|
|
'font/ttf',
|
|
'font/otf',
|
|
'image/x-icon',
|
|
'video/x-flv',
|
|
'application/postscript',
|
|
'application/eps',
|
|
'application/x-xz',
|
|
'application/x-sqlite3',
|
|
'application/x-nintendo-nes-rom',
|
|
'application/x-google-chrome-extension',
|
|
'application/vnd.ms-cab-compressed',
|
|
'application/x-deb',
|
|
'application/x-unix-archive',
|
|
'application/x-rpm',
|
|
'application/x-compress',
|
|
'application/x-lzip',
|
|
'application/x-cfb',
|
|
'application/x-mie',
|
|
'application/mxf',
|
|
'video/mp2t',
|
|
'application/x-blender',
|
|
'image/bpg',
|
|
'image/jp2',
|
|
'image/jpx',
|
|
'image/jpm',
|
|
'image/mj2',
|
|
'audio/aiff',
|
|
'application/xml',
|
|
'application/x-mobipocket-ebook',
|
|
'image/heif',
|
|
'image/heif-sequence',
|
|
'image/heic',
|
|
'image/heic-sequence',
|
|
'image/icns',
|
|
'image/ktx',
|
|
'application/dicom',
|
|
'audio/x-musepack',
|
|
'text/calendar',
|
|
'text/vcard',
|
|
'model/gltf-binary',
|
|
'application/vnd.tcpdump.pcap',
|
|
'audio/x-dsf', // Non-standard
|
|
'application/x.ms.shortcut', // Invented by us
|
|
'application/x.apple.alias', // Invented by us
|
|
'audio/x-voc',
|
|
'audio/vnd.dolby.dd-raw',
|
|
'audio/x-m4a',
|
|
'image/apng',
|
|
'image/x-olympus-orf',
|
|
'image/x-sony-arw',
|
|
'image/x-adobe-dng',
|
|
'image/x-nikon-nef',
|
|
'image/x-panasonic-rw2',
|
|
'image/x-fujifilm-raf',
|
|
'video/x-m4v',
|
|
'video/3gpp2',
|
|
'application/x-esri-shape',
|
|
'audio/aac',
|
|
'audio/x-it',
|
|
'audio/x-s3m',
|
|
'audio/x-xm',
|
|
'video/MP1S',
|
|
'video/MP2P',
|
|
'application/vnd.sketchup.skp',
|
|
'image/avif',
|
|
'application/x-lzh-compressed',
|
|
'application/pgp-encrypted',
|
|
'application/x-asar',
|
|
'model/stl',
|
|
'application/vnd.ms-htmlhelp',
|
|
'model/3mf',
|
|
'image/jxl',
|
|
'application/zstd'
|
|
]
|
|
};
|
|
|
|
const Token = lib$1;
|
|
const strtok3$1 = core$3;
|
|
const {
|
|
stringToBytes,
|
|
tarHeaderChecksumMatches,
|
|
uint32SyncSafeToken
|
|
} = util$3;
|
|
const supported = supported$1;
|
|
|
|
const minimumBytes = 4100; // A fair amount of file-types are detectable within this range
|
|
|
|
async function fromStream(stream) {
|
|
const tokenizer = await strtok3$1.fromStream(stream);
|
|
try {
|
|
return await fromTokenizer(tokenizer);
|
|
} finally {
|
|
await tokenizer.close();
|
|
}
|
|
}
|
|
|
|
async function fromBuffer(input) {
|
|
if (!(input instanceof Uint8Array || input instanceof ArrayBuffer || Buffer.isBuffer(input))) {
|
|
throw new TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`Buffer\` or \`ArrayBuffer\`, got \`${typeof input}\``);
|
|
}
|
|
|
|
const buffer = input instanceof Buffer ? input : Buffer.from(input);
|
|
|
|
if (!(buffer && buffer.length > 1)) {
|
|
return;
|
|
}
|
|
|
|
const tokenizer = strtok3$1.fromBuffer(buffer);
|
|
return fromTokenizer(tokenizer);
|
|
}
|
|
|
|
function _check(buffer, headers, options) {
|
|
options = {
|
|
offset: 0,
|
|
...options
|
|
};
|
|
|
|
for (const [index, header] of headers.entries()) {
|
|
// If a bitmask is set
|
|
if (options.mask) {
|
|
// If header doesn't equal `buf` with bits masked off
|
|
if (header !== (options.mask[index] & buffer[index + options.offset])) {
|
|
return false;
|
|
}
|
|
} else if (header !== buffer[index + options.offset]) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
async function fromTokenizer(tokenizer) {
|
|
try {
|
|
return _fromTokenizer(tokenizer);
|
|
} catch (error) {
|
|
if (!(error instanceof strtok3$1.EndOfStreamError)) {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
async function _fromTokenizer(tokenizer) {
|
|
let buffer = Buffer.alloc(minimumBytes);
|
|
const bytesRead = 12;
|
|
const check = (header, options) => _check(buffer, header, options);
|
|
const checkString = (header, options) => check(stringToBytes(header), options);
|
|
|
|
// Keep reading until EOF if the file size is unknown.
|
|
if (!tokenizer.fileInfo.size) {
|
|
tokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;
|
|
}
|
|
|
|
await tokenizer.peekBuffer(buffer, {length: bytesRead, mayBeLess: true});
|
|
|
|
// -- 2-byte signatures --
|
|
|
|
if (check([0x42, 0x4D])) {
|
|
return {
|
|
ext: 'bmp',
|
|
mime: 'image/bmp'
|
|
};
|
|
}
|
|
|
|
if (check([0x0B, 0x77])) {
|
|
return {
|
|
ext: 'ac3',
|
|
mime: 'audio/vnd.dolby.dd-raw'
|
|
};
|
|
}
|
|
|
|
if (check([0x78, 0x01])) {
|
|
return {
|
|
ext: 'dmg',
|
|
mime: 'application/x-apple-diskimage'
|
|
};
|
|
}
|
|
|
|
if (check([0x4D, 0x5A])) {
|
|
return {
|
|
ext: 'exe',
|
|
mime: 'application/x-msdownload'
|
|
};
|
|
}
|
|
|
|
if (check([0x25, 0x21])) {
|
|
await tokenizer.peekBuffer(buffer, {length: 24, mayBeLess: true});
|
|
|
|
if (checkString('PS-Adobe-', {offset: 2}) &&
|
|
checkString(' EPSF-', {offset: 14})) {
|
|
return {
|
|
ext: 'eps',
|
|
mime: 'application/eps'
|
|
};
|
|
}
|
|
|
|
return {
|
|
ext: 'ps',
|
|
mime: 'application/postscript'
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x1F, 0xA0]) ||
|
|
check([0x1F, 0x9D])
|
|
) {
|
|
return {
|
|
ext: 'Z',
|
|
mime: 'application/x-compress'
|
|
};
|
|
}
|
|
|
|
// -- 3-byte signatures --
|
|
|
|
if (check([0xFF, 0xD8, 0xFF])) {
|
|
return {
|
|
ext: 'jpg',
|
|
mime: 'image/jpeg'
|
|
};
|
|
}
|
|
|
|
if (check([0x49, 0x49, 0xBC])) {
|
|
return {
|
|
ext: 'jxr',
|
|
mime: 'image/vnd.ms-photo'
|
|
};
|
|
}
|
|
|
|
if (check([0x1F, 0x8B, 0x8])) {
|
|
return {
|
|
ext: 'gz',
|
|
mime: 'application/gzip'
|
|
};
|
|
}
|
|
|
|
if (check([0x42, 0x5A, 0x68])) {
|
|
return {
|
|
ext: 'bz2',
|
|
mime: 'application/x-bzip2'
|
|
};
|
|
}
|
|
|
|
if (checkString('ID3')) {
|
|
await tokenizer.ignore(6); // Skip ID3 header until the header size
|
|
const id3HeaderLen = await tokenizer.readToken(uint32SyncSafeToken);
|
|
if (tokenizer.position + id3HeaderLen > tokenizer.fileInfo.size) {
|
|
// Guess file type based on ID3 header for backward compatibility
|
|
return {
|
|
ext: 'mp3',
|
|
mime: 'audio/mpeg'
|
|
};
|
|
}
|
|
|
|
await tokenizer.ignore(id3HeaderLen);
|
|
return fromTokenizer(tokenizer); // Skip ID3 header, recursion
|
|
}
|
|
|
|
// Musepack, SV7
|
|
if (checkString('MP+')) {
|
|
return {
|
|
ext: 'mpc',
|
|
mime: 'audio/x-musepack'
|
|
};
|
|
}
|
|
|
|
if (
|
|
(buffer[0] === 0x43 || buffer[0] === 0x46) &&
|
|
check([0x57, 0x53], {offset: 1})
|
|
) {
|
|
return {
|
|
ext: 'swf',
|
|
mime: 'application/x-shockwave-flash'
|
|
};
|
|
}
|
|
|
|
// -- 4-byte signatures --
|
|
|
|
if (check([0x47, 0x49, 0x46])) {
|
|
return {
|
|
ext: 'gif',
|
|
mime: 'image/gif'
|
|
};
|
|
}
|
|
|
|
if (checkString('FLIF')) {
|
|
return {
|
|
ext: 'flif',
|
|
mime: 'image/flif'
|
|
};
|
|
}
|
|
|
|
if (checkString('8BPS')) {
|
|
return {
|
|
ext: 'psd',
|
|
mime: 'image/vnd.adobe.photoshop'
|
|
};
|
|
}
|
|
|
|
if (checkString('WEBP', {offset: 8})) {
|
|
return {
|
|
ext: 'webp',
|
|
mime: 'image/webp'
|
|
};
|
|
}
|
|
|
|
// Musepack, SV8
|
|
if (checkString('MPCK')) {
|
|
return {
|
|
ext: 'mpc',
|
|
mime: 'audio/x-musepack'
|
|
};
|
|
}
|
|
|
|
if (checkString('FORM')) {
|
|
return {
|
|
ext: 'aif',
|
|
mime: 'audio/aiff'
|
|
};
|
|
}
|
|
|
|
if (checkString('icns', {offset: 0})) {
|
|
return {
|
|
ext: 'icns',
|
|
mime: 'image/icns'
|
|
};
|
|
}
|
|
|
|
// Zip-based file formats
|
|
// Need to be before the `zip` check
|
|
if (check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature
|
|
try {
|
|
while (tokenizer.position + 30 < tokenizer.fileInfo.size) {
|
|
await tokenizer.readBuffer(buffer, {length: 30});
|
|
|
|
// https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers
|
|
const zipHeader = {
|
|
compressedSize: buffer.readUInt32LE(18),
|
|
uncompressedSize: buffer.readUInt32LE(22),
|
|
filenameLength: buffer.readUInt16LE(26),
|
|
extraFieldLength: buffer.readUInt16LE(28)
|
|
};
|
|
|
|
zipHeader.filename = await tokenizer.readToken(new Token.StringType(zipHeader.filenameLength, 'utf-8'));
|
|
await tokenizer.ignore(zipHeader.extraFieldLength);
|
|
|
|
// Assumes signed `.xpi` from addons.mozilla.org
|
|
if (zipHeader.filename === 'META-INF/mozilla.rsa') {
|
|
return {
|
|
ext: 'xpi',
|
|
mime: 'application/x-xpinstall'
|
|
};
|
|
}
|
|
|
|
if (zipHeader.filename.endsWith('.rels') || zipHeader.filename.endsWith('.xml')) {
|
|
const type = zipHeader.filename.split('/')[0];
|
|
switch (type) {
|
|
case '_rels':
|
|
break;
|
|
case 'word':
|
|
return {
|
|
ext: 'docx',
|
|
mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
|
};
|
|
case 'ppt':
|
|
return {
|
|
ext: 'pptx',
|
|
mime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
|
|
};
|
|
case 'xl':
|
|
return {
|
|
ext: 'xlsx',
|
|
mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
};
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (zipHeader.filename.startsWith('xl/')) {
|
|
return {
|
|
ext: 'xlsx',
|
|
mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
};
|
|
}
|
|
|
|
if (zipHeader.filename.startsWith('3D/') && zipHeader.filename.endsWith('.model')) {
|
|
return {
|
|
ext: '3mf',
|
|
mime: 'model/3mf'
|
|
};
|
|
}
|
|
|
|
// The docx, xlsx and pptx file types extend the Office Open XML file format:
|
|
// https://en.wikipedia.org/wiki/Office_Open_XML_file_formats
|
|
// We look for:
|
|
// - one entry named '[Content_Types].xml' or '_rels/.rels',
|
|
// - one entry indicating specific type of file.
|
|
// MS Office, OpenOffice and LibreOffice may put the parts in different order, so the check should not rely on it.
|
|
if (zipHeader.filename === 'mimetype' && zipHeader.compressedSize === zipHeader.uncompressedSize) {
|
|
const mimeType = await tokenizer.readToken(new Token.StringType(zipHeader.compressedSize, 'utf-8'));
|
|
|
|
switch (mimeType) {
|
|
case 'application/epub+zip':
|
|
return {
|
|
ext: 'epub',
|
|
mime: 'application/epub+zip'
|
|
};
|
|
case 'application/vnd.oasis.opendocument.text':
|
|
return {
|
|
ext: 'odt',
|
|
mime: 'application/vnd.oasis.opendocument.text'
|
|
};
|
|
case 'application/vnd.oasis.opendocument.spreadsheet':
|
|
return {
|
|
ext: 'ods',
|
|
mime: 'application/vnd.oasis.opendocument.spreadsheet'
|
|
};
|
|
case 'application/vnd.oasis.opendocument.presentation':
|
|
return {
|
|
ext: 'odp',
|
|
mime: 'application/vnd.oasis.opendocument.presentation'
|
|
};
|
|
default:
|
|
}
|
|
}
|
|
|
|
// Try to find next header manually when current one is corrupted
|
|
if (zipHeader.compressedSize === 0) {
|
|
let nextHeaderIndex = -1;
|
|
|
|
while (nextHeaderIndex < 0 && (tokenizer.position < tokenizer.fileInfo.size)) {
|
|
await tokenizer.peekBuffer(buffer, {mayBeLess: true});
|
|
|
|
nextHeaderIndex = buffer.indexOf('504B0304', 0, 'hex');
|
|
// Move position to the next header if found, skip the whole buffer otherwise
|
|
await tokenizer.ignore(nextHeaderIndex >= 0 ? nextHeaderIndex : buffer.length);
|
|
}
|
|
} else {
|
|
await tokenizer.ignore(zipHeader.compressedSize);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
if (!(error instanceof strtok3$1.EndOfStreamError)) {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
return {
|
|
ext: 'zip',
|
|
mime: 'application/zip'
|
|
};
|
|
}
|
|
|
|
if (checkString('OggS')) {
|
|
// This is an OGG container
|
|
await tokenizer.ignore(28);
|
|
const type = Buffer.alloc(8);
|
|
await tokenizer.readBuffer(type);
|
|
|
|
// Needs to be before `ogg` check
|
|
if (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {
|
|
return {
|
|
ext: 'opus',
|
|
mime: 'audio/opus'
|
|
};
|
|
}
|
|
|
|
// If ' theora' in header.
|
|
if (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {
|
|
return {
|
|
ext: 'ogv',
|
|
mime: 'video/ogg'
|
|
};
|
|
}
|
|
|
|
// If '\x01video' in header.
|
|
if (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {
|
|
return {
|
|
ext: 'ogm',
|
|
mime: 'video/ogg'
|
|
};
|
|
}
|
|
|
|
// If ' FLAC' in header https://xiph.org/flac/faq.html
|
|
if (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {
|
|
return {
|
|
ext: 'oga',
|
|
mime: 'audio/ogg'
|
|
};
|
|
}
|
|
|
|
// 'Speex ' in header https://en.wikipedia.org/wiki/Speex
|
|
if (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {
|
|
return {
|
|
ext: 'spx',
|
|
mime: 'audio/ogg'
|
|
};
|
|
}
|
|
|
|
// If '\x01vorbis' in header
|
|
if (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {
|
|
return {
|
|
ext: 'ogg',
|
|
mime: 'audio/ogg'
|
|
};
|
|
}
|
|
|
|
// Default OGG container https://www.iana.org/assignments/media-types/application/ogg
|
|
return {
|
|
ext: 'ogx',
|
|
mime: 'application/ogg'
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x50, 0x4B]) &&
|
|
(buffer[2] === 0x3 || buffer[2] === 0x5 || buffer[2] === 0x7) &&
|
|
(buffer[3] === 0x4 || buffer[3] === 0x6 || buffer[3] === 0x8)
|
|
) {
|
|
return {
|
|
ext: 'zip',
|
|
mime: 'application/zip'
|
|
};
|
|
}
|
|
|
|
//
|
|
|
|
// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)
|
|
// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.
|
|
// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.
|
|
// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).
|
|
if (
|
|
checkString('ftyp', {offset: 4}) &&
|
|
(buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?
|
|
) {
|
|
// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.
|
|
// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.
|
|
const brandMajor = buffer.toString('binary', 8, 12).replace('\0', ' ').trim();
|
|
switch (brandMajor) {
|
|
case 'avif':
|
|
return {ext: 'avif', mime: 'image/avif'};
|
|
case 'mif1':
|
|
return {ext: 'heic', mime: 'image/heif'};
|
|
case 'msf1':
|
|
return {ext: 'heic', mime: 'image/heif-sequence'};
|
|
case 'heic':
|
|
case 'heix':
|
|
return {ext: 'heic', mime: 'image/heic'};
|
|
case 'hevc':
|
|
case 'hevx':
|
|
return {ext: 'heic', mime: 'image/heic-sequence'};
|
|
case 'qt':
|
|
return {ext: 'mov', mime: 'video/quicktime'};
|
|
case 'M4V':
|
|
case 'M4VH':
|
|
case 'M4VP':
|
|
return {ext: 'm4v', mime: 'video/x-m4v'};
|
|
case 'M4P':
|
|
return {ext: 'm4p', mime: 'video/mp4'};
|
|
case 'M4B':
|
|
return {ext: 'm4b', mime: 'audio/mp4'};
|
|
case 'M4A':
|
|
return {ext: 'm4a', mime: 'audio/x-m4a'};
|
|
case 'F4V':
|
|
return {ext: 'f4v', mime: 'video/mp4'};
|
|
case 'F4P':
|
|
return {ext: 'f4p', mime: 'video/mp4'};
|
|
case 'F4A':
|
|
return {ext: 'f4a', mime: 'audio/mp4'};
|
|
case 'F4B':
|
|
return {ext: 'f4b', mime: 'audio/mp4'};
|
|
case 'crx':
|
|
return {ext: 'cr3', mime: 'image/x-canon-cr3'};
|
|
default:
|
|
if (brandMajor.startsWith('3g')) {
|
|
if (brandMajor.startsWith('3g2')) {
|
|
return {ext: '3g2', mime: 'video/3gpp2'};
|
|
}
|
|
|
|
return {ext: '3gp', mime: 'video/3gpp'};
|
|
}
|
|
|
|
return {ext: 'mp4', mime: 'video/mp4'};
|
|
}
|
|
}
|
|
|
|
if (checkString('MThd')) {
|
|
return {
|
|
ext: 'mid',
|
|
mime: 'audio/midi'
|
|
};
|
|
}
|
|
|
|
if (
|
|
checkString('wOFF') &&
|
|
(
|
|
check([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||
|
|
checkString('OTTO', {offset: 4})
|
|
)
|
|
) {
|
|
return {
|
|
ext: 'woff',
|
|
mime: 'font/woff'
|
|
};
|
|
}
|
|
|
|
if (
|
|
checkString('wOF2') &&
|
|
(
|
|
check([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||
|
|
checkString('OTTO', {offset: 4})
|
|
)
|
|
) {
|
|
return {
|
|
ext: 'woff2',
|
|
mime: 'font/woff2'
|
|
};
|
|
}
|
|
|
|
if (check([0xD4, 0xC3, 0xB2, 0xA1]) || check([0xA1, 0xB2, 0xC3, 0xD4])) {
|
|
return {
|
|
ext: 'pcap',
|
|
mime: 'application/vnd.tcpdump.pcap'
|
|
};
|
|
}
|
|
|
|
// Sony DSD Stream File (DSF)
|
|
if (checkString('DSD ')) {
|
|
return {
|
|
ext: 'dsf',
|
|
mime: 'audio/x-dsf' // Non-standard
|
|
};
|
|
}
|
|
|
|
if (checkString('LZIP')) {
|
|
return {
|
|
ext: 'lz',
|
|
mime: 'application/x-lzip'
|
|
};
|
|
}
|
|
|
|
if (checkString('fLaC')) {
|
|
return {
|
|
ext: 'flac',
|
|
mime: 'audio/x-flac'
|
|
};
|
|
}
|
|
|
|
if (check([0x42, 0x50, 0x47, 0xFB])) {
|
|
return {
|
|
ext: 'bpg',
|
|
mime: 'image/bpg'
|
|
};
|
|
}
|
|
|
|
if (checkString('wvpk')) {
|
|
return {
|
|
ext: 'wv',
|
|
mime: 'audio/wavpack'
|
|
};
|
|
}
|
|
|
|
if (checkString('%PDF')) {
|
|
await tokenizer.ignore(1350);
|
|
const maxBufferSize = 10 * 1024 * 1024;
|
|
const buffer = Buffer.alloc(Math.min(maxBufferSize, tokenizer.fileInfo.size));
|
|
await tokenizer.readBuffer(buffer, {mayBeLess: true});
|
|
|
|
// Check if this is an Adobe Illustrator file
|
|
if (buffer.includes(Buffer.from('AIPrivateData'))) {
|
|
return {
|
|
ext: 'ai',
|
|
mime: 'application/postscript'
|
|
};
|
|
}
|
|
|
|
// Assume this is just a normal PDF
|
|
return {
|
|
ext: 'pdf',
|
|
mime: 'application/pdf'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x61, 0x73, 0x6D])) {
|
|
return {
|
|
ext: 'wasm',
|
|
mime: 'application/wasm'
|
|
};
|
|
}
|
|
|
|
// TIFF, little-endian type
|
|
if (check([0x49, 0x49, 0x2A, 0x0])) {
|
|
if (checkString('CR', {offset: 8})) {
|
|
return {
|
|
ext: 'cr2',
|
|
mime: 'image/x-canon-cr2'
|
|
};
|
|
}
|
|
|
|
if (check([0x1C, 0x00, 0xFE, 0x00], {offset: 8}) || check([0x1F, 0x00, 0x0B, 0x00], {offset: 8})) {
|
|
return {
|
|
ext: 'nef',
|
|
mime: 'image/x-nikon-nef'
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x08, 0x00, 0x00, 0x00], {offset: 4}) &&
|
|
(check([0x2D, 0x00, 0xFE, 0x00], {offset: 8}) ||
|
|
check([0x27, 0x00, 0xFE, 0x00], {offset: 8}))
|
|
) {
|
|
return {
|
|
ext: 'dng',
|
|
mime: 'image/x-adobe-dng'
|
|
};
|
|
}
|
|
|
|
buffer = Buffer.alloc(24);
|
|
await tokenizer.peekBuffer(buffer);
|
|
if (
|
|
(check([0x10, 0xFB, 0x86, 0x01], {offset: 4}) || check([0x08, 0x00, 0x00, 0x00], {offset: 4})) &&
|
|
// This pattern differentiates ARW from other TIFF-ish file types:
|
|
check([0x00, 0xFE, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01], {offset: 9})
|
|
) {
|
|
return {
|
|
ext: 'arw',
|
|
mime: 'image/x-sony-arw'
|
|
};
|
|
}
|
|
|
|
return {
|
|
ext: 'tif',
|
|
mime: 'image/tiff'
|
|
};
|
|
}
|
|
|
|
// TIFF, big-endian type
|
|
if (check([0x4D, 0x4D, 0x0, 0x2A])) {
|
|
return {
|
|
ext: 'tif',
|
|
mime: 'image/tiff'
|
|
};
|
|
}
|
|
|
|
if (checkString('MAC ')) {
|
|
return {
|
|
ext: 'ape',
|
|
mime: 'audio/ape'
|
|
};
|
|
}
|
|
|
|
// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska
|
|
if (check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML
|
|
async function readField() {
|
|
const msb = await tokenizer.peekNumber(Token.UINT8);
|
|
let mask = 0x80;
|
|
let ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D
|
|
|
|
while ((msb & mask) === 0 && mask !== 0) {
|
|
++ic;
|
|
mask >>= 1;
|
|
}
|
|
|
|
const id = Buffer.alloc(ic + 1);
|
|
await tokenizer.readBuffer(id);
|
|
return id;
|
|
}
|
|
|
|
async function readElement() {
|
|
const id = await readField();
|
|
const lenField = await readField();
|
|
lenField[0] ^= 0x80 >> (lenField.length - 1);
|
|
const nrLen = Math.min(6, lenField.length); // JavaScript can max read 6 bytes integer
|
|
return {
|
|
id: id.readUIntBE(0, id.length),
|
|
len: lenField.readUIntBE(lenField.length - nrLen, nrLen)
|
|
};
|
|
}
|
|
|
|
async function readChildren(level, children) {
|
|
while (children > 0) {
|
|
const e = await readElement();
|
|
if (e.id === 0x4282) {
|
|
return tokenizer.readToken(new Token.StringType(e.len, 'utf-8')); // Return DocType
|
|
}
|
|
|
|
await tokenizer.ignore(e.len); // ignore payload
|
|
--children;
|
|
}
|
|
}
|
|
|
|
const re = await readElement();
|
|
const docType = await readChildren(1, re.len);
|
|
|
|
switch (docType) {
|
|
case 'webm':
|
|
return {
|
|
ext: 'webm',
|
|
mime: 'video/webm'
|
|
};
|
|
|
|
case 'matroska':
|
|
return {
|
|
ext: 'mkv',
|
|
mime: 'video/x-matroska'
|
|
};
|
|
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
// RIFF file format which might be AVI, WAV, QCP, etc
|
|
if (check([0x52, 0x49, 0x46, 0x46])) {
|
|
if (check([0x41, 0x56, 0x49], {offset: 8})) {
|
|
return {
|
|
ext: 'avi',
|
|
mime: 'video/vnd.avi'
|
|
};
|
|
}
|
|
|
|
if (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {
|
|
return {
|
|
ext: 'wav',
|
|
mime: 'audio/vnd.wave'
|
|
};
|
|
}
|
|
|
|
// QLCM, QCP file
|
|
if (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {
|
|
return {
|
|
ext: 'qcp',
|
|
mime: 'audio/qcelp'
|
|
};
|
|
}
|
|
}
|
|
|
|
if (checkString('SQLi')) {
|
|
return {
|
|
ext: 'sqlite',
|
|
mime: 'application/x-sqlite3'
|
|
};
|
|
}
|
|
|
|
if (check([0x4E, 0x45, 0x53, 0x1A])) {
|
|
return {
|
|
ext: 'nes',
|
|
mime: 'application/x-nintendo-nes-rom'
|
|
};
|
|
}
|
|
|
|
if (checkString('Cr24')) {
|
|
return {
|
|
ext: 'crx',
|
|
mime: 'application/x-google-chrome-extension'
|
|
};
|
|
}
|
|
|
|
if (
|
|
checkString('MSCF') ||
|
|
checkString('ISc(')
|
|
) {
|
|
return {
|
|
ext: 'cab',
|
|
mime: 'application/vnd.ms-cab-compressed'
|
|
};
|
|
}
|
|
|
|
if (check([0xED, 0xAB, 0xEE, 0xDB])) {
|
|
return {
|
|
ext: 'rpm',
|
|
mime: 'application/x-rpm'
|
|
};
|
|
}
|
|
|
|
if (check([0xC5, 0xD0, 0xD3, 0xC6])) {
|
|
return {
|
|
ext: 'eps',
|
|
mime: 'application/eps'
|
|
};
|
|
}
|
|
|
|
if (check([0x28, 0xB5, 0x2F, 0xFD])) {
|
|
return {
|
|
ext: 'zst',
|
|
mime: 'application/zstd'
|
|
};
|
|
}
|
|
|
|
// -- 5-byte signatures --
|
|
|
|
if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {
|
|
return {
|
|
ext: 'otf',
|
|
mime: 'font/otf'
|
|
};
|
|
}
|
|
|
|
if (checkString('#!AMR')) {
|
|
return {
|
|
ext: 'amr',
|
|
mime: 'audio/amr'
|
|
};
|
|
}
|
|
|
|
if (checkString('{\\rtf')) {
|
|
return {
|
|
ext: 'rtf',
|
|
mime: 'application/rtf'
|
|
};
|
|
}
|
|
|
|
if (check([0x46, 0x4C, 0x56, 0x01])) {
|
|
return {
|
|
ext: 'flv',
|
|
mime: 'video/x-flv'
|
|
};
|
|
}
|
|
|
|
if (checkString('IMPM')) {
|
|
return {
|
|
ext: 'it',
|
|
mime: 'audio/x-it'
|
|
};
|
|
}
|
|
|
|
if (
|
|
checkString('-lh0-', {offset: 2}) ||
|
|
checkString('-lh1-', {offset: 2}) ||
|
|
checkString('-lh2-', {offset: 2}) ||
|
|
checkString('-lh3-', {offset: 2}) ||
|
|
checkString('-lh4-', {offset: 2}) ||
|
|
checkString('-lh5-', {offset: 2}) ||
|
|
checkString('-lh6-', {offset: 2}) ||
|
|
checkString('-lh7-', {offset: 2}) ||
|
|
checkString('-lzs-', {offset: 2}) ||
|
|
checkString('-lz4-', {offset: 2}) ||
|
|
checkString('-lz5-', {offset: 2}) ||
|
|
checkString('-lhd-', {offset: 2})
|
|
) {
|
|
return {
|
|
ext: 'lzh',
|
|
mime: 'application/x-lzh-compressed'
|
|
};
|
|
}
|
|
|
|
// MPEG program stream (PS or MPEG-PS)
|
|
if (check([0x00, 0x00, 0x01, 0xBA])) {
|
|
// MPEG-PS, MPEG-1 Part 1
|
|
if (check([0x21], {offset: 4, mask: [0xF1]})) {
|
|
return {
|
|
ext: 'mpg', // May also be .ps, .mpeg
|
|
mime: 'video/MP1S'
|
|
};
|
|
}
|
|
|
|
// MPEG-PS, MPEG-2 Part 1
|
|
if (check([0x44], {offset: 4, mask: [0xC4]})) {
|
|
return {
|
|
ext: 'mpg', // May also be .mpg, .m2p, .vob or .sub
|
|
mime: 'video/MP2P'
|
|
};
|
|
}
|
|
}
|
|
|
|
if (checkString('ITSF')) {
|
|
return {
|
|
ext: 'chm',
|
|
mime: 'application/vnd.ms-htmlhelp'
|
|
};
|
|
}
|
|
|
|
// -- 6-byte signatures --
|
|
|
|
if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {
|
|
return {
|
|
ext: 'xz',
|
|
mime: 'application/x-xz'
|
|
};
|
|
}
|
|
|
|
if (checkString('<?xml ')) {
|
|
return {
|
|
ext: 'xml',
|
|
mime: 'application/xml'
|
|
};
|
|
}
|
|
|
|
if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {
|
|
return {
|
|
ext: '7z',
|
|
mime: 'application/x-7z-compressed'
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&
|
|
(buffer[6] === 0x0 || buffer[6] === 0x1)
|
|
) {
|
|
return {
|
|
ext: 'rar',
|
|
mime: 'application/x-rar-compressed'
|
|
};
|
|
}
|
|
|
|
if (checkString('solid ')) {
|
|
return {
|
|
ext: 'stl',
|
|
mime: 'model/stl'
|
|
};
|
|
}
|
|
|
|
// -- 7-byte signatures --
|
|
|
|
if (checkString('BLENDER')) {
|
|
return {
|
|
ext: 'blend',
|
|
mime: 'application/x-blender'
|
|
};
|
|
}
|
|
|
|
if (checkString('!<arch>')) {
|
|
await tokenizer.ignore(8);
|
|
const str = await tokenizer.readToken(new Token.StringType(13, 'ascii'));
|
|
if (str === 'debian-binary') {
|
|
return {
|
|
ext: 'deb',
|
|
mime: 'application/x-deb'
|
|
};
|
|
}
|
|
|
|
return {
|
|
ext: 'ar',
|
|
mime: 'application/x-unix-archive'
|
|
};
|
|
}
|
|
|
|
// -- 8-byte signatures --
|
|
|
|
if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {
|
|
// APNG format (https://wiki.mozilla.org/APNG_Specification)
|
|
// 1. Find the first IDAT (image data) chunk (49 44 41 54)
|
|
// 2. Check if there is an "acTL" chunk before the IDAT one (61 63 54 4C)
|
|
|
|
// Offset calculated as follows:
|
|
// - 8 bytes: PNG signature
|
|
// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk
|
|
|
|
await tokenizer.ignore(8); // ignore PNG signature
|
|
|
|
async function readChunkHeader() {
|
|
return {
|
|
length: await tokenizer.readToken(Token.INT32_BE),
|
|
type: await tokenizer.readToken(new Token.StringType(4, 'binary'))
|
|
};
|
|
}
|
|
|
|
do {
|
|
const chunk = await readChunkHeader();
|
|
if (chunk.length < 0) {
|
|
return; // Invalid chunk length
|
|
}
|
|
|
|
switch (chunk.type) {
|
|
case 'IDAT':
|
|
return {
|
|
ext: 'png',
|
|
mime: 'image/png'
|
|
};
|
|
case 'acTL':
|
|
return {
|
|
ext: 'apng',
|
|
mime: 'image/apng'
|
|
};
|
|
default:
|
|
await tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC
|
|
}
|
|
} while (tokenizer.position + 8 < tokenizer.fileInfo.size);
|
|
|
|
return {
|
|
ext: 'png',
|
|
mime: 'image/png'
|
|
};
|
|
}
|
|
|
|
if (check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {
|
|
return {
|
|
ext: 'arrow',
|
|
mime: 'application/x-apache-arrow'
|
|
};
|
|
}
|
|
|
|
if (check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {
|
|
return {
|
|
ext: 'glb',
|
|
mime: 'model/gltf-binary'
|
|
};
|
|
}
|
|
|
|
// `mov` format variants
|
|
if (
|
|
check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || // `free`
|
|
check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // `mdat` MJPEG
|
|
check([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) || // `moov`
|
|
check([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`
|
|
) {
|
|
return {
|
|
ext: 'mov',
|
|
mime: 'video/quicktime'
|
|
};
|
|
}
|
|
|
|
// -- 9-byte signatures --
|
|
|
|
if (check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {
|
|
return {
|
|
ext: 'orf',
|
|
mime: 'image/x-olympus-orf'
|
|
};
|
|
}
|
|
|
|
if (checkString('gimp xcf ')) {
|
|
return {
|
|
ext: 'xcf',
|
|
mime: 'image/x-xcf'
|
|
};
|
|
}
|
|
|
|
// -- 12-byte signatures --
|
|
|
|
if (check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {
|
|
return {
|
|
ext: 'rw2',
|
|
mime: 'image/x-panasonic-rw2'
|
|
};
|
|
}
|
|
|
|
// ASF_Header_Object first 80 bytes
|
|
if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {
|
|
async function readHeader() {
|
|
const guid = Buffer.alloc(16);
|
|
await tokenizer.readBuffer(guid);
|
|
return {
|
|
id: guid,
|
|
size: Number(await tokenizer.readToken(Token.UINT64_LE))
|
|
};
|
|
}
|
|
|
|
await tokenizer.ignore(30);
|
|
// Search for header should be in first 1KB of file.
|
|
while (tokenizer.position + 24 < tokenizer.fileInfo.size) {
|
|
const header = await readHeader();
|
|
let payload = header.size - 24;
|
|
if (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {
|
|
// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)
|
|
const typeId = Buffer.alloc(16);
|
|
payload -= await tokenizer.readBuffer(typeId);
|
|
|
|
if (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {
|
|
// Found audio:
|
|
return {
|
|
ext: 'asf',
|
|
mime: 'audio/x-ms-asf'
|
|
};
|
|
}
|
|
|
|
if (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {
|
|
// Found video:
|
|
return {
|
|
ext: 'asf',
|
|
mime: 'video/x-ms-asf'
|
|
};
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
await tokenizer.ignore(payload);
|
|
}
|
|
|
|
// Default to ASF generic extension
|
|
return {
|
|
ext: 'asf',
|
|
mime: 'application/vnd.ms-asf'
|
|
};
|
|
}
|
|
|
|
if (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {
|
|
return {
|
|
ext: 'ktx',
|
|
mime: 'image/ktx'
|
|
};
|
|
}
|
|
|
|
if ((check([0x7E, 0x10, 0x04]) || check([0x7E, 0x18, 0x04])) && check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {
|
|
return {
|
|
ext: 'mie',
|
|
mime: 'application/x-mie'
|
|
};
|
|
}
|
|
|
|
if (check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {
|
|
return {
|
|
ext: 'shp',
|
|
mime: 'application/x-esri-shape'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {
|
|
// JPEG-2000 family
|
|
|
|
await tokenizer.ignore(20);
|
|
const type = await tokenizer.readToken(new Token.StringType(4, 'ascii'));
|
|
switch (type) {
|
|
case 'jp2 ':
|
|
return {
|
|
ext: 'jp2',
|
|
mime: 'image/jp2'
|
|
};
|
|
case 'jpx ':
|
|
return {
|
|
ext: 'jpx',
|
|
mime: 'image/jpx'
|
|
};
|
|
case 'jpm ':
|
|
return {
|
|
ext: 'jpm',
|
|
mime: 'image/jpm'
|
|
};
|
|
case 'mjp2':
|
|
return {
|
|
ext: 'mj2',
|
|
mime: 'image/mj2'
|
|
};
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (
|
|
check([0xFF, 0x0A]) ||
|
|
check([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])
|
|
) {
|
|
return {
|
|
ext: 'jxl',
|
|
mime: 'image/jxl'
|
|
};
|
|
}
|
|
|
|
// -- Unsafe signatures --
|
|
|
|
if (
|
|
check([0x0, 0x0, 0x1, 0xBA]) ||
|
|
check([0x0, 0x0, 0x1, 0xB3])
|
|
) {
|
|
return {
|
|
ext: 'mpg',
|
|
mime: 'video/mpeg'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x01, 0x00, 0x00, 0x00])) {
|
|
return {
|
|
ext: 'ttf',
|
|
mime: 'font/ttf'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x00, 0x01, 0x00])) {
|
|
return {
|
|
ext: 'ico',
|
|
mime: 'image/x-icon'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x00, 0x02, 0x00])) {
|
|
return {
|
|
ext: 'cur',
|
|
mime: 'image/x-icon'
|
|
};
|
|
}
|
|
|
|
if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {
|
|
// Detected Microsoft Compound File Binary File (MS-CFB) Format.
|
|
return {
|
|
ext: 'cfb',
|
|
mime: 'application/x-cfb'
|
|
};
|
|
}
|
|
|
|
// Increase sample size from 12 to 256.
|
|
await tokenizer.peekBuffer(buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});
|
|
|
|
// -- 15-byte signatures --
|
|
|
|
if (checkString('BEGIN:')) {
|
|
if (checkString('VCARD', {offset: 6})) {
|
|
return {
|
|
ext: 'vcf',
|
|
mime: 'text/vcard'
|
|
};
|
|
}
|
|
|
|
if (checkString('VCALENDAR', {offset: 6})) {
|
|
return {
|
|
ext: 'ics',
|
|
mime: 'text/calendar'
|
|
};
|
|
}
|
|
}
|
|
|
|
// `raf` is here just to keep all the raw image detectors together.
|
|
if (checkString('FUJIFILMCCD-RAW')) {
|
|
return {
|
|
ext: 'raf',
|
|
mime: 'image/x-fujifilm-raf'
|
|
};
|
|
}
|
|
|
|
if (checkString('Extended Module:')) {
|
|
return {
|
|
ext: 'xm',
|
|
mime: 'audio/x-xm'
|
|
};
|
|
}
|
|
|
|
if (checkString('Creative Voice File')) {
|
|
return {
|
|
ext: 'voc',
|
|
mime: 'audio/x-voc'
|
|
};
|
|
}
|
|
|
|
if (check([0x04, 0x00, 0x00, 0x00]) && buffer.length >= 16) { // Rough & quick check Pickle/ASAR
|
|
const jsonSize = buffer.readUInt32LE(12);
|
|
if (jsonSize > 12 && buffer.length >= jsonSize + 16) {
|
|
try {
|
|
const header = buffer.slice(16, jsonSize + 16).toString();
|
|
const json = JSON.parse(header);
|
|
// Check if Pickle is ASAR
|
|
if (json.files) { // Final check, assuring Pickle/ASAR format
|
|
return {
|
|
ext: 'asar',
|
|
mime: 'application/x-asar'
|
|
};
|
|
}
|
|
} catch (_) {
|
|
}
|
|
}
|
|
}
|
|
|
|
if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {
|
|
return {
|
|
ext: 'mxf',
|
|
mime: 'application/mxf'
|
|
};
|
|
}
|
|
|
|
if (checkString('SCRM', {offset: 44})) {
|
|
return {
|
|
ext: 's3m',
|
|
mime: 'audio/x-s3m'
|
|
};
|
|
}
|
|
|
|
if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {
|
|
return {
|
|
ext: 'mts',
|
|
mime: 'video/mp2t'
|
|
};
|
|
}
|
|
|
|
if (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {
|
|
return {
|
|
ext: 'mobi',
|
|
mime: 'application/x-mobipocket-ebook'
|
|
};
|
|
}
|
|
|
|
if (check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {
|
|
return {
|
|
ext: 'dcm',
|
|
mime: 'application/dicom'
|
|
};
|
|
}
|
|
|
|
if (check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {
|
|
return {
|
|
ext: 'lnk',
|
|
mime: 'application/x.ms.shortcut' // Invented by us
|
|
};
|
|
}
|
|
|
|
if (check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {
|
|
return {
|
|
ext: 'alias',
|
|
mime: 'application/x.apple.alias' // Invented by us
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x4C, 0x50], {offset: 34}) &&
|
|
(
|
|
check([0x00, 0x00, 0x01], {offset: 8}) ||
|
|
check([0x01, 0x00, 0x02], {offset: 8}) ||
|
|
check([0x02, 0x00, 0x02], {offset: 8})
|
|
)
|
|
) {
|
|
return {
|
|
ext: 'eot',
|
|
mime: 'application/vnd.ms-fontobject'
|
|
};
|
|
}
|
|
|
|
if (check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {
|
|
return {
|
|
ext: 'indd',
|
|
mime: 'application/x-indesign'
|
|
};
|
|
}
|
|
|
|
// Increase sample size from 256 to 512
|
|
await tokenizer.peekBuffer(buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});
|
|
|
|
// Requires a buffer size of 512 bytes
|
|
if (tarHeaderChecksumMatches(buffer)) {
|
|
return {
|
|
ext: 'tar',
|
|
mime: 'application/x-tar'
|
|
};
|
|
}
|
|
|
|
if (check([0xFF, 0xFE, 0xFF, 0x0E, 0x53, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x55, 0x00, 0x70, 0x00, 0x20, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6C, 0x00])) {
|
|
return {
|
|
ext: 'skp',
|
|
mime: 'application/vnd.sketchup.skp'
|
|
};
|
|
}
|
|
|
|
if (checkString('-----BEGIN PGP MESSAGE-----')) {
|
|
return {
|
|
ext: 'pgp',
|
|
mime: 'application/pgp-encrypted'
|
|
};
|
|
}
|
|
|
|
// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)
|
|
if (buffer.length >= 2 && check([0xFF, 0xE0], {offset: 0, mask: [0xFF, 0xE0]})) {
|
|
if (check([0x10], {offset: 1, mask: [0x16]})) {
|
|
// Check for (ADTS) MPEG-2
|
|
if (check([0x08], {offset: 1, mask: [0x08]})) {
|
|
return {
|
|
ext: 'aac',
|
|
mime: 'audio/aac'
|
|
};
|
|
}
|
|
|
|
// Must be (ADTS) MPEG-4
|
|
return {
|
|
ext: 'aac',
|
|
mime: 'audio/aac'
|
|
};
|
|
}
|
|
|
|
// MPEG 1 or 2 Layer 3 header
|
|
// Check for MPEG layer 3
|
|
if (check([0x02], {offset: 1, mask: [0x06]})) {
|
|
return {
|
|
ext: 'mp3',
|
|
mime: 'audio/mpeg'
|
|
};
|
|
}
|
|
|
|
// Check for MPEG layer 2
|
|
if (check([0x04], {offset: 1, mask: [0x06]})) {
|
|
return {
|
|
ext: 'mp2',
|
|
mime: 'audio/mpeg'
|
|
};
|
|
}
|
|
|
|
// Check for MPEG layer 1
|
|
if (check([0x06], {offset: 1, mask: [0x06]})) {
|
|
return {
|
|
ext: 'mp1',
|
|
mime: 'audio/mpeg'
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
const stream = readableStream => new Promise((resolve, reject) => {
|
|
// Using `eval` to work around issues when bundling with Webpack
|
|
const stream = eval('require')('stream'); // eslint-disable-line no-eval
|
|
|
|
readableStream.on('error', reject);
|
|
readableStream.once('readable', async () => {
|
|
// Set up output stream
|
|
const pass = new stream.PassThrough();
|
|
let outputStream;
|
|
if (stream.pipeline) {
|
|
outputStream = stream.pipeline(readableStream, pass, () => {
|
|
});
|
|
} else {
|
|
outputStream = readableStream.pipe(pass);
|
|
}
|
|
|
|
// Read the input stream and detect the filetype
|
|
const chunk = readableStream.read(minimumBytes) || readableStream.read() || Buffer.alloc(0);
|
|
try {
|
|
const fileType = await fromBuffer(chunk);
|
|
pass.fileType = fileType;
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
|
|
resolve(outputStream);
|
|
});
|
|
});
|
|
|
|
const fileType$1 = {
|
|
fromStream,
|
|
fromTokenizer,
|
|
fromBuffer,
|
|
stream
|
|
};
|
|
|
|
Object.defineProperty(fileType$1, 'extensions', {
|
|
get() {
|
|
return new Set(supported.extensions);
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(fileType$1, 'mimeTypes', {
|
|
get() {
|
|
return new Set(supported.mimeTypes);
|
|
}
|
|
});
|
|
|
|
var core$2 = fileType$1;
|
|
|
|
const strtok3 = lib$3;
|
|
const core$1 = core$2;
|
|
|
|
async function fromFile(path) {
|
|
const tokenizer = await strtok3.fromFile(path);
|
|
try {
|
|
return await core$1.fromTokenizer(tokenizer);
|
|
} finally {
|
|
await tokenizer.close();
|
|
}
|
|
}
|
|
|
|
const fileType = {
|
|
fromFile
|
|
};
|
|
|
|
Object.assign(fileType, core$1);
|
|
|
|
Object.defineProperty(fileType, 'extensions', {
|
|
get() {
|
|
return core$1.extensions;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(fileType, 'mimeTypes', {
|
|
get() {
|
|
return core$1.mimeTypes;
|
|
}
|
|
});
|
|
|
|
var fileType_1 = fileType;
|
|
|
|
var isSvg$2 = {exports: {}};
|
|
|
|
var validator$2 = {};
|
|
|
|
var util$2 = {};
|
|
|
|
(function (exports) {
|
|
|
|
const nameStartChar = ':A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';
|
|
const nameChar = nameStartChar + '\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040';
|
|
const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';
|
|
const regexName = new RegExp('^' + nameRegexp + '$');
|
|
|
|
const getAllMatches = function(string, regex) {
|
|
const matches = [];
|
|
let match = regex.exec(string);
|
|
while (match) {
|
|
const allmatches = [];
|
|
allmatches.startIndex = regex.lastIndex - match[0].length;
|
|
const len = match.length;
|
|
for (let index = 0; index < len; index++) {
|
|
allmatches.push(match[index]);
|
|
}
|
|
matches.push(allmatches);
|
|
match = regex.exec(string);
|
|
}
|
|
return matches;
|
|
};
|
|
|
|
const isName = function(string) {
|
|
const match = regexName.exec(string);
|
|
return !(match === null || typeof match === 'undefined');
|
|
};
|
|
|
|
exports.isExist = function(v) {
|
|
return typeof v !== 'undefined';
|
|
};
|
|
|
|
exports.isEmptyObject = function(obj) {
|
|
return Object.keys(obj).length === 0;
|
|
};
|
|
|
|
/**
|
|
* Copy all the properties of a into b.
|
|
* @param {*} target
|
|
* @param {*} a
|
|
*/
|
|
exports.merge = function(target, a, arrayMode) {
|
|
if (a) {
|
|
const keys = Object.keys(a); // will return an array of own properties
|
|
const len = keys.length; //don't make it inline
|
|
for (let i = 0; i < len; i++) {
|
|
if (arrayMode === 'strict') {
|
|
target[keys[i]] = [ a[keys[i]] ];
|
|
} else {
|
|
target[keys[i]] = a[keys[i]];
|
|
}
|
|
}
|
|
}
|
|
};
|
|
/* exports.merge =function (b,a){
|
|
return Object.assign(b,a);
|
|
} */
|
|
|
|
exports.getValue = function(v) {
|
|
if (exports.isExist(v)) {
|
|
return v;
|
|
} else {
|
|
return '';
|
|
}
|
|
};
|
|
|
|
// const fakeCall = function(a) {return a;};
|
|
// const fakeCallNoReturn = function() {};
|
|
|
|
exports.isName = isName;
|
|
exports.getAllMatches = getAllMatches;
|
|
exports.nameRegexp = nameRegexp;
|
|
} (util$2));
|
|
|
|
const util$1 = util$2;
|
|
|
|
const defaultOptions$2 = {
|
|
allowBooleanAttributes: false, //A tag can have attributes without any value
|
|
unpairedTags: []
|
|
};
|
|
|
|
//const tagsPattern = new RegExp("<\\/?([\\w:\\-_\.]+)\\s*\/?>","g");
|
|
validator$2.validate = function (xmlData, options) {
|
|
options = Object.assign({}, defaultOptions$2, options);
|
|
|
|
//xmlData = xmlData.replace(/(\r\n|\n|\r)/gm,"");//make it single line
|
|
//xmlData = xmlData.replace(/(^\s*<\?xml.*?\?>)/g,"");//Remove XML starting tag
|
|
//xmlData = xmlData.replace(/(<!DOCTYPE[\s\w\"\.\/\-\:]+(\[.*\])*\s*>)/g,"");//Remove DOCTYPE
|
|
const tags = [];
|
|
let tagFound = false;
|
|
|
|
//indicates that the root tag has been closed (aka. depth 0 has been reached)
|
|
let reachedRoot = false;
|
|
|
|
if (xmlData[0] === '\ufeff') {
|
|
// check for byte order mark (BOM)
|
|
xmlData = xmlData.substr(1);
|
|
}
|
|
|
|
for (let i = 0; i < xmlData.length; i++) {
|
|
|
|
if (xmlData[i] === '<' && xmlData[i+1] === '?') {
|
|
i+=2;
|
|
i = readPI(xmlData,i);
|
|
if (i.err) return i;
|
|
}else if (xmlData[i] === '<') {
|
|
//starting of tag
|
|
//read until you reach to '>' avoiding any '>' in attribute value
|
|
let tagStartPos = i;
|
|
i++;
|
|
|
|
if (xmlData[i] === '!') {
|
|
i = readCommentAndCDATA(xmlData, i);
|
|
continue;
|
|
} else {
|
|
let closingTag = false;
|
|
if (xmlData[i] === '/') {
|
|
//closing tag
|
|
closingTag = true;
|
|
i++;
|
|
}
|
|
//read tagname
|
|
let tagName = '';
|
|
for (; i < xmlData.length &&
|
|
xmlData[i] !== '>' &&
|
|
xmlData[i] !== ' ' &&
|
|
xmlData[i] !== '\t' &&
|
|
xmlData[i] !== '\n' &&
|
|
xmlData[i] !== '\r'; i++
|
|
) {
|
|
tagName += xmlData[i];
|
|
}
|
|
tagName = tagName.trim();
|
|
//console.log(tagName);
|
|
|
|
if (tagName[tagName.length - 1] === '/') {
|
|
//self closing tag without attributes
|
|
tagName = tagName.substring(0, tagName.length - 1);
|
|
//continue;
|
|
i--;
|
|
}
|
|
if (!validateTagName(tagName)) {
|
|
let msg;
|
|
if (tagName.trim().length === 0) {
|
|
msg = "Invalid space after '<'.";
|
|
} else {
|
|
msg = "Tag '"+tagName+"' is an invalid name.";
|
|
}
|
|
return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));
|
|
}
|
|
|
|
const result = readAttributeStr(xmlData, i);
|
|
if (result === false) {
|
|
return getErrorObject('InvalidAttr', "Attributes for '"+tagName+"' have open quote.", getLineNumberForPosition(xmlData, i));
|
|
}
|
|
let attrStr = result.value;
|
|
i = result.index;
|
|
|
|
if (attrStr[attrStr.length - 1] === '/') {
|
|
//self closing tag
|
|
const attrStrStart = i - attrStr.length;
|
|
attrStr = attrStr.substring(0, attrStr.length - 1);
|
|
const isValid = validateAttributeString(attrStr, options);
|
|
if (isValid === true) {
|
|
tagFound = true;
|
|
//continue; //text may presents after self closing tag
|
|
} else {
|
|
//the result from the nested function returns the position of the error within the attribute
|
|
//in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute
|
|
//this gives us the absolute index in the entire xml, which we can use to find the line at last
|
|
return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));
|
|
}
|
|
} else if (closingTag) {
|
|
if (!result.tagClosed) {
|
|
return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' doesn't have proper closing.", getLineNumberForPosition(xmlData, i));
|
|
} else if (attrStr.trim().length > 0) {
|
|
return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' can't have attributes or invalid starting.", getLineNumberForPosition(xmlData, tagStartPos));
|
|
} else {
|
|
const otg = tags.pop();
|
|
if (tagName !== otg.tagName) {
|
|
let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);
|
|
return getErrorObject('InvalidTag',
|
|
"Expected closing tag '"+otg.tagName+"' (opened in line "+openPos.line+", col "+openPos.col+") instead of closing tag '"+tagName+"'.",
|
|
getLineNumberForPosition(xmlData, tagStartPos));
|
|
}
|
|
|
|
//when there are no more tags, we reached the root level.
|
|
if (tags.length == 0) {
|
|
reachedRoot = true;
|
|
}
|
|
}
|
|
} else {
|
|
const isValid = validateAttributeString(attrStr, options);
|
|
if (isValid !== true) {
|
|
//the result from the nested function returns the position of the error within the attribute
|
|
//in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute
|
|
//this gives us the absolute index in the entire xml, which we can use to find the line at last
|
|
return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));
|
|
}
|
|
|
|
//if the root level has been reached before ...
|
|
if (reachedRoot === true) {
|
|
return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));
|
|
} else if(options.unpairedTags.indexOf(tagName) !== -1); else {
|
|
tags.push({tagName, tagStartPos});
|
|
}
|
|
tagFound = true;
|
|
}
|
|
|
|
//skip tag text value
|
|
//It may include comments and CDATA value
|
|
for (i++; i < xmlData.length; i++) {
|
|
if (xmlData[i] === '<') {
|
|
if (xmlData[i + 1] === '!') {
|
|
//comment or CADATA
|
|
i++;
|
|
i = readCommentAndCDATA(xmlData, i);
|
|
continue;
|
|
} else if (xmlData[i+1] === '?') {
|
|
i = readPI(xmlData, ++i);
|
|
if (i.err) return i;
|
|
} else {
|
|
break;
|
|
}
|
|
} else if (xmlData[i] === '&') {
|
|
const afterAmp = validateAmpersand(xmlData, i);
|
|
if (afterAmp == -1)
|
|
return getErrorObject('InvalidChar', "char '&' is not expected.", getLineNumberForPosition(xmlData, i));
|
|
i = afterAmp;
|
|
}else {
|
|
if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {
|
|
return getErrorObject('InvalidXml', "Extra text at the end", getLineNumberForPosition(xmlData, i));
|
|
}
|
|
}
|
|
} //end of reading tag text value
|
|
if (xmlData[i] === '<') {
|
|
i--;
|
|
}
|
|
}
|
|
} else {
|
|
if ( isWhiteSpace(xmlData[i])) {
|
|
continue;
|
|
}
|
|
return getErrorObject('InvalidChar', "char '"+xmlData[i]+"' is not expected.", getLineNumberForPosition(xmlData, i));
|
|
}
|
|
}
|
|
|
|
if (!tagFound) {
|
|
return getErrorObject('InvalidXml', 'Start tag expected.', 1);
|
|
}else if (tags.length == 1) {
|
|
return getErrorObject('InvalidTag', "Unclosed tag '"+tags[0].tagName+"'.", getLineNumberForPosition(xmlData, tags[0].tagStartPos));
|
|
}else if (tags.length > 0) {
|
|
return getErrorObject('InvalidXml', "Invalid '"+
|
|
JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\r?\n/g, '')+
|
|
"' found.", {line: 1, col: 1});
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
function isWhiteSpace(char){
|
|
return char === ' ' || char === '\t' || char === '\n' || char === '\r';
|
|
}
|
|
/**
|
|
* Read Processing insstructions and skip
|
|
* @param {*} xmlData
|
|
* @param {*} i
|
|
*/
|
|
function readPI(xmlData, i) {
|
|
const start = i;
|
|
for (; i < xmlData.length; i++) {
|
|
if (xmlData[i] == '?' || xmlData[i] == ' ') {
|
|
//tagname
|
|
const tagname = xmlData.substr(start, i - start);
|
|
if (i > 5 && tagname === 'xml') {
|
|
return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));
|
|
} else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {
|
|
//check if valid attribut string
|
|
i++;
|
|
break;
|
|
} else {
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
return i;
|
|
}
|
|
|
|
function readCommentAndCDATA(xmlData, i) {
|
|
if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {
|
|
//comment
|
|
for (i += 3; i < xmlData.length; i++) {
|
|
if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {
|
|
i += 2;
|
|
break;
|
|
}
|
|
}
|
|
} else if (
|
|
xmlData.length > i + 8 &&
|
|
xmlData[i + 1] === 'D' &&
|
|
xmlData[i + 2] === 'O' &&
|
|
xmlData[i + 3] === 'C' &&
|
|
xmlData[i + 4] === 'T' &&
|
|
xmlData[i + 5] === 'Y' &&
|
|
xmlData[i + 6] === 'P' &&
|
|
xmlData[i + 7] === 'E'
|
|
) {
|
|
let angleBracketsCount = 1;
|
|
for (i += 8; i < xmlData.length; i++) {
|
|
if (xmlData[i] === '<') {
|
|
angleBracketsCount++;
|
|
} else if (xmlData[i] === '>') {
|
|
angleBracketsCount--;
|
|
if (angleBracketsCount === 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} else if (
|
|
xmlData.length > i + 9 &&
|
|
xmlData[i + 1] === '[' &&
|
|
xmlData[i + 2] === 'C' &&
|
|
xmlData[i + 3] === 'D' &&
|
|
xmlData[i + 4] === 'A' &&
|
|
xmlData[i + 5] === 'T' &&
|
|
xmlData[i + 6] === 'A' &&
|
|
xmlData[i + 7] === '['
|
|
) {
|
|
for (i += 8; i < xmlData.length; i++) {
|
|
if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {
|
|
i += 2;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
const doubleQuote = '"';
|
|
const singleQuote = "'";
|
|
|
|
/**
|
|
* Keep reading xmlData until '<' is found outside the attribute value.
|
|
* @param {string} xmlData
|
|
* @param {number} i
|
|
*/
|
|
function readAttributeStr(xmlData, i) {
|
|
let attrStr = '';
|
|
let startChar = '';
|
|
let tagClosed = false;
|
|
for (; i < xmlData.length; i++) {
|
|
if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {
|
|
if (startChar === '') {
|
|
startChar = xmlData[i];
|
|
} else if (startChar !== xmlData[i]) ; else {
|
|
startChar = '';
|
|
}
|
|
} else if (xmlData[i] === '>') {
|
|
if (startChar === '') {
|
|
tagClosed = true;
|
|
break;
|
|
}
|
|
}
|
|
attrStr += xmlData[i];
|
|
}
|
|
if (startChar !== '') {
|
|
return false;
|
|
}
|
|
|
|
return {
|
|
value: attrStr,
|
|
index: i,
|
|
tagClosed: tagClosed
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Select all the attributes whether valid or invalid.
|
|
*/
|
|
const validAttrStrRegxp = new RegExp('(\\s*)([^\\s=]+)(\\s*=)?(\\s*([\'"])(([\\s\\S])*?)\\5)?', 'g');
|
|
|
|
//attr, ="sd", a="amit's", a="sd"b="saf", ab cd=""
|
|
|
|
function validateAttributeString(attrStr, options) {
|
|
//console.log("start:"+attrStr+":end");
|
|
|
|
//if(attrStr.trim().length === 0) return true; //empty string
|
|
|
|
const matches = util$1.getAllMatches(attrStr, validAttrStrRegxp);
|
|
const attrNames = {};
|
|
|
|
for (let i = 0; i < matches.length; i++) {
|
|
if (matches[i][1].length === 0) {
|
|
//nospace before attribute name: a="sd"b="saf"
|
|
return getErrorObject('InvalidAttr', "Attribute '"+matches[i][2]+"' has no space in starting.", getPositionFromMatch(matches[i]))
|
|
} else if (matches[i][3] !== undefined && matches[i][4] === undefined) {
|
|
return getErrorObject('InvalidAttr', "Attribute '"+matches[i][2]+"' is without value.", getPositionFromMatch(matches[i]));
|
|
} else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {
|
|
//independent attribute: ab
|
|
return getErrorObject('InvalidAttr', "boolean attribute '"+matches[i][2]+"' is not allowed.", getPositionFromMatch(matches[i]));
|
|
}
|
|
/* else if(matches[i][6] === undefined){//attribute without value: ab=
|
|
return { err: { code:"InvalidAttr",msg:"attribute " + matches[i][2] + " has no value assigned."}};
|
|
} */
|
|
const attrName = matches[i][2];
|
|
if (!validateAttrName(attrName)) {
|
|
return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is an invalid name.", getPositionFromMatch(matches[i]));
|
|
}
|
|
if (!attrNames.hasOwnProperty(attrName)) {
|
|
//check for duplicate attribute.
|
|
attrNames[attrName] = 1;
|
|
} else {
|
|
return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is repeated.", getPositionFromMatch(matches[i]));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function validateNumberAmpersand(xmlData, i) {
|
|
let re = /\d/;
|
|
if (xmlData[i] === 'x') {
|
|
i++;
|
|
re = /[\da-fA-F]/;
|
|
}
|
|
for (; i < xmlData.length; i++) {
|
|
if (xmlData[i] === ';')
|
|
return i;
|
|
if (!xmlData[i].match(re))
|
|
break;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
function validateAmpersand(xmlData, i) {
|
|
// https://www.w3.org/TR/xml/#dt-charref
|
|
i++;
|
|
if (xmlData[i] === ';')
|
|
return -1;
|
|
if (xmlData[i] === '#') {
|
|
i++;
|
|
return validateNumberAmpersand(xmlData, i);
|
|
}
|
|
let count = 0;
|
|
for (; i < xmlData.length; i++, count++) {
|
|
if (xmlData[i].match(/\w/) && count < 20)
|
|
continue;
|
|
if (xmlData[i] === ';')
|
|
break;
|
|
return -1;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
function getErrorObject(code, message, lineNumber) {
|
|
return {
|
|
err: {
|
|
code: code,
|
|
msg: message,
|
|
line: lineNumber.line || lineNumber,
|
|
col: lineNumber.col,
|
|
},
|
|
};
|
|
}
|
|
|
|
function validateAttrName(attrName) {
|
|
return util$1.isName(attrName);
|
|
}
|
|
|
|
// const startsWithXML = /^xml/i;
|
|
|
|
function validateTagName(tagname) {
|
|
return util$1.isName(tagname) /* && !tagname.match(startsWithXML) */;
|
|
}
|
|
|
|
//this function returns the line number for the character at the given index
|
|
function getLineNumberForPosition(xmlData, index) {
|
|
const lines = xmlData.substring(0, index).split(/\r?\n/);
|
|
return {
|
|
line: lines.length,
|
|
|
|
// column number is last line's length + 1, because column numbering starts at 1:
|
|
col: lines[lines.length - 1].length + 1
|
|
};
|
|
}
|
|
|
|
//this function returns the position of the first character of match within attrStr
|
|
function getPositionFromMatch(match) {
|
|
return match.startIndex + match[1].length;
|
|
}
|
|
|
|
var OptionsBuilder = {};
|
|
|
|
const defaultOptions$1 = {
|
|
preserveOrder: false,
|
|
attributeNamePrefix: '@_',
|
|
attributesGroupName: false,
|
|
textNodeName: '#text',
|
|
ignoreAttributes: true,
|
|
removeNSPrefix: false, // remove NS from tag name or attribute name if true
|
|
allowBooleanAttributes: false, //a tag can have attributes without any value
|
|
//ignoreRootElement : false,
|
|
parseTagValue: true,
|
|
parseAttributeValue: false,
|
|
trimValues: true, //Trim string values of tag and attributes
|
|
cdataPropName: false,
|
|
numberParseOptions: {
|
|
hex: true,
|
|
leadingZeros: true,
|
|
eNotation: true
|
|
},
|
|
tagValueProcessor: function(tagName, val) {
|
|
return val;
|
|
},
|
|
attributeValueProcessor: function(attrName, val) {
|
|
return val;
|
|
},
|
|
stopNodes: [], //nested tags will not be parsed even for errors
|
|
alwaysCreateTextNode: false,
|
|
isArray: () => false,
|
|
commentPropName: false,
|
|
unpairedTags: [],
|
|
processEntities: true,
|
|
htmlEntities: false,
|
|
ignoreDeclaration: false,
|
|
ignorePiTags: false,
|
|
transformTagName: false,
|
|
transformAttributeName: false,
|
|
updateTag: function(tagName, jPath, attrs){
|
|
return tagName
|
|
},
|
|
// skipEmptyListItem: false
|
|
};
|
|
|
|
const buildOptions$1 = function(options) {
|
|
return Object.assign({}, defaultOptions$1, options);
|
|
};
|
|
|
|
OptionsBuilder.buildOptions = buildOptions$1;
|
|
OptionsBuilder.defaultOptions = defaultOptions$1;
|
|
|
|
class XmlNode{
|
|
constructor(tagname) {
|
|
this.tagname = tagname;
|
|
this.child = []; //nested tags, text, cdata, comments in order
|
|
this[":@"] = {}; //attributes map
|
|
}
|
|
add(key,val){
|
|
// this.child.push( {name : key, val: val, isCdata: isCdata });
|
|
if(key === "__proto__") key = "#__proto__";
|
|
this.child.push( {[key]: val });
|
|
}
|
|
addChild(node) {
|
|
if(node.tagname === "__proto__") node.tagname = "#__proto__";
|
|
if(node[":@"] && Object.keys(node[":@"]).length > 0){
|
|
this.child.push( { [node.tagname]: node.child, [":@"]: node[":@"] });
|
|
}else {
|
|
this.child.push( { [node.tagname]: node.child });
|
|
}
|
|
};
|
|
}
|
|
|
|
var xmlNode$1 = XmlNode;
|
|
|
|
//TODO: handle comments
|
|
function readDocType$1(xmlData, i){
|
|
|
|
const entities = {};
|
|
if( xmlData[i + 3] === 'O' &&
|
|
xmlData[i + 4] === 'C' &&
|
|
xmlData[i + 5] === 'T' &&
|
|
xmlData[i + 6] === 'Y' &&
|
|
xmlData[i + 7] === 'P' &&
|
|
xmlData[i + 8] === 'E')
|
|
{
|
|
i = i+9;
|
|
let angleBracketsCount = 1;
|
|
let hasBody = false, comment = false;
|
|
let exp = "";
|
|
for(;i<xmlData.length;i++){
|
|
if (xmlData[i] === '<' && !comment) { //Determine the tag type
|
|
if( hasBody && isEntity(xmlData, i)){
|
|
i += 7;
|
|
[entityName, val,i] = readEntityExp(xmlData,i+1);
|
|
if(val.indexOf("&") === -1) //Parameter entities are not supported
|
|
entities[ entityName ] = {
|
|
regx : RegExp( `&${entityName};`,"g"),
|
|
val: val
|
|
};
|
|
}
|
|
else if( hasBody && isElement(xmlData, i)) i += 8;//Not supported
|
|
else if( hasBody && isAttlist(xmlData, i)) i += 8;//Not supported
|
|
else if( hasBody && isNotation(xmlData, i)) i += 9;//Not supported
|
|
else if( isComment) comment = true;
|
|
else throw new Error("Invalid DOCTYPE");
|
|
|
|
angleBracketsCount++;
|
|
exp = "";
|
|
} else if (xmlData[i] === '>') { //Read tag content
|
|
if(comment){
|
|
if( xmlData[i - 1] === "-" && xmlData[i - 2] === "-"){
|
|
comment = false;
|
|
angleBracketsCount--;
|
|
}
|
|
}else {
|
|
angleBracketsCount--;
|
|
}
|
|
if (angleBracketsCount === 0) {
|
|
break;
|
|
}
|
|
}else if( xmlData[i] === '['){
|
|
hasBody = true;
|
|
}else {
|
|
exp += xmlData[i];
|
|
}
|
|
}
|
|
if(angleBracketsCount !== 0){
|
|
throw new Error(`Unclosed DOCTYPE`);
|
|
}
|
|
}else {
|
|
throw new Error(`Invalid Tag instead of DOCTYPE`);
|
|
}
|
|
return {entities, i};
|
|
}
|
|
|
|
function readEntityExp(xmlData,i){
|
|
//External entities are not supported
|
|
// <!ENTITY ext SYSTEM "http://normal-website.com" >
|
|
|
|
//Parameter entities are not supported
|
|
// <!ENTITY entityname "&anotherElement;">
|
|
|
|
//Internal entities are supported
|
|
// <!ENTITY entityname "replacement text">
|
|
|
|
//read EntityName
|
|
let entityName = "";
|
|
for (; i < xmlData.length && (xmlData[i] !== "'" && xmlData[i] !== '"' ); i++) {
|
|
// if(xmlData[i] === " ") continue;
|
|
// else
|
|
entityName += xmlData[i];
|
|
}
|
|
entityName = entityName.trim();
|
|
if(entityName.indexOf(" ") !== -1) throw new Error("External entites are not supported");
|
|
|
|
//read Entity Value
|
|
const startChar = xmlData[i++];
|
|
let val = "";
|
|
for (; i < xmlData.length && xmlData[i] !== startChar ; i++) {
|
|
val += xmlData[i];
|
|
}
|
|
return [entityName, val, i];
|
|
}
|
|
|
|
function isComment(xmlData, i){
|
|
if(xmlData[i+1] === '!' &&
|
|
xmlData[i+2] === '-' &&
|
|
xmlData[i+3] === '-') return true
|
|
return false
|
|
}
|
|
function isEntity(xmlData, i){
|
|
if(xmlData[i+1] === '!' &&
|
|
xmlData[i+2] === 'E' &&
|
|
xmlData[i+3] === 'N' &&
|
|
xmlData[i+4] === 'T' &&
|
|
xmlData[i+5] === 'I' &&
|
|
xmlData[i+6] === 'T' &&
|
|
xmlData[i+7] === 'Y') return true
|
|
return false
|
|
}
|
|
function isElement(xmlData, i){
|
|
if(xmlData[i+1] === '!' &&
|
|
xmlData[i+2] === 'E' &&
|
|
xmlData[i+3] === 'L' &&
|
|
xmlData[i+4] === 'E' &&
|
|
xmlData[i+5] === 'M' &&
|
|
xmlData[i+6] === 'E' &&
|
|
xmlData[i+7] === 'N' &&
|
|
xmlData[i+8] === 'T') return true
|
|
return false
|
|
}
|
|
|
|
function isAttlist(xmlData, i){
|
|
if(xmlData[i+1] === '!' &&
|
|
xmlData[i+2] === 'A' &&
|
|
xmlData[i+3] === 'T' &&
|
|
xmlData[i+4] === 'T' &&
|
|
xmlData[i+5] === 'L' &&
|
|
xmlData[i+6] === 'I' &&
|
|
xmlData[i+7] === 'S' &&
|
|
xmlData[i+8] === 'T') return true
|
|
return false
|
|
}
|
|
function isNotation(xmlData, i){
|
|
if(xmlData[i+1] === '!' &&
|
|
xmlData[i+2] === 'N' &&
|
|
xmlData[i+3] === 'O' &&
|
|
xmlData[i+4] === 'T' &&
|
|
xmlData[i+5] === 'A' &&
|
|
xmlData[i+6] === 'T' &&
|
|
xmlData[i+7] === 'I' &&
|
|
xmlData[i+8] === 'O' &&
|
|
xmlData[i+9] === 'N') return true
|
|
return false
|
|
}
|
|
|
|
var DocTypeReader = readDocType$1;
|
|
|
|
const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;
|
|
const numRegex = /^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;
|
|
// const octRegex = /0x[a-z0-9]+/;
|
|
// const binRegex = /0x[a-z0-9]+/;
|
|
|
|
|
|
//polyfill
|
|
if (!Number.parseInt && window.parseInt) {
|
|
Number.parseInt = window.parseInt;
|
|
}
|
|
if (!Number.parseFloat && window.parseFloat) {
|
|
Number.parseFloat = window.parseFloat;
|
|
}
|
|
|
|
|
|
const consider = {
|
|
hex : true,
|
|
leadingZeros: true,
|
|
decimalPoint: "\.",
|
|
eNotation: true
|
|
//skipLike: /regex/
|
|
};
|
|
|
|
function toNumber$1(str, options = {}){
|
|
// const options = Object.assign({}, consider);
|
|
// if(opt.leadingZeros === false){
|
|
// options.leadingZeros = false;
|
|
// }else if(opt.hex === false){
|
|
// options.hex = false;
|
|
// }
|
|
|
|
options = Object.assign({}, consider, options );
|
|
if(!str || typeof str !== "string" ) return str;
|
|
|
|
let trimmedStr = str.trim();
|
|
// if(trimmedStr === "0.0") return 0;
|
|
// else if(trimmedStr === "+0.0") return 0;
|
|
// else if(trimmedStr === "-0.0") return -0;
|
|
|
|
if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;
|
|
else if (options.hex && hexRegex.test(trimmedStr)) {
|
|
return Number.parseInt(trimmedStr, 16);
|
|
// } else if (options.parseOct && octRegex.test(str)) {
|
|
// return Number.parseInt(val, 8);
|
|
// }else if (options.parseBin && binRegex.test(str)) {
|
|
// return Number.parseInt(val, 2);
|
|
}else {
|
|
//separate negative sign, leading zeros, and rest number
|
|
const match = numRegex.exec(trimmedStr);
|
|
if(match){
|
|
const sign = match[1];
|
|
const leadingZeros = match[2];
|
|
let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros
|
|
//trim ending zeros for floating number
|
|
|
|
const eNotation = match[4] || match[6];
|
|
if(!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== ".") return str; //-0123
|
|
else if(!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== ".") return str; //0123
|
|
else {//no leading zeros or leading zeros are allowed
|
|
const num = Number(trimmedStr);
|
|
const numStr = "" + num;
|
|
if(numStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation
|
|
if(options.eNotation) return num;
|
|
else return str;
|
|
}else if(eNotation){ //given number has enotation
|
|
if(options.eNotation) return num;
|
|
else return str;
|
|
}else if(trimmedStr.indexOf(".") !== -1){ //floating number
|
|
// const decimalPart = match[5].substr(1);
|
|
// const intPart = trimmedStr.substr(0,trimmedStr.indexOf("."));
|
|
|
|
|
|
// const p = numStr.indexOf(".");
|
|
// const givenIntPart = numStr.substr(0,p);
|
|
// const givenDecPart = numStr.substr(p+1);
|
|
if(numStr === "0" && (numTrimmedByZeros === "") ) return num; //0.0
|
|
else if(numStr === numTrimmedByZeros) return num; //0.456. 0.79000
|
|
else if( sign && numStr === "-"+numTrimmedByZeros) return num;
|
|
else return str;
|
|
}
|
|
|
|
if(leadingZeros){
|
|
// if(numTrimmedByZeros === numStr){
|
|
// if(options.leadingZeros) return num;
|
|
// else return str;
|
|
// }else return str;
|
|
if(numTrimmedByZeros === numStr) return num;
|
|
else if(sign+numTrimmedByZeros === numStr) return num;
|
|
else return str;
|
|
}
|
|
|
|
if(trimmedStr === numStr) return num;
|
|
else if(trimmedStr === sign+numStr) return num;
|
|
// else{
|
|
// //number with +/- sign
|
|
// trimmedStr.test(/[-+][0-9]);
|
|
|
|
// }
|
|
return str;
|
|
}
|
|
// else if(!eNotation && trimmedStr && trimmedStr !== Number(trimmedStr) ) return str;
|
|
|
|
}else { //non-numeric string
|
|
return str;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {string} numStr without leading zeros
|
|
* @returns
|
|
*/
|
|
function trimZeros(numStr){
|
|
if(numStr && numStr.indexOf(".") !== -1){//float
|
|
numStr = numStr.replace(/0+$/, ""); //remove ending zeros
|
|
if(numStr === ".") numStr = "0";
|
|
else if(numStr[0] === ".") numStr = "0"+numStr;
|
|
else if(numStr[numStr.length-1] === ".") numStr = numStr.substr(0,numStr.length-1);
|
|
return numStr;
|
|
}
|
|
return numStr;
|
|
}
|
|
var strnum = toNumber$1;
|
|
|
|
///@ts-check
|
|
|
|
const util = util$2;
|
|
const xmlNode = xmlNode$1;
|
|
const readDocType = DocTypeReader;
|
|
const toNumber = strnum;
|
|
|
|
'<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)'
|
|
.replace(/NAME/g, util.nameRegexp);
|
|
|
|
//const tagsRegx = new RegExp("<(\\/?[\\w:\\-\._]+)([^>]*)>(\\s*"+cdataRegx+")*([^<]+)?","g");
|
|
//const tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g");
|
|
|
|
class OrderedObjParser$1{
|
|
constructor(options){
|
|
this.options = options;
|
|
this.currentNode = null;
|
|
this.tagsNodeStack = [];
|
|
this.docTypeEntities = {};
|
|
this.lastEntities = {
|
|
"apos" : { regex: /&(apos|#39|#x27);/g, val : "'"},
|
|
"gt" : { regex: /&(gt|#62|#x3E);/g, val : ">"},
|
|
"lt" : { regex: /&(lt|#60|#x3C);/g, val : "<"},
|
|
"quot" : { regex: /&(quot|#34|#x22);/g, val : "\""},
|
|
};
|
|
this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : "&"};
|
|
this.htmlEntities = {
|
|
"space": { regex: /&(nbsp|#160);/g, val: " " },
|
|
// "lt" : { regex: /&(lt|#60);/g, val: "<" },
|
|
// "gt" : { regex: /&(gt|#62);/g, val: ">" },
|
|
// "amp" : { regex: /&(amp|#38);/g, val: "&" },
|
|
// "quot" : { regex: /&(quot|#34);/g, val: "\"" },
|
|
// "apos" : { regex: /&(apos|#39);/g, val: "'" },
|
|
"cent" : { regex: /&(cent|#162);/g, val: "¢" },
|
|
"pound" : { regex: /&(pound|#163);/g, val: "£" },
|
|
"yen" : { regex: /&(yen|#165);/g, val: "¥" },
|
|
"euro" : { regex: /&(euro|#8364);/g, val: "€" },
|
|
"copyright" : { regex: /&(copy|#169);/g, val: "©" },
|
|
"reg" : { regex: /&(reg|#174);/g, val: "®" },
|
|
"inr" : { regex: /&(inr|#8377);/g, val: "₹" },
|
|
};
|
|
this.addExternalEntities = addExternalEntities;
|
|
this.parseXml = parseXml;
|
|
this.parseTextData = parseTextData;
|
|
this.resolveNameSpace = resolveNameSpace;
|
|
this.buildAttributesMap = buildAttributesMap;
|
|
this.isItStopNode = isItStopNode;
|
|
this.replaceEntitiesValue = replaceEntitiesValue$1;
|
|
this.readStopNodeData = readStopNodeData;
|
|
this.saveTextToParentTag = saveTextToParentTag;
|
|
this.addChild = addChild;
|
|
}
|
|
|
|
}
|
|
|
|
function addExternalEntities(externalEntities){
|
|
const entKeys = Object.keys(externalEntities);
|
|
for (let i = 0; i < entKeys.length; i++) {
|
|
const ent = entKeys[i];
|
|
this.lastEntities[ent] = {
|
|
regex: new RegExp("&"+ent+";","g"),
|
|
val : externalEntities[ent]
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param {string} val
|
|
* @param {string} tagName
|
|
* @param {string} jPath
|
|
* @param {boolean} dontTrim
|
|
* @param {boolean} hasAttributes
|
|
* @param {boolean} isLeafNode
|
|
* @param {boolean} escapeEntities
|
|
*/
|
|
function parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {
|
|
if (val !== undefined) {
|
|
if (this.options.trimValues && !dontTrim) {
|
|
val = val.trim();
|
|
}
|
|
if(val.length > 0){
|
|
if(!escapeEntities) val = this.replaceEntitiesValue(val);
|
|
|
|
const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);
|
|
if(newval === null || newval === undefined){
|
|
//don't parse
|
|
return val;
|
|
}else if(typeof newval !== typeof val || newval !== val){
|
|
//overwrite
|
|
return newval;
|
|
}else if(this.options.trimValues){
|
|
return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);
|
|
}else {
|
|
const trimmedVal = val.trim();
|
|
if(trimmedVal === val){
|
|
return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);
|
|
}else {
|
|
return val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function resolveNameSpace(tagname) {
|
|
if (this.options.removeNSPrefix) {
|
|
const tags = tagname.split(':');
|
|
const prefix = tagname.charAt(0) === '/' ? '/' : '';
|
|
if (tags[0] === 'xmlns') {
|
|
return '';
|
|
}
|
|
if (tags.length === 2) {
|
|
tagname = prefix + tags[1];
|
|
}
|
|
}
|
|
return tagname;
|
|
}
|
|
|
|
//TODO: change regex to capture NS
|
|
//const attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm");
|
|
const attrsRegx = new RegExp('([^\\s=]+)\\s*(=\\s*([\'"])([\\s\\S]*?)\\3)?', 'gm');
|
|
|
|
function buildAttributesMap(attrStr, jPath, tagName) {
|
|
if (!this.options.ignoreAttributes && typeof attrStr === 'string') {
|
|
// attrStr = attrStr.replace(/\r?\n/g, ' ');
|
|
//attrStr = attrStr || attrStr.trim();
|
|
|
|
const matches = util.getAllMatches(attrStr, attrsRegx);
|
|
const len = matches.length; //don't make it inline
|
|
const attrs = {};
|
|
for (let i = 0; i < len; i++) {
|
|
const attrName = this.resolveNameSpace(matches[i][1]);
|
|
let oldVal = matches[i][4];
|
|
let aName = this.options.attributeNamePrefix + attrName;
|
|
if (attrName.length) {
|
|
if (this.options.transformAttributeName) {
|
|
aName = this.options.transformAttributeName(aName);
|
|
}
|
|
if(aName === "__proto__") aName = "#__proto__";
|
|
if (oldVal !== undefined) {
|
|
if (this.options.trimValues) {
|
|
oldVal = oldVal.trim();
|
|
}
|
|
oldVal = this.replaceEntitiesValue(oldVal);
|
|
const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);
|
|
if(newVal === null || newVal === undefined){
|
|
//don't parse
|
|
attrs[aName] = oldVal;
|
|
}else if(typeof newVal !== typeof oldVal || newVal !== oldVal){
|
|
//overwrite
|
|
attrs[aName] = newVal;
|
|
}else {
|
|
//parse
|
|
attrs[aName] = parseValue(
|
|
oldVal,
|
|
this.options.parseAttributeValue,
|
|
this.options.numberParseOptions
|
|
);
|
|
}
|
|
} else if (this.options.allowBooleanAttributes) {
|
|
attrs[aName] = true;
|
|
}
|
|
}
|
|
}
|
|
if (!Object.keys(attrs).length) {
|
|
return;
|
|
}
|
|
if (this.options.attributesGroupName) {
|
|
const attrCollection = {};
|
|
attrCollection[this.options.attributesGroupName] = attrs;
|
|
return attrCollection;
|
|
}
|
|
return attrs
|
|
}
|
|
}
|
|
|
|
const parseXml = function(xmlData) {
|
|
xmlData = xmlData.replace(/\r\n?/g, "\n"); //TODO: remove this line
|
|
const xmlObj = new xmlNode('!xml');
|
|
let currentNode = xmlObj;
|
|
let textData = "";
|
|
let jPath = "";
|
|
for(let i=0; i< xmlData.length; i++){//for each char in XML data
|
|
const ch = xmlData[i];
|
|
if(ch === '<'){
|
|
// const nextIndex = i+1;
|
|
// const _2ndChar = xmlData[nextIndex];
|
|
if( xmlData[i+1] === '/') {//Closing Tag
|
|
const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed.");
|
|
let tagName = xmlData.substring(i+2,closeIndex).trim();
|
|
|
|
if(this.options.removeNSPrefix){
|
|
const colonIndex = tagName.indexOf(":");
|
|
if(colonIndex !== -1){
|
|
tagName = tagName.substr(colonIndex+1);
|
|
}
|
|
}
|
|
|
|
if(this.options.transformTagName) {
|
|
tagName = this.options.transformTagName(tagName);
|
|
}
|
|
|
|
if(currentNode){
|
|
textData = this.saveTextToParentTag(textData, currentNode, jPath);
|
|
}
|
|
|
|
//check if last tag of nested tag was unpaired tag
|
|
const lastTagName = jPath.substring(jPath.lastIndexOf(".")+1);
|
|
if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){
|
|
throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);
|
|
}
|
|
let propIndex = 0;
|
|
if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){
|
|
propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1);
|
|
this.tagsNodeStack.pop();
|
|
}else {
|
|
propIndex = jPath.lastIndexOf(".");
|
|
}
|
|
jPath = jPath.substring(0, propIndex);
|
|
|
|
currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope
|
|
textData = "";
|
|
i = closeIndex;
|
|
} else if( xmlData[i+1] === '?') {
|
|
|
|
let tagData = readTagExp(xmlData,i, false, "?>");
|
|
if(!tagData) throw new Error("Pi Tag is not closed.");
|
|
|
|
textData = this.saveTextToParentTag(textData, currentNode, jPath);
|
|
if( (this.options.ignoreDeclaration && tagData.tagName === "?xml") || this.options.ignorePiTags);else {
|
|
|
|
const childNode = new xmlNode(tagData.tagName);
|
|
childNode.add(this.options.textNodeName, "");
|
|
|
|
if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){
|
|
childNode[":@"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);
|
|
}
|
|
this.addChild(currentNode, childNode, jPath);
|
|
|
|
}
|
|
|
|
|
|
i = tagData.closeIndex + 1;
|
|
} else if(xmlData.substr(i + 1, 3) === '!--') {
|
|
const endIndex = findClosingIndex(xmlData, "-->", i+4, "Comment is not closed.");
|
|
if(this.options.commentPropName){
|
|
const comment = xmlData.substring(i + 4, endIndex - 2);
|
|
|
|
textData = this.saveTextToParentTag(textData, currentNode, jPath);
|
|
|
|
currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]);
|
|
}
|
|
i = endIndex;
|
|
} else if( xmlData.substr(i + 1, 2) === '!D') {
|
|
const result = readDocType(xmlData, i);
|
|
this.docTypeEntities = result.entities;
|
|
i = result.i;
|
|
}else if(xmlData.substr(i + 1, 2) === '![') {
|
|
const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2;
|
|
const tagExp = xmlData.substring(i + 9,closeIndex);
|
|
|
|
textData = this.saveTextToParentTag(textData, currentNode, jPath);
|
|
|
|
//cdata should be set even if it is 0 length string
|
|
if(this.options.cdataPropName){
|
|
// let val = this.parseTextData(tagExp, this.options.cdataPropName, jPath + "." + this.options.cdataPropName, true, false, true);
|
|
// if(!val) val = "";
|
|
currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]);
|
|
}else {
|
|
let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true);
|
|
if(val == undefined) val = "";
|
|
currentNode.add(this.options.textNodeName, val);
|
|
}
|
|
|
|
i = closeIndex + 2;
|
|
}else {//Opening tag
|
|
let result = readTagExp(xmlData,i, this.options.removeNSPrefix);
|
|
let tagName= result.tagName;
|
|
let tagExp = result.tagExp;
|
|
let attrExpPresent = result.attrExpPresent;
|
|
let closeIndex = result.closeIndex;
|
|
|
|
if (this.options.transformTagName) {
|
|
tagName = this.options.transformTagName(tagName);
|
|
}
|
|
|
|
//save text as child node
|
|
if (currentNode && textData) {
|
|
if(currentNode.tagname !== '!xml'){
|
|
//when nested tag is found
|
|
textData = this.saveTextToParentTag(textData, currentNode, jPath, false);
|
|
}
|
|
}
|
|
|
|
//check if last tag was unpaired tag
|
|
const lastTag = currentNode;
|
|
if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){
|
|
currentNode = this.tagsNodeStack.pop();
|
|
jPath = jPath.substring(0, jPath.lastIndexOf("."));
|
|
}
|
|
if(tagName !== xmlObj.tagname){
|
|
jPath += jPath ? "." + tagName : tagName;
|
|
}
|
|
if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) { //TODO: namespace
|
|
let tagContent = "";
|
|
//self-closing tag
|
|
if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){
|
|
i = result.closeIndex;
|
|
}
|
|
//unpaired tag
|
|
else if(this.options.unpairedTags.indexOf(tagName) !== -1){
|
|
i = result.closeIndex;
|
|
}
|
|
//normal tag
|
|
else {
|
|
//read until closing tag is found
|
|
const result = this.readStopNodeData(xmlData, tagName, closeIndex + 1);
|
|
if(!result) throw new Error(`Unexpected end of ${tagName}`);
|
|
i = result.i;
|
|
tagContent = result.tagContent;
|
|
}
|
|
|
|
const childNode = new xmlNode(tagName);
|
|
if(tagName !== tagExp && attrExpPresent){
|
|
childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
|
|
}
|
|
if(tagContent) {
|
|
tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);
|
|
}
|
|
|
|
jPath = jPath.substr(0, jPath.lastIndexOf("."));
|
|
childNode.add(this.options.textNodeName, tagContent);
|
|
|
|
this.addChild(currentNode, childNode, jPath);
|
|
}else {
|
|
//selfClosing tag
|
|
if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){
|
|
if(tagName[tagName.length - 1] === "/"){ //remove trailing '/'
|
|
tagName = tagName.substr(0, tagName.length - 1);
|
|
tagExp = tagName;
|
|
}else {
|
|
tagExp = tagExp.substr(0, tagExp.length - 1);
|
|
}
|
|
|
|
if(this.options.transformTagName) {
|
|
tagName = this.options.transformTagName(tagName);
|
|
}
|
|
|
|
const childNode = new xmlNode(tagName);
|
|
if(tagName !== tagExp && attrExpPresent){
|
|
childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
|
|
}
|
|
this.addChild(currentNode, childNode, jPath);
|
|
jPath = jPath.substr(0, jPath.lastIndexOf("."));
|
|
}
|
|
//opening tag
|
|
else {
|
|
const childNode = new xmlNode( tagName);
|
|
this.tagsNodeStack.push(currentNode);
|
|
|
|
if(tagName !== tagExp && attrExpPresent){
|
|
childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
|
|
}
|
|
this.addChild(currentNode, childNode, jPath);
|
|
currentNode = childNode;
|
|
}
|
|
textData = "";
|
|
i = closeIndex;
|
|
}
|
|
}
|
|
}else {
|
|
textData += xmlData[i];
|
|
}
|
|
}
|
|
return xmlObj.child;
|
|
};
|
|
|
|
function addChild(currentNode, childNode, jPath){
|
|
const result = this.options.updateTag(childNode.tagname, jPath, childNode[":@"]);
|
|
if(result === false);else if(typeof result === "string"){
|
|
childNode.tagname = result;
|
|
currentNode.addChild(childNode);
|
|
}else {
|
|
currentNode.addChild(childNode);
|
|
}
|
|
}
|
|
|
|
const replaceEntitiesValue$1 = function(val){
|
|
|
|
if(this.options.processEntities){
|
|
for(let entityName in this.docTypeEntities){
|
|
const entity = this.docTypeEntities[entityName];
|
|
val = val.replace( entity.regx, entity.val);
|
|
}
|
|
for(let entityName in this.lastEntities){
|
|
const entity = this.lastEntities[entityName];
|
|
val = val.replace( entity.regex, entity.val);
|
|
}
|
|
if(this.options.htmlEntities){
|
|
for(let entityName in this.htmlEntities){
|
|
const entity = this.htmlEntities[entityName];
|
|
val = val.replace( entity.regex, entity.val);
|
|
}
|
|
}
|
|
val = val.replace( this.ampEntity.regex, this.ampEntity.val);
|
|
}
|
|
return val;
|
|
};
|
|
function saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {
|
|
if (textData) { //store previously collected data as textNode
|
|
if(isLeafNode === undefined) isLeafNode = Object.keys(currentNode.child).length === 0;
|
|
|
|
textData = this.parseTextData(textData,
|
|
currentNode.tagname,
|
|
jPath,
|
|
false,
|
|
currentNode[":@"] ? Object.keys(currentNode[":@"]).length !== 0 : false,
|
|
isLeafNode);
|
|
|
|
if (textData !== undefined && textData !== "")
|
|
currentNode.add(this.options.textNodeName, textData);
|
|
textData = "";
|
|
}
|
|
return textData;
|
|
}
|
|
|
|
//TODO: use jPath to simplify the logic
|
|
/**
|
|
*
|
|
* @param {string[]} stopNodes
|
|
* @param {string} jPath
|
|
* @param {string} currentTagName
|
|
*/
|
|
function isItStopNode(stopNodes, jPath, currentTagName){
|
|
const allNodesExp = "*." + currentTagName;
|
|
for (const stopNodePath in stopNodes) {
|
|
const stopNodeExp = stopNodes[stopNodePath];
|
|
if( allNodesExp === stopNodeExp || jPath === stopNodeExp ) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Returns the tag Expression and where it is ending handling single-double quotes situation
|
|
* @param {string} xmlData
|
|
* @param {number} i starting index
|
|
* @returns
|
|
*/
|
|
function tagExpWithClosingIndex(xmlData, i, closingChar = ">"){
|
|
let attrBoundary;
|
|
let tagExp = "";
|
|
for (let index = i; index < xmlData.length; index++) {
|
|
let ch = xmlData[index];
|
|
if (attrBoundary) {
|
|
if (ch === attrBoundary) attrBoundary = "";//reset
|
|
} else if (ch === '"' || ch === "'") {
|
|
attrBoundary = ch;
|
|
} else if (ch === closingChar[0]) {
|
|
if(closingChar[1]){
|
|
if(xmlData[index + 1] === closingChar[1]){
|
|
return {
|
|
data: tagExp,
|
|
index: index
|
|
}
|
|
}
|
|
}else {
|
|
return {
|
|
data: tagExp,
|
|
index: index
|
|
}
|
|
}
|
|
} else if (ch === '\t') {
|
|
ch = " ";
|
|
}
|
|
tagExp += ch;
|
|
}
|
|
}
|
|
|
|
function findClosingIndex(xmlData, str, i, errMsg){
|
|
const closingIndex = xmlData.indexOf(str, i);
|
|
if(closingIndex === -1){
|
|
throw new Error(errMsg)
|
|
}else {
|
|
return closingIndex + str.length - 1;
|
|
}
|
|
}
|
|
|
|
function readTagExp(xmlData,i, removeNSPrefix, closingChar = ">"){
|
|
const result = tagExpWithClosingIndex(xmlData, i+1, closingChar);
|
|
if(!result) return;
|
|
let tagExp = result.data;
|
|
const closeIndex = result.index;
|
|
const separatorIndex = tagExp.search(/\s/);
|
|
let tagName = tagExp;
|
|
let attrExpPresent = true;
|
|
if(separatorIndex !== -1){//separate tag name and attributes expression
|
|
tagName = tagExp.substr(0, separatorIndex).replace(/\s\s*$/, '');
|
|
tagExp = tagExp.substr(separatorIndex + 1);
|
|
}
|
|
|
|
if(removeNSPrefix){
|
|
const colonIndex = tagName.indexOf(":");
|
|
if(colonIndex !== -1){
|
|
tagName = tagName.substr(colonIndex+1);
|
|
attrExpPresent = tagName !== result.data.substr(colonIndex + 1);
|
|
}
|
|
}
|
|
|
|
return {
|
|
tagName: tagName,
|
|
tagExp: tagExp,
|
|
closeIndex: closeIndex,
|
|
attrExpPresent: attrExpPresent,
|
|
}
|
|
}
|
|
/**
|
|
* find paired tag for a stop node
|
|
* @param {string} xmlData
|
|
* @param {string} tagName
|
|
* @param {number} i
|
|
*/
|
|
function readStopNodeData(xmlData, tagName, i){
|
|
const startIndex = i;
|
|
// Starting at 1 since we already have an open tag
|
|
let openTagCount = 1;
|
|
|
|
for (; i < xmlData.length; i++) {
|
|
if( xmlData[i] === "<"){
|
|
if (xmlData[i+1] === "/") {//close tag
|
|
const closeIndex = findClosingIndex(xmlData, ">", i, `${tagName} is not closed`);
|
|
let closeTagName = xmlData.substring(i+2,closeIndex).trim();
|
|
if(closeTagName === tagName){
|
|
openTagCount--;
|
|
if (openTagCount === 0) {
|
|
return {
|
|
tagContent: xmlData.substring(startIndex, i),
|
|
i : closeIndex
|
|
}
|
|
}
|
|
}
|
|
i=closeIndex;
|
|
} else if(xmlData[i+1] === '?') {
|
|
const closeIndex = findClosingIndex(xmlData, "?>", i+1, "StopNode is not closed.");
|
|
i=closeIndex;
|
|
} else if(xmlData.substr(i + 1, 3) === '!--') {
|
|
const closeIndex = findClosingIndex(xmlData, "-->", i+3, "StopNode is not closed.");
|
|
i=closeIndex;
|
|
} else if(xmlData.substr(i + 1, 2) === '![') {
|
|
const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2;
|
|
i=closeIndex;
|
|
} else {
|
|
const tagData = readTagExp(xmlData, i, '>');
|
|
|
|
if (tagData) {
|
|
const openTagName = tagData && tagData.tagName;
|
|
if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== "/") {
|
|
openTagCount++;
|
|
}
|
|
i=tagData.closeIndex;
|
|
}
|
|
}
|
|
}
|
|
}//end for loop
|
|
}
|
|
|
|
function parseValue(val, shouldParse, options) {
|
|
if (shouldParse && typeof val === 'string') {
|
|
//console.log(options)
|
|
const newval = val.trim();
|
|
if(newval === 'true' ) return true;
|
|
else if(newval === 'false' ) return false;
|
|
else return toNumber(val, options);
|
|
} else {
|
|
if (util.isExist(val)) {
|
|
return val;
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
var OrderedObjParser_1 = OrderedObjParser$1;
|
|
|
|
var node2json = {};
|
|
|
|
/**
|
|
*
|
|
* @param {array} node
|
|
* @param {any} options
|
|
* @returns
|
|
*/
|
|
function prettify$1(node, options){
|
|
return compress( node, options);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {array} arr
|
|
* @param {object} options
|
|
* @param {string} jPath
|
|
* @returns object
|
|
*/
|
|
function compress(arr, options, jPath){
|
|
let text;
|
|
const compressedObj = {};
|
|
for (let i = 0; i < arr.length; i++) {
|
|
const tagObj = arr[i];
|
|
const property = propName$1(tagObj);
|
|
let newJpath = "";
|
|
if(jPath === undefined) newJpath = property;
|
|
else newJpath = jPath + "." + property;
|
|
|
|
if(property === options.textNodeName){
|
|
if(text === undefined) text = tagObj[property];
|
|
else text += "" + tagObj[property];
|
|
}else if(property === undefined){
|
|
continue;
|
|
}else if(tagObj[property]){
|
|
|
|
let val = compress(tagObj[property], options, newJpath);
|
|
const isLeaf = isLeafTag(val, options);
|
|
|
|
if(tagObj[":@"]){
|
|
assignAttributes( val, tagObj[":@"], newJpath, options);
|
|
}else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode){
|
|
val = val[options.textNodeName];
|
|
}else if(Object.keys(val).length === 0){
|
|
if(options.alwaysCreateTextNode) val[options.textNodeName] = "";
|
|
else val = "";
|
|
}
|
|
|
|
if(compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {
|
|
if(!Array.isArray(compressedObj[property])) {
|
|
compressedObj[property] = [ compressedObj[property] ];
|
|
}
|
|
compressedObj[property].push(val);
|
|
}else {
|
|
//TODO: if a node is not an array, then check if it should be an array
|
|
//also determine if it is a leaf node
|
|
if (options.isArray(property, newJpath, isLeaf )) {
|
|
compressedObj[property] = [val];
|
|
}else {
|
|
compressedObj[property] = val;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
// if(text && text.length > 0) compressedObj[options.textNodeName] = text;
|
|
if(typeof text === "string"){
|
|
if(text.length > 0) compressedObj[options.textNodeName] = text;
|
|
}else if(text !== undefined) compressedObj[options.textNodeName] = text;
|
|
return compressedObj;
|
|
}
|
|
|
|
function propName$1(obj){
|
|
const keys = Object.keys(obj);
|
|
for (let i = 0; i < keys.length; i++) {
|
|
const key = keys[i];
|
|
if(key !== ":@") return key;
|
|
}
|
|
}
|
|
|
|
function assignAttributes(obj, attrMap, jpath, options){
|
|
if (attrMap) {
|
|
const keys = Object.keys(attrMap);
|
|
const len = keys.length; //don't make it inline
|
|
for (let i = 0; i < len; i++) {
|
|
const atrrName = keys[i];
|
|
if (options.isArray(atrrName, jpath + "." + atrrName, true, true)) {
|
|
obj[atrrName] = [ attrMap[atrrName] ];
|
|
} else {
|
|
obj[atrrName] = attrMap[atrrName];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function isLeafTag(obj, options){
|
|
const { textNodeName } = options;
|
|
const propCount = Object.keys(obj).length;
|
|
|
|
if (propCount === 0) {
|
|
return true;
|
|
}
|
|
|
|
if (
|
|
propCount === 1 &&
|
|
(obj[textNodeName] || typeof obj[textNodeName] === "boolean" || obj[textNodeName] === 0)
|
|
) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
node2json.prettify = prettify$1;
|
|
|
|
const { buildOptions} = OptionsBuilder;
|
|
const OrderedObjParser = OrderedObjParser_1;
|
|
const { prettify} = node2json;
|
|
const validator$1 = validator$2;
|
|
|
|
class XMLParser$2{
|
|
|
|
constructor(options){
|
|
this.externalEntities = {};
|
|
this.options = buildOptions(options);
|
|
|
|
}
|
|
/**
|
|
* Parse XML dats to JS object
|
|
* @param {string|Buffer} xmlData
|
|
* @param {boolean|Object} validationOption
|
|
*/
|
|
parse(xmlData,validationOption){
|
|
if(typeof xmlData === "string");else if( xmlData.toString){
|
|
xmlData = xmlData.toString();
|
|
}else {
|
|
throw new Error("XML data is accepted in String or Bytes[] form.")
|
|
}
|
|
if( validationOption){
|
|
if(validationOption === true) validationOption = {}; //validate with default options
|
|
|
|
const result = validator$1.validate(xmlData, validationOption);
|
|
if (result !== true) {
|
|
throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` )
|
|
}
|
|
}
|
|
const orderedObjParser = new OrderedObjParser(this.options);
|
|
orderedObjParser.addExternalEntities(this.externalEntities);
|
|
const orderedResult = orderedObjParser.parseXml(xmlData);
|
|
if(this.options.preserveOrder || orderedResult === undefined) return orderedResult;
|
|
else return prettify(orderedResult, this.options);
|
|
}
|
|
|
|
/**
|
|
* Add Entity which is not by default supported by this library
|
|
* @param {string} key
|
|
* @param {string} value
|
|
*/
|
|
addEntity(key, value){
|
|
if(value.indexOf("&") !== -1){
|
|
throw new Error("Entity value can't have '&'")
|
|
}else if(key.indexOf("&") !== -1 || key.indexOf(";") !== -1){
|
|
throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'")
|
|
}else if(value === "&"){
|
|
throw new Error("An entity with value '&' is not permitted");
|
|
}else {
|
|
this.externalEntities[key] = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
var XMLParser_1 = XMLParser$2;
|
|
|
|
const EOL = "\n";
|
|
|
|
/**
|
|
*
|
|
* @param {array} jArray
|
|
* @param {any} options
|
|
* @returns
|
|
*/
|
|
function toXml(jArray, options) {
|
|
let indentation = "";
|
|
if (options.format && options.indentBy.length > 0) {
|
|
indentation = EOL;
|
|
}
|
|
return arrToStr(jArray, options, "", indentation);
|
|
}
|
|
|
|
function arrToStr(arr, options, jPath, indentation) {
|
|
let xmlStr = "";
|
|
let isPreviousElementTag = false;
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
const tagObj = arr[i];
|
|
const tagName = propName(tagObj);
|
|
let newJPath = "";
|
|
if (jPath.length === 0) newJPath = tagName;
|
|
else newJPath = `${jPath}.${tagName}`;
|
|
|
|
if (tagName === options.textNodeName) {
|
|
let tagText = tagObj[tagName];
|
|
if (!isStopNode(newJPath, options)) {
|
|
tagText = options.tagValueProcessor(tagName, tagText);
|
|
tagText = replaceEntitiesValue(tagText, options);
|
|
}
|
|
if (isPreviousElementTag) {
|
|
xmlStr += indentation;
|
|
}
|
|
xmlStr += tagText;
|
|
isPreviousElementTag = false;
|
|
continue;
|
|
} else if (tagName === options.cdataPropName) {
|
|
if (isPreviousElementTag) {
|
|
xmlStr += indentation;
|
|
}
|
|
xmlStr += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;
|
|
isPreviousElementTag = false;
|
|
continue;
|
|
} else if (tagName === options.commentPropName) {
|
|
xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;
|
|
isPreviousElementTag = true;
|
|
continue;
|
|
} else if (tagName[0] === "?") {
|
|
const attStr = attr_to_str(tagObj[":@"], options);
|
|
const tempInd = tagName === "?xml" ? "" : indentation;
|
|
let piTextNodeName = tagObj[tagName][0][options.textNodeName];
|
|
piTextNodeName = piTextNodeName.length !== 0 ? " " + piTextNodeName : ""; //remove extra spacing
|
|
xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;
|
|
isPreviousElementTag = true;
|
|
continue;
|
|
}
|
|
let newIdentation = indentation;
|
|
if (newIdentation !== "") {
|
|
newIdentation += options.indentBy;
|
|
}
|
|
const attStr = attr_to_str(tagObj[":@"], options);
|
|
const tagStart = indentation + `<${tagName}${attStr}`;
|
|
const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);
|
|
if (options.unpairedTags.indexOf(tagName) !== -1) {
|
|
if (options.suppressUnpairedNode) xmlStr += tagStart + ">";
|
|
else xmlStr += tagStart + "/>";
|
|
} else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {
|
|
xmlStr += tagStart + "/>";
|
|
} else if (tagValue && tagValue.endsWith(">")) {
|
|
xmlStr += tagStart + `>${tagValue}${indentation}</${tagName}>`;
|
|
} else {
|
|
xmlStr += tagStart + ">";
|
|
if (tagValue && indentation !== "" && (tagValue.includes("/>") || tagValue.includes("</"))) {
|
|
xmlStr += indentation + options.indentBy + tagValue + indentation;
|
|
} else {
|
|
xmlStr += tagValue;
|
|
}
|
|
xmlStr += `</${tagName}>`;
|
|
}
|
|
isPreviousElementTag = true;
|
|
}
|
|
|
|
return xmlStr;
|
|
}
|
|
|
|
function propName(obj) {
|
|
const keys = Object.keys(obj);
|
|
for (let i = 0; i < keys.length; i++) {
|
|
const key = keys[i];
|
|
if (key !== ":@") return key;
|
|
}
|
|
}
|
|
|
|
function attr_to_str(attrMap, options) {
|
|
let attrStr = "";
|
|
if (attrMap && !options.ignoreAttributes) {
|
|
for (let attr in attrMap) {
|
|
let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);
|
|
attrVal = replaceEntitiesValue(attrVal, options);
|
|
if (attrVal === true && options.suppressBooleanAttributes) {
|
|
attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;
|
|
} else {
|
|
attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}="${attrVal}"`;
|
|
}
|
|
}
|
|
}
|
|
return attrStr;
|
|
}
|
|
|
|
function isStopNode(jPath, options) {
|
|
jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);
|
|
let tagName = jPath.substr(jPath.lastIndexOf(".") + 1);
|
|
for (let index in options.stopNodes) {
|
|
if (options.stopNodes[index] === jPath || options.stopNodes[index] === "*." + tagName) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function replaceEntitiesValue(textValue, options) {
|
|
if (textValue && textValue.length > 0 && options.processEntities) {
|
|
for (let i = 0; i < options.entities.length; i++) {
|
|
const entity = options.entities[i];
|
|
textValue = textValue.replace(entity.regex, entity.val);
|
|
}
|
|
}
|
|
return textValue;
|
|
}
|
|
var orderedJs2Xml = toXml;
|
|
|
|
//parse Empty Node as self closing node
|
|
const buildFromOrderedJs = orderedJs2Xml;
|
|
|
|
const defaultOptions = {
|
|
attributeNamePrefix: '@_',
|
|
attributesGroupName: false,
|
|
textNodeName: '#text',
|
|
ignoreAttributes: true,
|
|
cdataPropName: false,
|
|
format: false,
|
|
indentBy: ' ',
|
|
suppressEmptyNode: false,
|
|
suppressUnpairedNode: true,
|
|
suppressBooleanAttributes: true,
|
|
tagValueProcessor: function(key, a) {
|
|
return a;
|
|
},
|
|
attributeValueProcessor: function(attrName, a) {
|
|
return a;
|
|
},
|
|
preserveOrder: false,
|
|
commentPropName: false,
|
|
unpairedTags: [],
|
|
entities: [
|
|
{ regex: new RegExp("&", "g"), val: "&" },//it must be on top
|
|
{ regex: new RegExp(">", "g"), val: ">" },
|
|
{ regex: new RegExp("<", "g"), val: "<" },
|
|
{ regex: new RegExp("\'", "g"), val: "'" },
|
|
{ regex: new RegExp("\"", "g"), val: """ }
|
|
],
|
|
processEntities: true,
|
|
stopNodes: [],
|
|
// transformTagName: false,
|
|
// transformAttributeName: false,
|
|
oneListGroup: false
|
|
};
|
|
|
|
function Builder(options) {
|
|
this.options = Object.assign({}, defaultOptions, options);
|
|
if (this.options.ignoreAttributes || this.options.attributesGroupName) {
|
|
this.isAttribute = function(/*a*/) {
|
|
return false;
|
|
};
|
|
} else {
|
|
this.attrPrefixLen = this.options.attributeNamePrefix.length;
|
|
this.isAttribute = isAttribute;
|
|
}
|
|
|
|
this.processTextOrObjNode = processTextOrObjNode;
|
|
|
|
if (this.options.format) {
|
|
this.indentate = indentate;
|
|
this.tagEndChar = '>\n';
|
|
this.newLine = '\n';
|
|
} else {
|
|
this.indentate = function() {
|
|
return '';
|
|
};
|
|
this.tagEndChar = '>';
|
|
this.newLine = '';
|
|
}
|
|
}
|
|
|
|
Builder.prototype.build = function(jObj) {
|
|
if(this.options.preserveOrder){
|
|
return buildFromOrderedJs(jObj, this.options);
|
|
}else {
|
|
if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){
|
|
jObj = {
|
|
[this.options.arrayNodeName] : jObj
|
|
};
|
|
}
|
|
return this.j2x(jObj, 0).val;
|
|
}
|
|
};
|
|
|
|
Builder.prototype.j2x = function(jObj, level) {
|
|
let attrStr = '';
|
|
let val = '';
|
|
for (let key in jObj) {
|
|
if (typeof jObj[key] === 'undefined') ; else if (jObj[key] === null) {
|
|
if(key[0] === "?") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;
|
|
else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
// val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
} else if (jObj[key] instanceof Date) {
|
|
val += this.buildTextValNode(jObj[key], key, '', level);
|
|
} else if (typeof jObj[key] !== 'object') {
|
|
//premitive type
|
|
const attr = this.isAttribute(key);
|
|
if (attr) {
|
|
attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);
|
|
}else {
|
|
//tag value
|
|
if (key === this.options.textNodeName) {
|
|
let newval = this.options.tagValueProcessor(key, '' + jObj[key]);
|
|
val += this.replaceEntitiesValue(newval);
|
|
} else {
|
|
val += this.buildTextValNode(jObj[key], key, '', level);
|
|
}
|
|
}
|
|
} else if (Array.isArray(jObj[key])) {
|
|
//repeated nodes
|
|
const arrLen = jObj[key].length;
|
|
let listTagVal = "";
|
|
for (let j = 0; j < arrLen; j++) {
|
|
const item = jObj[key][j];
|
|
if (typeof item === 'undefined') ; else if (item === null) {
|
|
if(key[0] === "?") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;
|
|
else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
// val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
} else if (typeof item === 'object') {
|
|
if(this.options.oneListGroup ){
|
|
listTagVal += this.j2x(item, level + 1).val;
|
|
}else {
|
|
listTagVal += this.processTextOrObjNode(item, key, level);
|
|
}
|
|
} else {
|
|
listTagVal += this.buildTextValNode(item, key, '', level);
|
|
}
|
|
}
|
|
if(this.options.oneListGroup){
|
|
listTagVal = this.buildObjectNode(listTagVal, key, '', level);
|
|
}
|
|
val += listTagVal;
|
|
} else {
|
|
//nested node
|
|
if (this.options.attributesGroupName && key === this.options.attributesGroupName) {
|
|
const Ks = Object.keys(jObj[key]);
|
|
const L = Ks.length;
|
|
for (let j = 0; j < L; j++) {
|
|
attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);
|
|
}
|
|
} else {
|
|
val += this.processTextOrObjNode(jObj[key], key, level);
|
|
}
|
|
}
|
|
}
|
|
return {attrStr: attrStr, val: val};
|
|
};
|
|
|
|
Builder.prototype.buildAttrPairStr = function(attrName, val){
|
|
val = this.options.attributeValueProcessor(attrName, '' + val);
|
|
val = this.replaceEntitiesValue(val);
|
|
if (this.options.suppressBooleanAttributes && val === "true") {
|
|
return ' ' + attrName;
|
|
} else return ' ' + attrName + '="' + val + '"';
|
|
};
|
|
|
|
function processTextOrObjNode (object, key, level) {
|
|
const result = this.j2x(object, level + 1);
|
|
if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {
|
|
return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);
|
|
} else {
|
|
return this.buildObjectNode(result.val, key, result.attrStr, level);
|
|
}
|
|
}
|
|
|
|
Builder.prototype.buildObjectNode = function(val, key, attrStr, level) {
|
|
if(val === ""){
|
|
if(key[0] === "?") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;
|
|
else {
|
|
return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;
|
|
}
|
|
}else {
|
|
|
|
let tagEndExp = '</' + key + this.tagEndChar;
|
|
let piClosingChar = "";
|
|
|
|
if(key[0] === "?") {
|
|
piClosingChar = "?";
|
|
tagEndExp = "";
|
|
}
|
|
|
|
if (attrStr && val.indexOf('<') === -1) {
|
|
return ( this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp );
|
|
} else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {
|
|
return this.indentate(level) + `<!--${val}-->` + this.newLine;
|
|
}else {
|
|
return (
|
|
this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +
|
|
val +
|
|
this.indentate(level) + tagEndExp );
|
|
}
|
|
}
|
|
};
|
|
|
|
Builder.prototype.closeTag = function(key){
|
|
let closeTag = "";
|
|
if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired
|
|
if(!this.options.suppressUnpairedNode) closeTag = "/";
|
|
}else if(this.options.suppressEmptyNode){ //empty
|
|
closeTag = "/";
|
|
}else {
|
|
closeTag = `></${key}`;
|
|
}
|
|
return closeTag;
|
|
};
|
|
|
|
Builder.prototype.buildTextValNode = function(val, key, attrStr, level) {
|
|
if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {
|
|
return this.indentate(level) + `<![CDATA[${val}]]>` + this.newLine;
|
|
}else if (this.options.commentPropName !== false && key === this.options.commentPropName) {
|
|
return this.indentate(level) + `<!--${val}-->` + this.newLine;
|
|
}else if(key[0] === "?") {//PI tag
|
|
return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;
|
|
}else {
|
|
let textValue = this.options.tagValueProcessor(key, val);
|
|
textValue = this.replaceEntitiesValue(textValue);
|
|
|
|
if( textValue === ''){
|
|
return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;
|
|
}else {
|
|
return this.indentate(level) + '<' + key + attrStr + '>' +
|
|
textValue +
|
|
'</' + key + this.tagEndChar;
|
|
}
|
|
}
|
|
};
|
|
|
|
Builder.prototype.replaceEntitiesValue = function(textValue){
|
|
if(textValue && textValue.length > 0 && this.options.processEntities){
|
|
for (let i=0; i<this.options.entities.length; i++) {
|
|
const entity = this.options.entities[i];
|
|
textValue = textValue.replace(entity.regex, entity.val);
|
|
}
|
|
}
|
|
return textValue;
|
|
};
|
|
|
|
function indentate(level) {
|
|
return this.options.indentBy.repeat(level);
|
|
}
|
|
|
|
function isAttribute(name /*, options*/) {
|
|
if (name.startsWith(this.options.attributeNamePrefix)) {
|
|
return name.substr(this.attrPrefixLen);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
var json2xml = Builder;
|
|
|
|
const validator = validator$2;
|
|
const XMLParser$1 = XMLParser_1;
|
|
const XMLBuilder = json2xml;
|
|
|
|
var fxp = {
|
|
XMLParser: XMLParser$1,
|
|
XMLValidator: validator,
|
|
XMLBuilder: XMLBuilder
|
|
};
|
|
|
|
const {XMLParser, XMLValidator} = fxp;
|
|
|
|
const isSvg = input => {
|
|
if (input === undefined || input === null) {
|
|
return false;
|
|
}
|
|
|
|
input = input.toString().trim();
|
|
|
|
if (input.length === 0) {
|
|
return false;
|
|
}
|
|
|
|
// Has to be `!==` as it can also return an object with error info.
|
|
if (XMLValidator.validate(input) !== true) {
|
|
return false;
|
|
}
|
|
|
|
let jsonObject;
|
|
const parser = new XMLParser();
|
|
|
|
try {
|
|
jsonObject = parser.parse(input);
|
|
} catch (_) {
|
|
return false;
|
|
}
|
|
|
|
if (!jsonObject) {
|
|
return false;
|
|
}
|
|
|
|
if (!('svg' in jsonObject)) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
isSvg$2.exports = isSvg;
|
|
// TODO: Remove this for the next major release
|
|
isSvg$2.exports.default = isSvg;
|
|
|
|
var isSvgExports = isSvg$2.exports;
|
|
var isSvg$1 = /*@__PURE__*/getDefaultExportFromCjs(isSvgExports);
|
|
|
|
var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
|
|
|
|
var escapeStringRegexp$2 = function (str) {
|
|
if (typeof str !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
return str.replace(matchOperatorsRe, '\\$&');
|
|
};
|
|
|
|
var escapeStringRegexp$1 = escapeStringRegexp$2;
|
|
|
|
var trimRepeated = function (str, target) {
|
|
if (typeof str !== 'string' || typeof target !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
return str.replace(new RegExp('(?:' + escapeStringRegexp$1(target) + '){2,}', 'g'), target);
|
|
};
|
|
|
|
var trimRepeated$1 = /*@__PURE__*/getDefaultExportFromCjs(trimRepeated);
|
|
|
|
var filenameReservedRegex$1 = {exports: {}};
|
|
|
|
/* eslint-disable no-control-regex */
|
|
// TODO: remove parens when Node.js 6 is targeted. Node.js 4 barfs at it.
|
|
filenameReservedRegex$1.exports = () => (/[<>:"\/\\|?*\x00-\x1F]/g);
|
|
filenameReservedRegex$1.exports.windowsNames = () => (/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i);
|
|
|
|
var filenameReservedRegexExports = filenameReservedRegex$1.exports;
|
|
var filenameReservedRegex = /*@__PURE__*/getDefaultExportFromCjs(filenameReservedRegexExports);
|
|
|
|
var escapeStringRegexp = escapeStringRegexp$2;
|
|
|
|
var stripOuter = function (str, sub) {
|
|
if (typeof str !== 'string' || typeof sub !== 'string') {
|
|
throw new TypeError();
|
|
}
|
|
|
|
sub = escapeStringRegexp(sub);
|
|
return str.replace(new RegExp('^' + sub + '|' + sub + '$', 'g'), '');
|
|
};
|
|
|
|
var stripOuter$1 = /*@__PURE__*/getDefaultExportFromCjs(stripOuter);
|
|
|
|
// Doesn't make sense to have longer filenames
|
|
const MAX_FILENAME_LENGTH = 100;
|
|
|
|
const reControlChars = /[\u0000-\u001F\u0080-\u009F]/g; // eslint-disable-line no-control-regex
|
|
const reRelativePath = /^\.+/;
|
|
const reTrailingPeriods = /\.+$/;
|
|
|
|
function filenamify(string, options = {}) {
|
|
if (typeof string !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
const replacement = options.replacement === undefined ? '!' : options.replacement;
|
|
|
|
if (filenameReservedRegex().test(replacement) && reControlChars.test(replacement)) {
|
|
throw new Error('Replacement string cannot contain reserved filename characters');
|
|
}
|
|
|
|
string = string.replace(filenameReservedRegex(), replacement);
|
|
string = string.replace(reControlChars, replacement);
|
|
string = string.replace(reRelativePath, replacement);
|
|
string = string.replace(reTrailingPeriods, '');
|
|
|
|
if (replacement.length > 0) {
|
|
string = trimRepeated$1(string, replacement);
|
|
string = string.length > 1 ? stripOuter$1(string, replacement) : string;
|
|
}
|
|
|
|
string = filenameReservedRegex.windowsNames().test(string) ? string + replacement : string;
|
|
string = string.slice(0, typeof options.maxLength === 'number' ? options.maxLength : MAX_FILENAME_LENGTH);
|
|
|
|
return string;
|
|
}
|
|
|
|
const APP_TITLE = "Local Images Plus 0.15.7";
|
|
const SUPPORTED_OS = { "win": "win32", "unix": "linux,darwin,freebsd,openbsd" };
|
|
const USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36';
|
|
const MD_SEARCH_PATTERN = [
|
|
//file link
|
|
/\!\[(?<anchor>(.{0}|(?!^file\:\/)+?))\]\((?<link>((file\:\/)[^\!]+?(\.{1}.{3,4}\) {0,1}|\)$|\)\n|\)])))/gm,
|
|
//hypertext link
|
|
/\!\[(?<anchor>(.{0}|[^\[]+?))\]\((?<link>((http(s){0,1}).+?(\) |\..{3,4}\)|\)$|\)\n|\)\]|\)\[)))/gm,
|
|
//Base64 encoded data
|
|
/\!\[[^\[](?<anchor>(.{0}|[^\[]+?))\]\((?<link>((data\:.+?base64\,).+?(\) |\..{3,4}\)|\)$|\)\n|\)\]|\)\[)))/gm,
|
|
/\!\[(?<anchor>(.{0}|[^\[]+?))\]\((?<link>((http(s){0,1}|(data\:.+?base64\,)).+?\)))/gm
|
|
];
|
|
const MD_LINK = /\http(s){0,1}.+?( {1}|\)\n)/g;
|
|
// Looks like timeouts in Obsidian API are set in milliseconds
|
|
const NOTICE_TIMEOUT = 5 * 1000;
|
|
const TIMEOUT_LIKE_INFINITY = 24 * 60 * 60 * 1000;
|
|
const FORBIDDEN_SYMBOLS_FILENAME_PATTERN = /\s+/g;
|
|
const DEFAULT_SETTINGS = {
|
|
processCreated: true,
|
|
ignoredExt: "cnt|php|htm|html",
|
|
processAll: true,
|
|
useCaptions: true,
|
|
pathInTags: "fullDirPath",
|
|
downUnknown: false,
|
|
saveAttE: "obsFolder",
|
|
realTimeUpdate: true,
|
|
filesizeLimit: 0,
|
|
tryCount: 2,
|
|
realTimeUpdateInterval: 5,
|
|
addNameOfFile: true,
|
|
showNotifications: true,
|
|
include: ".*\\.md",
|
|
mediaRootDir: "_resources/${notename}",
|
|
disAddCom: false,
|
|
useMD5ForNewAtt: true,
|
|
removeMediaFolder: true,
|
|
removeOrphansCompl: false
|
|
};
|
|
|
|
var md5$1 = {exports: {}};
|
|
|
|
function commonjsRequire(path) {
|
|
throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
|
|
}
|
|
|
|
var core = {exports: {}};
|
|
|
|
var _nodeResolve_empty = {};
|
|
|
|
var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
'default': _nodeResolve_empty
|
|
});
|
|
|
|
var require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);
|
|
|
|
core.exports;
|
|
|
|
var hasRequiredCore;
|
|
|
|
function requireCore () {
|
|
if (hasRequiredCore) return core.exports;
|
|
hasRequiredCore = 1;
|
|
(function (module, exports) {
|
|
(function (root, factory) {
|
|
{
|
|
// CommonJS
|
|
module.exports = factory();
|
|
}
|
|
}(commonjsGlobal, function () {
|
|
|
|
/*globals window, global, require*/
|
|
|
|
/**
|
|
* CryptoJS core components.
|
|
*/
|
|
var CryptoJS = CryptoJS || (function (Math, undefined$1) {
|
|
|
|
var crypto;
|
|
|
|
// Native crypto from window (Browser)
|
|
if (typeof window !== 'undefined' && window.crypto) {
|
|
crypto = window.crypto;
|
|
}
|
|
|
|
// Native crypto in web worker (Browser)
|
|
if (typeof self !== 'undefined' && self.crypto) {
|
|
crypto = self.crypto;
|
|
}
|
|
|
|
// Native crypto from worker
|
|
if (typeof globalThis !== 'undefined' && globalThis.crypto) {
|
|
crypto = globalThis.crypto;
|
|
}
|
|
|
|
// Native (experimental IE 11) crypto from window (Browser)
|
|
if (!crypto && typeof window !== 'undefined' && window.msCrypto) {
|
|
crypto = window.msCrypto;
|
|
}
|
|
|
|
// Native crypto from global (NodeJS)
|
|
if (!crypto && typeof commonjsGlobal !== 'undefined' && commonjsGlobal.crypto) {
|
|
crypto = commonjsGlobal.crypto;
|
|
}
|
|
|
|
// Native crypto import via require (NodeJS)
|
|
if (!crypto && typeof commonjsRequire === 'function') {
|
|
try {
|
|
crypto = require$$0;
|
|
} catch (err) {}
|
|
}
|
|
|
|
/*
|
|
* Cryptographically secure pseudorandom number generator
|
|
*
|
|
* As Math.random() is cryptographically not safe to use
|
|
*/
|
|
var cryptoSecureRandomInt = function () {
|
|
if (crypto) {
|
|
// Use getRandomValues method (Browser)
|
|
if (typeof crypto.getRandomValues === 'function') {
|
|
try {
|
|
return crypto.getRandomValues(new Uint32Array(1))[0];
|
|
} catch (err) {}
|
|
}
|
|
|
|
// Use randomBytes method (NodeJS)
|
|
if (typeof crypto.randomBytes === 'function') {
|
|
try {
|
|
return crypto.randomBytes(4).readInt32LE();
|
|
} catch (err) {}
|
|
}
|
|
}
|
|
|
|
throw new Error('Native crypto module could not be used to get secure random number.');
|
|
};
|
|
|
|
/*
|
|
* Local polyfill of Object.create
|
|
|
|
*/
|
|
var create = Object.create || (function () {
|
|
function F() {}
|
|
|
|
return function (obj) {
|
|
var subtype;
|
|
|
|
F.prototype = obj;
|
|
|
|
subtype = new F();
|
|
|
|
F.prototype = null;
|
|
|
|
return subtype;
|
|
};
|
|
}());
|
|
|
|
/**
|
|
* CryptoJS namespace.
|
|
*/
|
|
var C = {};
|
|
|
|
/**
|
|
* Library namespace.
|
|
*/
|
|
var C_lib = C.lib = {};
|
|
|
|
/**
|
|
* Base object for prototypal inheritance.
|
|
*/
|
|
var Base = C_lib.Base = (function () {
|
|
|
|
|
|
return {
|
|
/**
|
|
* Creates a new object that inherits from this object.
|
|
*
|
|
* @param {Object} overrides Properties to copy into the new object.
|
|
*
|
|
* @return {Object} The new object.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var MyType = CryptoJS.lib.Base.extend({
|
|
* field: 'value',
|
|
*
|
|
* method: function () {
|
|
* }
|
|
* });
|
|
*/
|
|
extend: function (overrides) {
|
|
// Spawn
|
|
var subtype = create(this);
|
|
|
|
// Augment
|
|
if (overrides) {
|
|
subtype.mixIn(overrides);
|
|
}
|
|
|
|
// Create default initializer
|
|
if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
|
|
subtype.init = function () {
|
|
subtype.$super.init.apply(this, arguments);
|
|
};
|
|
}
|
|
|
|
// Initializer's prototype is the subtype object
|
|
subtype.init.prototype = subtype;
|
|
|
|
// Reference supertype
|
|
subtype.$super = this;
|
|
|
|
return subtype;
|
|
},
|
|
|
|
/**
|
|
* Extends this object and runs the init method.
|
|
* Arguments to create() will be passed to init().
|
|
*
|
|
* @return {Object} The new object.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var instance = MyType.create();
|
|
*/
|
|
create: function () {
|
|
var instance = this.extend();
|
|
instance.init.apply(instance, arguments);
|
|
|
|
return instance;
|
|
},
|
|
|
|
/**
|
|
* Initializes a newly created object.
|
|
* Override this method to add some logic when your objects are created.
|
|
*
|
|
* @example
|
|
*
|
|
* var MyType = CryptoJS.lib.Base.extend({
|
|
* init: function () {
|
|
* // ...
|
|
* }
|
|
* });
|
|
*/
|
|
init: function () {
|
|
},
|
|
|
|
/**
|
|
* Copies properties into this object.
|
|
*
|
|
* @param {Object} properties The properties to mix in.
|
|
*
|
|
* @example
|
|
*
|
|
* MyType.mixIn({
|
|
* field: 'value'
|
|
* });
|
|
*/
|
|
mixIn: function (properties) {
|
|
for (var propertyName in properties) {
|
|
if (properties.hasOwnProperty(propertyName)) {
|
|
this[propertyName] = properties[propertyName];
|
|
}
|
|
}
|
|
|
|
// IE won't copy toString using the loop above
|
|
if (properties.hasOwnProperty('toString')) {
|
|
this.toString = properties.toString;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Creates a copy of this object.
|
|
*
|
|
* @return {Object} The clone.
|
|
*
|
|
* @example
|
|
*
|
|
* var clone = instance.clone();
|
|
*/
|
|
clone: function () {
|
|
return this.init.prototype.extend(this);
|
|
}
|
|
};
|
|
}());
|
|
|
|
/**
|
|
* An array of 32-bit words.
|
|
*
|
|
* @property {Array} words The array of 32-bit words.
|
|
* @property {number} sigBytes The number of significant bytes in this word array.
|
|
*/
|
|
var WordArray = C_lib.WordArray = Base.extend({
|
|
/**
|
|
* Initializes a newly created word array.
|
|
*
|
|
* @param {Array} words (Optional) An array of 32-bit words.
|
|
* @param {number} sigBytes (Optional) The number of significant bytes in the words.
|
|
*
|
|
* @example
|
|
*
|
|
* var wordArray = CryptoJS.lib.WordArray.create();
|
|
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
|
|
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
|
|
*/
|
|
init: function (words, sigBytes) {
|
|
words = this.words = words || [];
|
|
|
|
if (sigBytes != undefined$1) {
|
|
this.sigBytes = sigBytes;
|
|
} else {
|
|
this.sigBytes = words.length * 4;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Converts this word array to a string.
|
|
*
|
|
* @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
|
|
*
|
|
* @return {string} The stringified word array.
|
|
*
|
|
* @example
|
|
*
|
|
* var string = wordArray + '';
|
|
* var string = wordArray.toString();
|
|
* var string = wordArray.toString(CryptoJS.enc.Utf8);
|
|
*/
|
|
toString: function (encoder) {
|
|
return (encoder || Hex).stringify(this);
|
|
},
|
|
|
|
/**
|
|
* Concatenates a word array to this word array.
|
|
*
|
|
* @param {WordArray} wordArray The word array to append.
|
|
*
|
|
* @return {WordArray} This word array.
|
|
*
|
|
* @example
|
|
*
|
|
* wordArray1.concat(wordArray2);
|
|
*/
|
|
concat: function (wordArray) {
|
|
// Shortcuts
|
|
var thisWords = this.words;
|
|
var thatWords = wordArray.words;
|
|
var thisSigBytes = this.sigBytes;
|
|
var thatSigBytes = wordArray.sigBytes;
|
|
|
|
// Clamp excess bits
|
|
this.clamp();
|
|
|
|
// Concat
|
|
if (thisSigBytes % 4) {
|
|
// Copy one byte at a time
|
|
for (var i = 0; i < thatSigBytes; i++) {
|
|
var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
|
thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
|
|
}
|
|
} else {
|
|
// Copy one word at a time
|
|
for (var j = 0; j < thatSigBytes; j += 4) {
|
|
thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];
|
|
}
|
|
}
|
|
this.sigBytes += thatSigBytes;
|
|
|
|
// Chainable
|
|
return this;
|
|
},
|
|
|
|
/**
|
|
* Removes insignificant bits.
|
|
*
|
|
* @example
|
|
*
|
|
* wordArray.clamp();
|
|
*/
|
|
clamp: function () {
|
|
// Shortcuts
|
|
var words = this.words;
|
|
var sigBytes = this.sigBytes;
|
|
|
|
// Clamp
|
|
words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
|
|
words.length = Math.ceil(sigBytes / 4);
|
|
},
|
|
|
|
/**
|
|
* Creates a copy of this word array.
|
|
*
|
|
* @return {WordArray} The clone.
|
|
*
|
|
* @example
|
|
*
|
|
* var clone = wordArray.clone();
|
|
*/
|
|
clone: function () {
|
|
var clone = Base.clone.call(this);
|
|
clone.words = this.words.slice(0);
|
|
|
|
return clone;
|
|
},
|
|
|
|
/**
|
|
* Creates a word array filled with random bytes.
|
|
*
|
|
* @param {number} nBytes The number of random bytes to generate.
|
|
*
|
|
* @return {WordArray} The random word array.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var wordArray = CryptoJS.lib.WordArray.random(16);
|
|
*/
|
|
random: function (nBytes) {
|
|
var words = [];
|
|
|
|
for (var i = 0; i < nBytes; i += 4) {
|
|
words.push(cryptoSecureRandomInt());
|
|
}
|
|
|
|
return new WordArray.init(words, nBytes);
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Encoder namespace.
|
|
*/
|
|
var C_enc = C.enc = {};
|
|
|
|
/**
|
|
* Hex encoding strategy.
|
|
*/
|
|
var Hex = C_enc.Hex = {
|
|
/**
|
|
* Converts a word array to a hex string.
|
|
*
|
|
* @param {WordArray} wordArray The word array.
|
|
*
|
|
* @return {string} The hex string.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var hexString = CryptoJS.enc.Hex.stringify(wordArray);
|
|
*/
|
|
stringify: function (wordArray) {
|
|
// Shortcuts
|
|
var words = wordArray.words;
|
|
var sigBytes = wordArray.sigBytes;
|
|
|
|
// Convert
|
|
var hexChars = [];
|
|
for (var i = 0; i < sigBytes; i++) {
|
|
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
|
hexChars.push((bite >>> 4).toString(16));
|
|
hexChars.push((bite & 0x0f).toString(16));
|
|
}
|
|
|
|
return hexChars.join('');
|
|
},
|
|
|
|
/**
|
|
* Converts a hex string to a word array.
|
|
*
|
|
* @param {string} hexStr The hex string.
|
|
*
|
|
* @return {WordArray} The word array.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var wordArray = CryptoJS.enc.Hex.parse(hexString);
|
|
*/
|
|
parse: function (hexStr) {
|
|
// Shortcut
|
|
var hexStrLength = hexStr.length;
|
|
|
|
// Convert
|
|
var words = [];
|
|
for (var i = 0; i < hexStrLength; i += 2) {
|
|
words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
|
|
}
|
|
|
|
return new WordArray.init(words, hexStrLength / 2);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Latin1 encoding strategy.
|
|
*/
|
|
var Latin1 = C_enc.Latin1 = {
|
|
/**
|
|
* Converts a word array to a Latin1 string.
|
|
*
|
|
* @param {WordArray} wordArray The word array.
|
|
*
|
|
* @return {string} The Latin1 string.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
|
|
*/
|
|
stringify: function (wordArray) {
|
|
// Shortcuts
|
|
var words = wordArray.words;
|
|
var sigBytes = wordArray.sigBytes;
|
|
|
|
// Convert
|
|
var latin1Chars = [];
|
|
for (var i = 0; i < sigBytes; i++) {
|
|
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
|
latin1Chars.push(String.fromCharCode(bite));
|
|
}
|
|
|
|
return latin1Chars.join('');
|
|
},
|
|
|
|
/**
|
|
* Converts a Latin1 string to a word array.
|
|
*
|
|
* @param {string} latin1Str The Latin1 string.
|
|
*
|
|
* @return {WordArray} The word array.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
|
|
*/
|
|
parse: function (latin1Str) {
|
|
// Shortcut
|
|
var latin1StrLength = latin1Str.length;
|
|
|
|
// Convert
|
|
var words = [];
|
|
for (var i = 0; i < latin1StrLength; i++) {
|
|
words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
|
|
}
|
|
|
|
return new WordArray.init(words, latin1StrLength);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* UTF-8 encoding strategy.
|
|
*/
|
|
var Utf8 = C_enc.Utf8 = {
|
|
/**
|
|
* Converts a word array to a UTF-8 string.
|
|
*
|
|
* @param {WordArray} wordArray The word array.
|
|
*
|
|
* @return {string} The UTF-8 string.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
|
|
*/
|
|
stringify: function (wordArray) {
|
|
try {
|
|
return decodeURIComponent(escape(Latin1.stringify(wordArray)));
|
|
} catch (e) {
|
|
throw new Error('Malformed UTF-8 data');
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Converts a UTF-8 string to a word array.
|
|
*
|
|
* @param {string} utf8Str The UTF-8 string.
|
|
*
|
|
* @return {WordArray} The word array.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
|
|
*/
|
|
parse: function (utf8Str) {
|
|
return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Abstract buffered block algorithm template.
|
|
*
|
|
* The property blockSize must be implemented in a concrete subtype.
|
|
*
|
|
* @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
|
|
*/
|
|
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
|
|
/**
|
|
* Resets this block algorithm's data buffer to its initial state.
|
|
*
|
|
* @example
|
|
*
|
|
* bufferedBlockAlgorithm.reset();
|
|
*/
|
|
reset: function () {
|
|
// Initial values
|
|
this._data = new WordArray.init();
|
|
this._nDataBytes = 0;
|
|
},
|
|
|
|
/**
|
|
* Adds new data to this block algorithm's buffer.
|
|
*
|
|
* @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
|
|
*
|
|
* @example
|
|
*
|
|
* bufferedBlockAlgorithm._append('data');
|
|
* bufferedBlockAlgorithm._append(wordArray);
|
|
*/
|
|
_append: function (data) {
|
|
// Convert string to WordArray, else assume WordArray already
|
|
if (typeof data == 'string') {
|
|
data = Utf8.parse(data);
|
|
}
|
|
|
|
// Append
|
|
this._data.concat(data);
|
|
this._nDataBytes += data.sigBytes;
|
|
},
|
|
|
|
/**
|
|
* Processes available data blocks.
|
|
*
|
|
* This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
|
|
*
|
|
* @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
|
|
*
|
|
* @return {WordArray} The processed data.
|
|
*
|
|
* @example
|
|
*
|
|
* var processedData = bufferedBlockAlgorithm._process();
|
|
* var processedData = bufferedBlockAlgorithm._process(!!'flush');
|
|
*/
|
|
_process: function (doFlush) {
|
|
var processedWords;
|
|
|
|
// Shortcuts
|
|
var data = this._data;
|
|
var dataWords = data.words;
|
|
var dataSigBytes = data.sigBytes;
|
|
var blockSize = this.blockSize;
|
|
var blockSizeBytes = blockSize * 4;
|
|
|
|
// Count blocks ready
|
|
var nBlocksReady = dataSigBytes / blockSizeBytes;
|
|
if (doFlush) {
|
|
// Round up to include partial blocks
|
|
nBlocksReady = Math.ceil(nBlocksReady);
|
|
} else {
|
|
// Round down to include only full blocks,
|
|
// less the number of blocks that must remain in the buffer
|
|
nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
|
|
}
|
|
|
|
// Count words ready
|
|
var nWordsReady = nBlocksReady * blockSize;
|
|
|
|
// Count bytes ready
|
|
var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
|
|
|
|
// Process blocks
|
|
if (nWordsReady) {
|
|
for (var offset = 0; offset < nWordsReady; offset += blockSize) {
|
|
// Perform concrete-algorithm logic
|
|
this._doProcessBlock(dataWords, offset);
|
|
}
|
|
|
|
// Remove processed words
|
|
processedWords = dataWords.splice(0, nWordsReady);
|
|
data.sigBytes -= nBytesReady;
|
|
}
|
|
|
|
// Return processed words
|
|
return new WordArray.init(processedWords, nBytesReady);
|
|
},
|
|
|
|
/**
|
|
* Creates a copy of this object.
|
|
*
|
|
* @return {Object} The clone.
|
|
*
|
|
* @example
|
|
*
|
|
* var clone = bufferedBlockAlgorithm.clone();
|
|
*/
|
|
clone: function () {
|
|
var clone = Base.clone.call(this);
|
|
clone._data = this._data.clone();
|
|
|
|
return clone;
|
|
},
|
|
|
|
_minBufferSize: 0
|
|
});
|
|
|
|
/**
|
|
* Abstract hasher template.
|
|
*
|
|
* @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
|
|
*/
|
|
C_lib.Hasher = BufferedBlockAlgorithm.extend({
|
|
/**
|
|
* Configuration options.
|
|
*/
|
|
cfg: Base.extend(),
|
|
|
|
/**
|
|
* Initializes a newly created hasher.
|
|
*
|
|
* @param {Object} cfg (Optional) The configuration options to use for this hash computation.
|
|
*
|
|
* @example
|
|
*
|
|
* var hasher = CryptoJS.algo.SHA256.create();
|
|
*/
|
|
init: function (cfg) {
|
|
// Apply config defaults
|
|
this.cfg = this.cfg.extend(cfg);
|
|
|
|
// Set initial values
|
|
this.reset();
|
|
},
|
|
|
|
/**
|
|
* Resets this hasher to its initial state.
|
|
*
|
|
* @example
|
|
*
|
|
* hasher.reset();
|
|
*/
|
|
reset: function () {
|
|
// Reset data buffer
|
|
BufferedBlockAlgorithm.reset.call(this);
|
|
|
|
// Perform concrete-hasher logic
|
|
this._doReset();
|
|
},
|
|
|
|
/**
|
|
* Updates this hasher with a message.
|
|
*
|
|
* @param {WordArray|string} messageUpdate The message to append.
|
|
*
|
|
* @return {Hasher} This hasher.
|
|
*
|
|
* @example
|
|
*
|
|
* hasher.update('message');
|
|
* hasher.update(wordArray);
|
|
*/
|
|
update: function (messageUpdate) {
|
|
// Append
|
|
this._append(messageUpdate);
|
|
|
|
// Update the hash
|
|
this._process();
|
|
|
|
// Chainable
|
|
return this;
|
|
},
|
|
|
|
/**
|
|
* Finalizes the hash computation.
|
|
* Note that the finalize operation is effectively a destructive, read-once operation.
|
|
*
|
|
* @param {WordArray|string} messageUpdate (Optional) A final message update.
|
|
*
|
|
* @return {WordArray} The hash.
|
|
*
|
|
* @example
|
|
*
|
|
* var hash = hasher.finalize();
|
|
* var hash = hasher.finalize('message');
|
|
* var hash = hasher.finalize(wordArray);
|
|
*/
|
|
finalize: function (messageUpdate) {
|
|
// Final message update
|
|
if (messageUpdate) {
|
|
this._append(messageUpdate);
|
|
}
|
|
|
|
// Perform concrete-hasher logic
|
|
var hash = this._doFinalize();
|
|
|
|
return hash;
|
|
},
|
|
|
|
blockSize: 512/32,
|
|
|
|
/**
|
|
* Creates a shortcut function to a hasher's object interface.
|
|
*
|
|
* @param {Hasher} hasher The hasher to create a helper for.
|
|
*
|
|
* @return {Function} The shortcut function.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
|
|
*/
|
|
_createHelper: function (hasher) {
|
|
return function (message, cfg) {
|
|
return new hasher.init(cfg).finalize(message);
|
|
};
|
|
},
|
|
|
|
/**
|
|
* Creates a shortcut function to the HMAC's object interface.
|
|
*
|
|
* @param {Hasher} hasher The hasher to use in this HMAC helper.
|
|
*
|
|
* @return {Function} The shortcut function.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
|
|
*/
|
|
_createHmacHelper: function (hasher) {
|
|
return function (message, key) {
|
|
return new C_algo.HMAC.init(hasher, key).finalize(message);
|
|
};
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Algorithm namespace.
|
|
*/
|
|
var C_algo = C.algo = {};
|
|
|
|
return C;
|
|
}(Math));
|
|
|
|
|
|
return CryptoJS;
|
|
|
|
}));
|
|
} (core, core.exports));
|
|
return core.exports;
|
|
}
|
|
|
|
md5$1.exports;
|
|
|
|
(function (module, exports) {
|
|
(function (root, factory) {
|
|
{
|
|
// CommonJS
|
|
module.exports = factory(requireCore());
|
|
}
|
|
}(commonjsGlobal, function (CryptoJS) {
|
|
|
|
(function (Math) {
|
|
// Shortcuts
|
|
var C = CryptoJS;
|
|
var C_lib = C.lib;
|
|
var WordArray = C_lib.WordArray;
|
|
var Hasher = C_lib.Hasher;
|
|
var C_algo = C.algo;
|
|
|
|
// Constants table
|
|
var T = [];
|
|
|
|
// Compute constants
|
|
(function () {
|
|
for (var i = 0; i < 64; i++) {
|
|
T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
|
|
}
|
|
}());
|
|
|
|
/**
|
|
* MD5 hash algorithm.
|
|
*/
|
|
var MD5 = C_algo.MD5 = Hasher.extend({
|
|
_doReset: function () {
|
|
this._hash = new WordArray.init([
|
|
0x67452301, 0xefcdab89,
|
|
0x98badcfe, 0x10325476
|
|
]);
|
|
},
|
|
|
|
_doProcessBlock: function (M, offset) {
|
|
// Swap endian
|
|
for (var i = 0; i < 16; i++) {
|
|
// Shortcuts
|
|
var offset_i = offset + i;
|
|
var M_offset_i = M[offset_i];
|
|
|
|
M[offset_i] = (
|
|
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
|
|
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
|
|
);
|
|
}
|
|
|
|
// Shortcuts
|
|
var H = this._hash.words;
|
|
|
|
var M_offset_0 = M[offset + 0];
|
|
var M_offset_1 = M[offset + 1];
|
|
var M_offset_2 = M[offset + 2];
|
|
var M_offset_3 = M[offset + 3];
|
|
var M_offset_4 = M[offset + 4];
|
|
var M_offset_5 = M[offset + 5];
|
|
var M_offset_6 = M[offset + 6];
|
|
var M_offset_7 = M[offset + 7];
|
|
var M_offset_8 = M[offset + 8];
|
|
var M_offset_9 = M[offset + 9];
|
|
var M_offset_10 = M[offset + 10];
|
|
var M_offset_11 = M[offset + 11];
|
|
var M_offset_12 = M[offset + 12];
|
|
var M_offset_13 = M[offset + 13];
|
|
var M_offset_14 = M[offset + 14];
|
|
var M_offset_15 = M[offset + 15];
|
|
|
|
// Working varialbes
|
|
var a = H[0];
|
|
var b = H[1];
|
|
var c = H[2];
|
|
var d = H[3];
|
|
|
|
// Computation
|
|
a = FF(a, b, c, d, M_offset_0, 7, T[0]);
|
|
d = FF(d, a, b, c, M_offset_1, 12, T[1]);
|
|
c = FF(c, d, a, b, M_offset_2, 17, T[2]);
|
|
b = FF(b, c, d, a, M_offset_3, 22, T[3]);
|
|
a = FF(a, b, c, d, M_offset_4, 7, T[4]);
|
|
d = FF(d, a, b, c, M_offset_5, 12, T[5]);
|
|
c = FF(c, d, a, b, M_offset_6, 17, T[6]);
|
|
b = FF(b, c, d, a, M_offset_7, 22, T[7]);
|
|
a = FF(a, b, c, d, M_offset_8, 7, T[8]);
|
|
d = FF(d, a, b, c, M_offset_9, 12, T[9]);
|
|
c = FF(c, d, a, b, M_offset_10, 17, T[10]);
|
|
b = FF(b, c, d, a, M_offset_11, 22, T[11]);
|
|
a = FF(a, b, c, d, M_offset_12, 7, T[12]);
|
|
d = FF(d, a, b, c, M_offset_13, 12, T[13]);
|
|
c = FF(c, d, a, b, M_offset_14, 17, T[14]);
|
|
b = FF(b, c, d, a, M_offset_15, 22, T[15]);
|
|
|
|
a = GG(a, b, c, d, M_offset_1, 5, T[16]);
|
|
d = GG(d, a, b, c, M_offset_6, 9, T[17]);
|
|
c = GG(c, d, a, b, M_offset_11, 14, T[18]);
|
|
b = GG(b, c, d, a, M_offset_0, 20, T[19]);
|
|
a = GG(a, b, c, d, M_offset_5, 5, T[20]);
|
|
d = GG(d, a, b, c, M_offset_10, 9, T[21]);
|
|
c = GG(c, d, a, b, M_offset_15, 14, T[22]);
|
|
b = GG(b, c, d, a, M_offset_4, 20, T[23]);
|
|
a = GG(a, b, c, d, M_offset_9, 5, T[24]);
|
|
d = GG(d, a, b, c, M_offset_14, 9, T[25]);
|
|
c = GG(c, d, a, b, M_offset_3, 14, T[26]);
|
|
b = GG(b, c, d, a, M_offset_8, 20, T[27]);
|
|
a = GG(a, b, c, d, M_offset_13, 5, T[28]);
|
|
d = GG(d, a, b, c, M_offset_2, 9, T[29]);
|
|
c = GG(c, d, a, b, M_offset_7, 14, T[30]);
|
|
b = GG(b, c, d, a, M_offset_12, 20, T[31]);
|
|
|
|
a = HH(a, b, c, d, M_offset_5, 4, T[32]);
|
|
d = HH(d, a, b, c, M_offset_8, 11, T[33]);
|
|
c = HH(c, d, a, b, M_offset_11, 16, T[34]);
|
|
b = HH(b, c, d, a, M_offset_14, 23, T[35]);
|
|
a = HH(a, b, c, d, M_offset_1, 4, T[36]);
|
|
d = HH(d, a, b, c, M_offset_4, 11, T[37]);
|
|
c = HH(c, d, a, b, M_offset_7, 16, T[38]);
|
|
b = HH(b, c, d, a, M_offset_10, 23, T[39]);
|
|
a = HH(a, b, c, d, M_offset_13, 4, T[40]);
|
|
d = HH(d, a, b, c, M_offset_0, 11, T[41]);
|
|
c = HH(c, d, a, b, M_offset_3, 16, T[42]);
|
|
b = HH(b, c, d, a, M_offset_6, 23, T[43]);
|
|
a = HH(a, b, c, d, M_offset_9, 4, T[44]);
|
|
d = HH(d, a, b, c, M_offset_12, 11, T[45]);
|
|
c = HH(c, d, a, b, M_offset_15, 16, T[46]);
|
|
b = HH(b, c, d, a, M_offset_2, 23, T[47]);
|
|
|
|
a = II(a, b, c, d, M_offset_0, 6, T[48]);
|
|
d = II(d, a, b, c, M_offset_7, 10, T[49]);
|
|
c = II(c, d, a, b, M_offset_14, 15, T[50]);
|
|
b = II(b, c, d, a, M_offset_5, 21, T[51]);
|
|
a = II(a, b, c, d, M_offset_12, 6, T[52]);
|
|
d = II(d, a, b, c, M_offset_3, 10, T[53]);
|
|
c = II(c, d, a, b, M_offset_10, 15, T[54]);
|
|
b = II(b, c, d, a, M_offset_1, 21, T[55]);
|
|
a = II(a, b, c, d, M_offset_8, 6, T[56]);
|
|
d = II(d, a, b, c, M_offset_15, 10, T[57]);
|
|
c = II(c, d, a, b, M_offset_6, 15, T[58]);
|
|
b = II(b, c, d, a, M_offset_13, 21, T[59]);
|
|
a = II(a, b, c, d, M_offset_4, 6, T[60]);
|
|
d = II(d, a, b, c, M_offset_11, 10, T[61]);
|
|
c = II(c, d, a, b, M_offset_2, 15, T[62]);
|
|
b = II(b, c, d, a, M_offset_9, 21, T[63]);
|
|
|
|
// Intermediate hash value
|
|
H[0] = (H[0] + a) | 0;
|
|
H[1] = (H[1] + b) | 0;
|
|
H[2] = (H[2] + c) | 0;
|
|
H[3] = (H[3] + d) | 0;
|
|
},
|
|
|
|
_doFinalize: function () {
|
|
// Shortcuts
|
|
var data = this._data;
|
|
var dataWords = data.words;
|
|
|
|
var nBitsTotal = this._nDataBytes * 8;
|
|
var nBitsLeft = data.sigBytes * 8;
|
|
|
|
// Add padding
|
|
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
|
|
|
|
var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
|
|
var nBitsTotalL = nBitsTotal;
|
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (
|
|
(((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |
|
|
(((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)
|
|
);
|
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
|
|
(((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |
|
|
(((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)
|
|
);
|
|
|
|
data.sigBytes = (dataWords.length + 1) * 4;
|
|
|
|
// Hash final blocks
|
|
this._process();
|
|
|
|
// Shortcuts
|
|
var hash = this._hash;
|
|
var H = hash.words;
|
|
|
|
// Swap endian
|
|
for (var i = 0; i < 4; i++) {
|
|
// Shortcut
|
|
var H_i = H[i];
|
|
|
|
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
|
|
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
|
|
}
|
|
|
|
// Return final computed hash
|
|
return hash;
|
|
},
|
|
|
|
clone: function () {
|
|
var clone = Hasher.clone.call(this);
|
|
clone._hash = this._hash.clone();
|
|
|
|
return clone;
|
|
}
|
|
});
|
|
|
|
function FF(a, b, c, d, x, s, t) {
|
|
var n = a + ((b & c) | (~b & d)) + x + t;
|
|
return ((n << s) | (n >>> (32 - s))) + b;
|
|
}
|
|
|
|
function GG(a, b, c, d, x, s, t) {
|
|
var n = a + ((b & d) | (c & ~d)) + x + t;
|
|
return ((n << s) | (n >>> (32 - s))) + b;
|
|
}
|
|
|
|
function HH(a, b, c, d, x, s, t) {
|
|
var n = a + (b ^ c ^ d) + x + t;
|
|
return ((n << s) | (n >>> (32 - s))) + b;
|
|
}
|
|
|
|
function II(a, b, c, d, x, s, t) {
|
|
var n = a + (c ^ (b | ~d)) + x + t;
|
|
return ((n << s) | (n >>> (32 - s))) + b;
|
|
}
|
|
|
|
/**
|
|
* Shortcut function to the hasher's object interface.
|
|
*
|
|
* @param {WordArray|string} message The message to hash.
|
|
*
|
|
* @return {WordArray} The hash.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var hash = CryptoJS.MD5('message');
|
|
* var hash = CryptoJS.MD5(wordArray);
|
|
*/
|
|
C.MD5 = Hasher._createHelper(MD5);
|
|
|
|
/**
|
|
* Shortcut function to the HMAC's object interface.
|
|
*
|
|
* @param {WordArray|string} message The message to hash.
|
|
* @param {WordArray|string} key The secret key.
|
|
*
|
|
* @return {WordArray} The HMAC.
|
|
*
|
|
* @static
|
|
*
|
|
* @example
|
|
*
|
|
* var hmac = CryptoJS.HmacMD5(message, key);
|
|
*/
|
|
C.HmacMD5 = Hasher._createHmacHelper(MD5);
|
|
}(Math));
|
|
|
|
|
|
return CryptoJS.MD5;
|
|
|
|
}));
|
|
} (md5$1, md5$1.exports));
|
|
|
|
var md5Exports = md5$1.exports;
|
|
var md5 = /*@__PURE__*/getDefaultExportFromCjs(md5Exports);
|
|
|
|
//import { TIMEOUT } from "dns";
|
|
//import fs from "fs";
|
|
const fs = require('fs').promises;
|
|
/*
|
|
https://stackoverflow.com/a/48032528/1020973
|
|
It will be better to do it type-correct.
|
|
|
|
*/
|
|
function showBalloon(str, show = true, timeout = NOTICE_TIMEOUT) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (show) {
|
|
new obsidian.Notice(APP_TITLE + "\r\n" + str, timeout);
|
|
}
|
|
});
|
|
}
|
|
function displayError(error, file) {
|
|
if (file) {
|
|
showBalloon(`LocalImagesPlus: Error while handling file ${file.name}, ${error.toString()}`);
|
|
}
|
|
else {
|
|
showBalloon(error.toString());
|
|
}
|
|
logError(`LocalImagesPlus: error: ${error}`, false);
|
|
}
|
|
function logError(str, isObj = false) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
});
|
|
}
|
|
function md5Sig(contentData = undefined) {
|
|
try {
|
|
var dec = new TextDecoder("utf-8");
|
|
const arrMid = Math.round(contentData.byteLength / 2);
|
|
const chunk = 15000;
|
|
const signature = md5([
|
|
contentData.slice(0, chunk),
|
|
contentData.slice(arrMid, arrMid + chunk),
|
|
contentData.slice(-chunk)
|
|
].map(x => dec.decode(x)).join()).toString();
|
|
return signature + "_MD5";
|
|
}
|
|
catch (e) {
|
|
logError("Cannot generate md5: " + e, false);
|
|
return null;
|
|
}
|
|
}
|
|
function replaceAsync(str, regex, asyncFn) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
logError();
|
|
logError(regex, true);
|
|
let errorflag = false;
|
|
const promises = [];
|
|
let dictPatt = [];
|
|
let link;
|
|
let anchor;
|
|
let replp;
|
|
let caption = "";
|
|
let filesArr = [];
|
|
regex.forEach((element) => {
|
|
var _a;
|
|
logError();
|
|
const matches = str.matchAll(element);
|
|
for (const match of matches) {
|
|
logError();
|
|
logError();
|
|
anchor = match.groups.anchor;
|
|
link = ((_a = match.groups.link.match(MD_LINK)) !== null && _a !== void 0 ? _a : [match.groups.link])[0];
|
|
caption = trimAny((match.groups.link.match(MD_LINK) !== null ?
|
|
(match.groups.link.split(link).length > 1 ?
|
|
match.groups.link.split(link)[1] : "") :
|
|
""), [")", "]", "(", "[", " "]);
|
|
link = trimAny(link, [")", "(", "]", "[", " "]);
|
|
replp = trimAny(match[0], ["[", "(", "]"]);
|
|
logError();
|
|
dictPatt[replp] = [anchor, link, caption];
|
|
}
|
|
});
|
|
for (var key in dictPatt) {
|
|
const promise = asyncFn(key, dictPatt[key][0], dictPatt[key][1], dictPatt[key][2]);
|
|
logError(promise, true);
|
|
promises.push(promise);
|
|
}
|
|
const data = yield Promise.all(promises);
|
|
logError();
|
|
logError(data, true);
|
|
// return str.replace((reg: RegExp, str: String) => {
|
|
data.forEach((element) => {
|
|
if (element !== null) {
|
|
logError("el: " + element[0] + " el2: " + element[1] + element[2]);
|
|
str = str.replaceAll(element[0], element[1] + element[2]);
|
|
filesArr.push(element[1]);
|
|
}
|
|
else {
|
|
errorflag = true;
|
|
}
|
|
});
|
|
return [str, errorflag, filesArr];
|
|
// return str.replace( () => data.shift());
|
|
});
|
|
}
|
|
function isUrl(link) {
|
|
logError("IsUrl: " + link, false);
|
|
try {
|
|
return Boolean(new URL(link));
|
|
}
|
|
catch (_) {
|
|
return false;
|
|
}
|
|
}
|
|
function base64ToBuff(data) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
logError("base64ToBuff: \r\n", false);
|
|
try {
|
|
const BufferData = Buffer.from(data.split("base64,")[1], 'base64');
|
|
logError(BufferData);
|
|
return BufferData;
|
|
}
|
|
catch (e) {
|
|
logError("Cannot read base64: " + e, false);
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
function readFromDisk(file) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
logError("readFromDisk: " + file, false);
|
|
try {
|
|
const data = yield fs.readFile(file, null);
|
|
//const data = await app.vault.adapter.readBinary(path.relative(app.vault.adapter.basePath, file));
|
|
return Buffer.from(data);
|
|
}
|
|
catch (e) {
|
|
logError("Cannot read the file: " + e, false);
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
function downloadImage(url) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
logError("Downloading: " + url, false);
|
|
const headers = {
|
|
'method': 'GET',
|
|
'User-Agent': USER_AGENT
|
|
};
|
|
try {
|
|
const res = yield obsidian.requestUrl({ url: url, headers });
|
|
logError(res, true);
|
|
return res.arrayBuffer;
|
|
}
|
|
catch (e) {
|
|
logError("Cannot download the file: " + e, false);
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
function getFileExt(content, link) {
|
|
var _a;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const fileExtByLink = path__default["default"].extname(link).replace("\.", "");
|
|
const fileExtByBuffer = (_a = (yield fileType_1.fromBuffer(content))) === null || _a === void 0 ? void 0 : _a.ext;
|
|
// if XML, probably it is SVG
|
|
if (fileExtByBuffer == "xml" || !fileExtByBuffer) {
|
|
const buffer = Buffer.from(content);
|
|
if (isSvg$1(buffer))
|
|
return "svg";
|
|
}
|
|
if (fileExtByBuffer && fileExtByBuffer.length <= 5 && fileExtByBuffer.length > 0) {
|
|
return fileExtByBuffer;
|
|
}
|
|
if (fileExtByLink && fileExtByLink.length <= 5 && fileExtByBuffer.length > 0) {
|
|
return fileExtByLink;
|
|
}
|
|
return "unknown";
|
|
});
|
|
}
|
|
//https://stackoverflow.com/questions/26156292/trim-specific-character-from-a-string
|
|
function trimAny(str, chars) {
|
|
var start = 0, end = str.length;
|
|
while (start < end && chars.indexOf(str[start]) >= 0)
|
|
++start;
|
|
while (end > start && chars.indexOf(str[end - 1]) >= 0)
|
|
--end;
|
|
return (start > 0 || end < str.length) ? str.substring(start, end) : str;
|
|
}
|
|
function cFileName(name) {
|
|
const cleanedName = name.replace(/(\)|\(|\"|\'|\#|\]|\[|\:|\>|\<|\*|\|)/g, " ");
|
|
return cleanedName;
|
|
}
|
|
function cleanFileName(name) {
|
|
const cleanedName = filenamify(name).replace(FORBIDDEN_SYMBOLS_FILENAME_PATTERN, "_");
|
|
return cleanedName;
|
|
}
|
|
function pathJoin(parts) {
|
|
const result = path__default["default"].join(...parts);
|
|
// it seems that obsidian do not understand paths with backslashes in Windows, so turn them into forward slashes
|
|
return result.replace(/\\/g, "/");
|
|
}
|
|
function normalizePath(path) {
|
|
return path.replace(/\\/g, "/");
|
|
}
|
|
function encObsURI(e) {
|
|
return e.replace(/[\\\x00\x08\x0B\x0C\x0E-\x1F ]/g, (function (e) {
|
|
return encodeURIComponent(e);
|
|
}));
|
|
}
|
|
|
|
var AsyncLock$1 = function (opts) {
|
|
opts = opts || {};
|
|
|
|
this.Promise = opts.Promise || Promise;
|
|
|
|
// format: {key : [fn, fn]}
|
|
// queues[key] = null indicates no job running for key
|
|
this.queues = Object.create(null);
|
|
|
|
// lock is reentrant for same domain
|
|
this.domainReentrant = opts.domainReentrant || false;
|
|
if (this.domainReentrant) {
|
|
if (typeof process === 'undefined' || typeof process.domain === 'undefined') {
|
|
throw new Error(
|
|
'Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, ' +
|
|
'use a NodeJS version that still implements Domain, or install a browser polyfill.');
|
|
}
|
|
// domain of current running func {key : fn}
|
|
this.domains = Object.create(null);
|
|
}
|
|
|
|
this.timeout = opts.timeout || AsyncLock$1.DEFAULT_TIMEOUT;
|
|
this.maxOccupationTime = opts.maxOccupationTime || AsyncLock$1.DEFAULT_MAX_OCCUPATION_TIME;
|
|
this.maxExecutionTime = opts.maxExecutionTime || AsyncLock$1.DEFAULT_MAX_EXECUTION_TIME;
|
|
if (opts.maxPending === Infinity || (Number.isInteger(opts.maxPending) && opts.maxPending >= 0)) {
|
|
this.maxPending = opts.maxPending;
|
|
} else {
|
|
this.maxPending = AsyncLock$1.DEFAULT_MAX_PENDING;
|
|
}
|
|
};
|
|
|
|
AsyncLock$1.DEFAULT_TIMEOUT = 0; //Never
|
|
AsyncLock$1.DEFAULT_MAX_OCCUPATION_TIME = 0; //Never
|
|
AsyncLock$1.DEFAULT_MAX_EXECUTION_TIME = 0; //Never
|
|
AsyncLock$1.DEFAULT_MAX_PENDING = 1000;
|
|
|
|
/**
|
|
* Acquire Locks
|
|
*
|
|
* @param {String|Array} key resource key or keys to lock
|
|
* @param {function} fn async function
|
|
* @param {function} cb callback function, otherwise will return a promise
|
|
* @param {Object} opts options
|
|
*/
|
|
AsyncLock$1.prototype.acquire = function (key, fn, cb, opts) {
|
|
if (Array.isArray(key)) {
|
|
return this._acquireBatch(key, fn, cb, opts);
|
|
}
|
|
|
|
if (typeof (fn) !== 'function') {
|
|
throw new Error('You must pass a function to execute');
|
|
}
|
|
|
|
// faux-deferred promise using new Promise() (as Promise.defer is deprecated)
|
|
var deferredResolve = null;
|
|
var deferredReject = null;
|
|
var deferred = null;
|
|
|
|
if (typeof (cb) !== 'function') {
|
|
opts = cb;
|
|
cb = null;
|
|
|
|
// will return a promise
|
|
deferred = new this.Promise(function(resolve, reject) {
|
|
deferredResolve = resolve;
|
|
deferredReject = reject;
|
|
});
|
|
}
|
|
|
|
opts = opts || {};
|
|
|
|
var resolved = false;
|
|
var timer = null;
|
|
var occupationTimer = null;
|
|
var executionTimer = null;
|
|
var self = this;
|
|
|
|
var done = function (locked, err, ret) {
|
|
|
|
if (occupationTimer) {
|
|
clearTimeout(occupationTimer);
|
|
occupationTimer = null;
|
|
}
|
|
|
|
if (executionTimer) {
|
|
clearTimeout(executionTimer);
|
|
executionTimer = null;
|
|
}
|
|
|
|
if (locked) {
|
|
if (!!self.queues[key] && self.queues[key].length === 0) {
|
|
delete self.queues[key];
|
|
}
|
|
if (self.domainReentrant) {
|
|
delete self.domains[key];
|
|
}
|
|
}
|
|
|
|
if (!resolved) {
|
|
if (!deferred) {
|
|
if (typeof (cb) === 'function') {
|
|
cb(err, ret);
|
|
}
|
|
}
|
|
else {
|
|
//promise mode
|
|
if (err) {
|
|
deferredReject(err);
|
|
}
|
|
else {
|
|
deferredResolve(ret);
|
|
}
|
|
}
|
|
resolved = true;
|
|
}
|
|
|
|
if (locked) {
|
|
//run next func
|
|
if (!!self.queues[key] && self.queues[key].length > 0) {
|
|
self.queues[key].shift()();
|
|
}
|
|
}
|
|
};
|
|
|
|
var exec = function (locked) {
|
|
if (resolved) { // may due to timed out
|
|
return done(locked);
|
|
}
|
|
|
|
if (timer) {
|
|
clearTimeout(timer);
|
|
timer = null;
|
|
}
|
|
|
|
if (self.domainReentrant && locked) {
|
|
self.domains[key] = process.domain;
|
|
}
|
|
|
|
var maxExecutionTime = opts.maxExecutionTime || self.maxExecutionTime;
|
|
if (maxExecutionTime) {
|
|
executionTimer = setTimeout(function () {
|
|
if (!!self.queues[key]) {
|
|
done(locked, new Error('Maximum execution time is exceeded ' + key));
|
|
}
|
|
}, maxExecutionTime);
|
|
}
|
|
|
|
// Callback mode
|
|
if (fn.length === 1) {
|
|
var called = false;
|
|
try {
|
|
fn(function (err, ret) {
|
|
if (!called) {
|
|
called = true;
|
|
done(locked, err, ret);
|
|
}
|
|
});
|
|
} catch (err) {
|
|
// catching error thrown in user function fn
|
|
if (!called) {
|
|
called = true;
|
|
done(locked, err);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// Promise mode
|
|
self._promiseTry(function () {
|
|
return fn();
|
|
})
|
|
.then(function(ret){
|
|
done(locked, undefined, ret);
|
|
}, function(error){
|
|
done(locked, error);
|
|
});
|
|
}
|
|
};
|
|
|
|
if (self.domainReentrant && !!process.domain) {
|
|
exec = process.domain.bind(exec);
|
|
}
|
|
|
|
if (!self.queues[key]) {
|
|
self.queues[key] = [];
|
|
exec(true);
|
|
}
|
|
else if (self.domainReentrant && !!process.domain && process.domain === self.domains[key]) {
|
|
// If code is in the same domain of current running task, run it directly
|
|
// Since lock is re-enterable
|
|
exec(false);
|
|
}
|
|
else if (self.queues[key].length >= self.maxPending) {
|
|
done(false, new Error('Too many pending tasks in queue ' + key));
|
|
}
|
|
else {
|
|
var taskFn = function () {
|
|
exec(true);
|
|
};
|
|
if (opts.skipQueue) {
|
|
self.queues[key].unshift(taskFn);
|
|
} else {
|
|
self.queues[key].push(taskFn);
|
|
}
|
|
|
|
var timeout = opts.timeout || self.timeout;
|
|
if (timeout) {
|
|
timer = setTimeout(function () {
|
|
timer = null;
|
|
done(false, new Error('async-lock timed out in queue ' + key));
|
|
}, timeout);
|
|
}
|
|
}
|
|
|
|
var maxOccupationTime = opts.maxOccupationTime || self.maxOccupationTime;
|
|
if (maxOccupationTime) {
|
|
occupationTimer = setTimeout(function () {
|
|
if (!!self.queues[key]) {
|
|
done(false, new Error('Maximum occupation time is exceeded in queue ' + key));
|
|
}
|
|
}, maxOccupationTime);
|
|
}
|
|
|
|
if (deferred) {
|
|
return deferred;
|
|
}
|
|
};
|
|
|
|
/*
|
|
* Below is how this function works:
|
|
*
|
|
* Equivalent code:
|
|
* self.acquire(key1, function(cb){
|
|
* self.acquire(key2, function(cb){
|
|
* self.acquire(key3, fn, cb);
|
|
* }, cb);
|
|
* }, cb);
|
|
*
|
|
* Equivalent code:
|
|
* var fn3 = getFn(key3, fn);
|
|
* var fn2 = getFn(key2, fn3);
|
|
* var fn1 = getFn(key1, fn2);
|
|
* fn1(cb);
|
|
*/
|
|
AsyncLock$1.prototype._acquireBatch = function (keys, fn, cb, opts) {
|
|
if (typeof (cb) !== 'function') {
|
|
opts = cb;
|
|
cb = null;
|
|
}
|
|
|
|
var self = this;
|
|
var getFn = function (key, fn) {
|
|
return function (cb) {
|
|
self.acquire(key, fn, cb, opts);
|
|
};
|
|
};
|
|
|
|
var fnx = keys.reduceRight(function (prev, key) {
|
|
return getFn(key, prev);
|
|
}, fn);
|
|
|
|
if (typeof (cb) === 'function') {
|
|
fnx(cb);
|
|
}
|
|
else {
|
|
return new this.Promise(function (resolve, reject) {
|
|
// check for promise mode in case keys is empty array
|
|
if (fnx.length === 1) {
|
|
fnx(function (err, ret) {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(ret);
|
|
}
|
|
});
|
|
} else {
|
|
resolve(fnx());
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
/*
|
|
* Whether there is any running or pending asyncFunc
|
|
*
|
|
* @param {String} key
|
|
*/
|
|
AsyncLock$1.prototype.isBusy = function (key) {
|
|
if (!key) {
|
|
return Object.keys(this.queues).length > 0;
|
|
}
|
|
else {
|
|
return !!this.queues[key];
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Promise.try() implementation to become independent of Q-specific methods
|
|
*/
|
|
AsyncLock$1.prototype._promiseTry = function(fn) {
|
|
try {
|
|
return this.Promise.resolve(fn());
|
|
} catch (e) {
|
|
return this.Promise.reject(e);
|
|
}
|
|
};
|
|
|
|
var lib = AsyncLock$1;
|
|
|
|
var asyncLock = lib;
|
|
|
|
var AsyncLock = /*@__PURE__*/getDefaultExportFromCjs(asyncLock);
|
|
|
|
function imageTagProcessor(app, noteFile, settings, defaultdir) {
|
|
const unique = Math.random().toString(16).slice(2);
|
|
function processImageTag(match, anchor, link, caption) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
logError();
|
|
if (!isUrl(link)) {
|
|
return match;
|
|
}
|
|
try {
|
|
var lock = new AsyncLock();
|
|
let fpath;
|
|
let fileData;
|
|
const opsys = process.platform;
|
|
const mediaDir = yield getMDir(app.app, noteFile, settings, defaultdir, unique);
|
|
yield app.ensureFolderExists(mediaDir);
|
|
const protocol = link.slice(0, 5);
|
|
if (protocol == "data:") {
|
|
logError("ReadBase64: \r\n" + fpath, false);
|
|
fileData = yield base64ToBuff(link);
|
|
}
|
|
else if (protocol == "file:") {
|
|
logError("Readlocal: \r\n" + fpath, false);
|
|
if (SUPPORTED_OS.win.includes(opsys)) {
|
|
fpath = link.replace("file:///", "");
|
|
}
|
|
else if (SUPPORTED_OS.unix.includes(opsys)) {
|
|
fpath = link.replace("file://", "");
|
|
}
|
|
else {
|
|
fpath = link.replace("file://", "");
|
|
}
|
|
fileData = yield readFromDisk(fpath);
|
|
if (fileData === null) {
|
|
fileData = yield readFromDisk(decodeURI(fpath));
|
|
}
|
|
}
|
|
else {
|
|
//Try to download several times
|
|
let trycount = 0;
|
|
while (trycount < settings.tryCount) {
|
|
fileData = yield downloadImage(link);
|
|
logError("\r\n\nDownloading (try): " + trycount + "\r\n\n");
|
|
if (fileData !== null) {
|
|
break;
|
|
}
|
|
trycount++;
|
|
}
|
|
}
|
|
if (fileData === null) {
|
|
logError("Cannot get an attachment content!", false);
|
|
return null;
|
|
}
|
|
if (Math.round(fileData.byteLength / 1024) < settings.filesizeLimit) {
|
|
logError("Lower limit of the file size!", false);
|
|
return null;
|
|
}
|
|
try {
|
|
const { fileName, needWrite } = yield lock.acquire(match, function () {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const { fileName, needWrite } = yield chooseFileName(app.app.vault.adapter, mediaDir, link, fileData, settings);
|
|
return { fileName, needWrite };
|
|
});
|
|
});
|
|
if (needWrite && fileName) {
|
|
yield app.app.vault.createBinary(fileName, fileData);
|
|
}
|
|
if (fileName) {
|
|
let shortName = "";
|
|
const rdir = yield getRDir(noteFile, settings, fileName, link);
|
|
let pathWiki = rdir[0];
|
|
let pathMd = rdir[1];
|
|
if (settings.addNameOfFile && protocol == "file:") {
|
|
if (!app.app.vault.getConfig("useMarkdownLinks")) {
|
|
shortName = "\r\n[[" +
|
|
fileName +
|
|
"\|" +
|
|
rdir[2]["lnkurid"] + "]]\r\n";
|
|
}
|
|
else {
|
|
shortName = "\r\n[" +
|
|
rdir[2]["lnkurid"] +
|
|
"](" +
|
|
rdir[2]["pathuri"] +
|
|
")\r\n";
|
|
}
|
|
}
|
|
if (!app.app.vault.getConfig("useMarkdownLinks")) {
|
|
(!settings.useCaptions || !caption.length) ? caption = "" : caption = "\|" + caption;
|
|
return [match, `![[${pathWiki}${caption}]]`, `${shortName}`];
|
|
}
|
|
else {
|
|
(!settings.useCaptions || !caption.length) ? caption = "" : caption = " " + caption;
|
|
return [match, ``, `${shortName}`];
|
|
}
|
|
}
|
|
else {
|
|
return null;
|
|
}
|
|
}
|
|
catch (error) {
|
|
if (error.message === "File already exists.") {
|
|
}
|
|
else {
|
|
throw error;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
catch (error) {
|
|
logError("Image processing failed: " + error, false);
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
return processImageTag;
|
|
}
|
|
function getRDir(noteFile, settings, fileName, link = undefined) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let pathWiki = "";
|
|
let pathMd = "";
|
|
const notePath = normalizePath(noteFile.parent.path);
|
|
const parsedPath = path__default["default"].parse(normalizePath(fileName));
|
|
const parsedPathE = {
|
|
parentd: path__default["default"].basename(parsedPath["dir"]),
|
|
basen: (parsedPath["name"] + parsedPath["ext"]),
|
|
lnkurid: path__default["default"].basename(decodeURI(link)),
|
|
pathuri: encodeURI(normalizePath(fileName))
|
|
};
|
|
switch (settings.pathInTags) {
|
|
case "baseFileName":
|
|
pathWiki = pathMd = parsedPathE["basen"];
|
|
break;
|
|
case "onlyRelative":
|
|
pathWiki = pathJoin([path__default["default"].relative(path__default["default"].sep + notePath, path__default["default"].sep + parsedPath["dir"]), parsedPathE["basen"]]);
|
|
pathMd = encodeURI(pathWiki);
|
|
break;
|
|
case "fullDirPath":
|
|
pathWiki = fileName.replace(/\\/g, "/");
|
|
pathMd = parsedPathE["pathuri"];
|
|
break;
|
|
default:
|
|
pathWiki = fileName;
|
|
pathMd = parsedPathE["pathuri"];
|
|
}
|
|
return [pathWiki, pathMd, parsedPathE];
|
|
});
|
|
}
|
|
function getMDir(app, noteFile, settings, defaultdir = false, unique = "") {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
noteFile.parent.path;
|
|
const date = new Date();
|
|
const current_date = date.getDate() + "." + (date.getMonth() + 1) + "." + date.getFullYear();
|
|
const obsmediadir = app.vault.getConfig("attachmentFolderPath");
|
|
const mediadir = settings.mediaRootDir;
|
|
var attdir = settings.saveAttE;
|
|
if (defaultdir) {
|
|
attdir = "";
|
|
}
|
|
let root = "/";
|
|
switch (attdir) {
|
|
case 'inFolderBelow':
|
|
root = mediadir
|
|
.replace("${notename}", noteFile.basename)
|
|
.replace("${unique}", unique)
|
|
.replace("${date}", current_date);
|
|
break;
|
|
case 'nextToNoteS':
|
|
root = (pathJoin([noteFile.parent.path, mediadir]))
|
|
.replace("${notename}", noteFile.basename)
|
|
.replace("${unique}", unique)
|
|
.replace("${date}", current_date);
|
|
break;
|
|
default:
|
|
if (obsmediadir === '/') {
|
|
root = obsmediadir;
|
|
}
|
|
else if (obsmediadir === './') {
|
|
root = pathJoin([noteFile.parent.path]);
|
|
}
|
|
else if (obsmediadir.match(/\.\/.+/g) !== null) {
|
|
root = pathJoin([noteFile.parent.path, obsmediadir.replace('\.\/', '')]);
|
|
}
|
|
else {
|
|
root = normalizePath(obsmediadir);
|
|
}
|
|
}
|
|
return trimAny(root, ["/", "\\"]);
|
|
});
|
|
}
|
|
function chooseFileName(adapter, dir, link, contentData, settings) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const parsedUrl = new url.URL(link);
|
|
const ignoredExt = settings.ignoredExt.split("|");
|
|
let fileExt = yield getFileExt(contentData, parsedUrl.pathname);
|
|
logError("file: " + link + " content: " + contentData + " file ext: " + fileExt, false);
|
|
if (fileExt == "unknown" && !settings.downUnknown) {
|
|
return { fileName: "", needWrite: false };
|
|
}
|
|
if (ignoredExt.includes(fileExt)) {
|
|
return { fileName: "", needWrite: false };
|
|
}
|
|
const baseName = md5Sig(contentData);
|
|
let needWrite = true;
|
|
let fileName = "";
|
|
const suggestedName = pathJoin([dir, cleanFileName(`${baseName}` + `.${fileExt}`)]);
|
|
if (yield adapter.exists(suggestedName, false)) {
|
|
const fileData = yield adapter.readBinary(suggestedName);
|
|
const existing_file_md5 = md5Sig(fileData);
|
|
if (existing_file_md5 === baseName) {
|
|
fileName = suggestedName;
|
|
needWrite = false;
|
|
}
|
|
else {
|
|
fileName = pathJoin([dir, cleanFileName(Math.random().toString(9).slice(2) + `.${fileExt}`)]);
|
|
}
|
|
}
|
|
else {
|
|
fileName = suggestedName;
|
|
}
|
|
logError("File name: " + fileName, false);
|
|
if (!fileName) {
|
|
throw new Error("Failed to generate file name for media file.");
|
|
}
|
|
//linkHashes.ensureHashGenerated(link, contentData);
|
|
return { fileName, needWrite };
|
|
});
|
|
}
|
|
|
|
// Queue that keep only unique values and counts attempts
|
|
class UniqueQueue {
|
|
constructor() {
|
|
this.queue = new Array();
|
|
}
|
|
push(value, attempts) {
|
|
if (attempts < 1) {
|
|
console.error("Triyng to enqueue item with attempts < 1");
|
|
return;
|
|
}
|
|
this.remove(value);
|
|
this.queue.push({ value, attempts });
|
|
}
|
|
remove(value) {
|
|
this.queue = this.queue.filter((item) => item.value !== value);
|
|
}
|
|
iterationQueue() {
|
|
const extractIteration = (prev, curr) => {
|
|
prev.iteration.push(curr.value);
|
|
if (curr.attempts > 1) {
|
|
prev.queue.push(curr.value, curr.attempts - 1);
|
|
}
|
|
return prev;
|
|
};
|
|
const { queue, iteration } = this.queue.reduce(extractIteration, {
|
|
queue: new UniqueQueue(),
|
|
iteration: [],
|
|
});
|
|
this.queue = queue.queue;
|
|
return iteration;
|
|
}
|
|
}
|
|
|
|
class ModalW1 extends obsidian.Modal {
|
|
constructor(app) {
|
|
super(app);
|
|
this.messg = "";
|
|
this.callbackFunc = null;
|
|
}
|
|
onOpen() {
|
|
let { contentEl, titleEl } = this;
|
|
titleEl.setText(APP_TITLE);
|
|
contentEl.createDiv({
|
|
text: this.messg
|
|
});
|
|
contentEl.createEl("button", {
|
|
cls: ["mod-cta"],
|
|
text: "Cancel"
|
|
}).addEventListener("click", () => __awaiter(this, void 0, void 0, function* () {
|
|
this.close();
|
|
}));
|
|
contentEl.createEl("button", {
|
|
cls: ["mod-cta"],
|
|
text: "Confirm"
|
|
}).addEventListener("click", () => __awaiter(this, void 0, void 0, function* () {
|
|
this.close();
|
|
if (this.callbackFunc) {
|
|
this.callbackFunc();
|
|
}
|
|
}));
|
|
}
|
|
onClose() {
|
|
let { contentEl } = this;
|
|
contentEl.empty();
|
|
}
|
|
}
|
|
|
|
//import { count, log } from "console"
|
|
class LocalImagesPlugin extends obsidian.Plugin {
|
|
constructor() {
|
|
super(...arguments);
|
|
this.modifiedQueue = new UniqueQueue();
|
|
this.intervalId = 0;
|
|
this.newfCreated = [];
|
|
this.noteModified = [];
|
|
this.newfMoveReq = true;
|
|
this.newfCreatedByDownloader = [];
|
|
// using arrow syntax for callbacks to correctly pass this context
|
|
this.processActivePage = (defaultdir = false) => () => __awaiter(this, void 0, void 0, function* () {
|
|
logError();
|
|
try {
|
|
const activeFile = app.workspace.getActiveFile();
|
|
yield this.processPage(activeFile, defaultdir);
|
|
}
|
|
catch (e) {
|
|
showBalloon(`Please select a note or click inside selected note in canvas.`, this.settings.showNotifications);
|
|
return;
|
|
}
|
|
});
|
|
this.processAllPages = () => __awaiter(this, void 0, void 0, function* () {
|
|
const files = this.app.vault.getMarkdownFiles();
|
|
const includeRegex = new RegExp(this.settings.include, "i");
|
|
const pagesCount = files.length;
|
|
const notice = this.settings.showNotifications
|
|
? new obsidian.Notice(APP_TITLE + `\nStart processing. Total ${pagesCount} pages. `, TIMEOUT_LIKE_INFINITY)
|
|
: null;
|
|
for (const [index, file] of files.entries()) {
|
|
if (file.path.match(includeRegex)) {
|
|
if (notice) {
|
|
//setMessage() is undeclared but factically existing, so ignore the TS error //@ts-expect-error
|
|
notice.setMessage(APP_TITLE + `\nProcessing \n"${file.path}" \nPage ${index} of ${pagesCount}`);
|
|
}
|
|
yield this.processPage(file);
|
|
}
|
|
}
|
|
if (notice) {
|
|
// dum @ts-expect-error
|
|
notice.setMessage(APP_TITLE + `\n${pagesCount} pages were processed.`);
|
|
setTimeout(() => {
|
|
notice.hide();
|
|
}, NOTICE_TIMEOUT);
|
|
}
|
|
});
|
|
this.removeOrphans = (type = undefined, filesToRemove = undefined, noteFile = undefined) => () => __awaiter(this, void 0, void 0, function* () {
|
|
var _a, _b, _c, _d;
|
|
const obsmediadir = app.vault.getConfig("attachmentFolderPath");
|
|
const allFiles = this.app.vault.getFiles();
|
|
const includeRegex = new RegExp(this.settings.include, "i");
|
|
if (type == "plugin") {
|
|
let orphanedAttachments = [];
|
|
let allAttachmentsLinks = [];
|
|
if (this.settings.saveAttE != "nextToNoteS") {
|
|
showBalloon("This command requires the setting 'Next to note in the folder specified below' to be enabled!\nPlease, change settings first!\r\n", this.settings.showNotifications);
|
|
return;
|
|
}
|
|
logError(noteFile, true);
|
|
if (!noteFile) {
|
|
noteFile = this.app.workspace.getActiveFile();
|
|
if (!noteFile) {
|
|
showBalloon("Please, select a note or click inside a note in canvas!", this.settings.showNotifications);
|
|
return;
|
|
}
|
|
}
|
|
let oldRootdir = this.settings.mediaRootDir;
|
|
if (noteFile.path.match(includeRegex) &&
|
|
path__default["default"].basename(oldRootdir).includes("${notename}") &&
|
|
!oldRootdir.includes("${date}")) {
|
|
oldRootdir = oldRootdir.replace("${notename}", (_a = path__default["default"].parse(noteFile.path)) === null || _a === void 0 ? void 0 : _a.name);
|
|
oldRootdir = trimAny(pathJoin([(_b = path__default["default"].parse(noteFile.path)) === null || _b === void 0 ? void 0 : _b.dir, oldRootdir]), ["\/"]);
|
|
if (!(yield this.app.vault.exists(oldRootdir))) {
|
|
showBalloon("The attachment folder " + oldRootdir + " does not exist!", this.settings.showNotifications);
|
|
return;
|
|
}
|
|
const allAttachments = yield ((_c = this.app.vault.getAbstractFileByPath(oldRootdir)) === null || _c === void 0 ? void 0 : _c.children);
|
|
const metaCache = this.app.metadataCache.getFileCache(noteFile);
|
|
const embeds = metaCache === null || metaCache === void 0 ? void 0 : metaCache.embeds;
|
|
const links = metaCache === null || metaCache === void 0 ? void 0 : metaCache.links;
|
|
if (embeds) {
|
|
for (const embed of embeds) {
|
|
allAttachmentsLinks.push(path__default["default"].basename(embed.link));
|
|
}
|
|
}
|
|
if (links) {
|
|
for (const link of links) {
|
|
allAttachmentsLinks.push(path__default["default"].basename(link.link));
|
|
}
|
|
}
|
|
if (allAttachments) {
|
|
for (const attach of allAttachments) {
|
|
if (!allAttachmentsLinks.includes(attach.name)) {
|
|
logError("orph: " + attach.basename);
|
|
orphanedAttachments.push(attach);
|
|
}
|
|
}
|
|
}
|
|
if (orphanedAttachments.length > 0) {
|
|
const mod = new ModalW1(this.app);
|
|
mod.messg = "Confirm remove " + orphanedAttachments.length + " orphan(s) from '" + oldRootdir + "'\r\n\r\n ";
|
|
mod.plugin = this;
|
|
mod.callbackFunc = this.removeOrphans("execremove", orphanedAttachments);
|
|
mod.open();
|
|
}
|
|
else {
|
|
showBalloon("No orphaned files found!", this.settings.showNotifications);
|
|
}
|
|
}
|
|
}
|
|
if (type == "obsidian") {
|
|
if (obsmediadir.slice(0, 2) == "./" || obsmediadir == "/") {
|
|
showBalloon("This command cannot run on vault's root or on subfolder next to note!\nPlease, change settings first!\r\n", this.settings.showNotifications);
|
|
return;
|
|
}
|
|
const allAttachments = (_d = this.app.vault.getAbstractFileByPath(obsmediadir)) === null || _d === void 0 ? void 0 : _d.children;
|
|
let orphanedAttachments = [];
|
|
let allAttachmentsLinks = [];
|
|
if (allFiles) {
|
|
for (const file of allFiles) {
|
|
if (file.path.match(includeRegex)) {
|
|
const metaCache = this.app.metadataCache.getCache(file.path);
|
|
const embeds = metaCache === null || metaCache === void 0 ? void 0 : metaCache.embeds;
|
|
const links = metaCache === null || metaCache === void 0 ? void 0 : metaCache.links;
|
|
if (embeds) {
|
|
for (const embed of embeds) {
|
|
allAttachmentsLinks.push(path__default["default"].basename(embed.link));
|
|
}
|
|
}
|
|
if (links) {
|
|
for (const link of links) {
|
|
allAttachmentsLinks.push(path__default["default"].basename(link.link));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (const attach of allAttachments) {
|
|
if (!allAttachmentsLinks.includes(attach.name)) {
|
|
logError("orph: " + attach.basename);
|
|
orphanedAttachments.push(attach);
|
|
}
|
|
}
|
|
}
|
|
logError();
|
|
logError(orphanedAttachments, true);
|
|
if (orphanedAttachments.length > 0) {
|
|
const mod = new ModalW1(this.app);
|
|
mod.messg = "Confirm remove " + orphanedAttachments.length + " orphan(s) from '" + obsmediadir + " '\r\n \
|
|
NOTE: Be careful when running this command on Obsidian attachments folder, since some html-linked files may also be moved.\r\n ";
|
|
mod.plugin = this;
|
|
mod.callbackFunc = this.removeOrphans("execremove", orphanedAttachments);
|
|
mod.open();
|
|
}
|
|
else {
|
|
showBalloon("No orphaned files found!", this.settings.showNotifications);
|
|
}
|
|
}
|
|
if (type == "execremove") {
|
|
const useSysTrash = (this.app.vault.getConfig("trashOption") === "system");
|
|
const remcompl = this.settings.removeOrphansCompl;
|
|
let msg = "";
|
|
if (filesToRemove) {
|
|
filesToRemove.forEach((el) => {
|
|
if (remcompl) {
|
|
msg = "were deleted completely.";
|
|
this.app.vault.delete(el, true);
|
|
}
|
|
else {
|
|
if (useSysTrash) {
|
|
msg = "were moved to the system garbage can.";
|
|
}
|
|
else {
|
|
msg = "were moved to the Obsidian garbage can.";
|
|
}
|
|
this.app.vault.trash(el, useSysTrash);
|
|
}
|
|
});
|
|
}
|
|
showBalloon(filesToRemove.length + " file(s) " + msg, this.settings.showNotifications);
|
|
}
|
|
});
|
|
this.openProcessAllModal = () => {
|
|
const mod = new ModalW1(this.app);
|
|
mod.messg = "Confirm processing all pages.\r\n ";
|
|
mod.plugin = this;
|
|
mod.callbackFunc = this.processAllPages;
|
|
mod.open();
|
|
};
|
|
this.processMdFilesOnTimer = () => __awaiter(this, void 0, void 0, function* () {
|
|
logError();
|
|
logError(this.noteModified, true);
|
|
window.clearInterval(this.newfProcInt);
|
|
this.newfProcInt = 0;
|
|
this.newfMoveReq = false;
|
|
let itemcount = 0;
|
|
const useMdLinks = this.app.vault.getConfig("useMarkdownLinks");
|
|
for (let note of this.noteModified) {
|
|
const metaCache = this.app.metadataCache.getFileCache(note);
|
|
let filedata = yield this.app.vault.cachedRead(note);
|
|
const mdir = yield getMDir(this.app, note, this.settings);
|
|
const obsmdir = yield getMDir(this.app, note, this.settings, true);
|
|
let embeds = metaCache === null || metaCache === void 0 ? void 0 : metaCache.embeds;
|
|
if (embeds) {
|
|
yield this.ensureFolderExists(mdir);
|
|
for (let el of embeds) {
|
|
let oldpath = pathJoin([obsmdir, path__default["default"].basename(el.link)]);
|
|
let newpath = pathJoin([mdir, cFileName(path__default["default"].basename(el.link))]);
|
|
let newlink = yield getRDir(note, this.settings, newpath);
|
|
let oldtag = el["original"];
|
|
if (this.newfCreated.includes(oldpath) &&
|
|
!this.newfCreatedByDownloader.includes(oldtag)) {
|
|
let oldFileData;
|
|
let newFileData;
|
|
let oldfileA = this.app.vault.getAbstractFileByPath(oldpath);
|
|
if (this.settings.useMD5ForNewAtt && oldfileA !== null) {
|
|
oldFileData = md5Sig(yield this.app.vault.adapter.readBinary(oldfileA.path));
|
|
newpath = pathJoin([mdir, oldFileData + path__default["default"].extname(el.link)]);
|
|
newlink = yield getRDir(note, this.settings, newpath);
|
|
}
|
|
let newfileA = this.app.vault.getAbstractFileByPath(newpath);
|
|
if (yield this.app.vault.adapter.exists(newpath)) {
|
|
if (oldfileA !== null && newfileA !== null) {
|
|
newFileData = md5Sig(yield this.app.vault.adapter.readBinary(newfileA.path));
|
|
oldFileData = md5Sig(yield this.app.vault.adapter.readBinary(oldfileA.path));
|
|
if (newFileData === oldFileData) {
|
|
if (oldpath !== newpath) {
|
|
logError(path__default["default"].dirname(oldpath));
|
|
logError();
|
|
yield this.app.vault.delete(oldfileA);
|
|
}
|
|
}
|
|
else {
|
|
logError();
|
|
let inc = 1;
|
|
while (yield this.app.vault.adapter.exists(newpath)) {
|
|
newpath = pathJoin([mdir, `(${inc}) ` + cFileName(path__default["default"].basename(el.link))]);
|
|
inc++;
|
|
}
|
|
newlink = yield getRDir(note, this.settings, newpath);
|
|
yield this.app.vault.rename(oldfileA, newpath);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
logError();
|
|
if (oldfileA !== null) {
|
|
yield this.app.vault.rename(oldfileA, newpath);
|
|
}
|
|
}
|
|
let addName = "";
|
|
if (this.settings.addNameOfFile) {
|
|
if (useMdLinks) {
|
|
addName = `[Open: ${el.link}](${newlink[1]})\r\n`;
|
|
}
|
|
else {
|
|
addName = `[[${newlink[0]}|Open: ${el.link}]]\r\n`;
|
|
}
|
|
}
|
|
let newtag = addName + oldtag.replace(el.link, newlink[0]);
|
|
if (useMdLinks) {
|
|
newtag = addName + oldtag.replace(encObsURI(el.link), newlink[1]);
|
|
}
|
|
filedata = filedata.replaceAll(oldtag, newtag);
|
|
itemcount++;
|
|
}
|
|
}
|
|
}
|
|
if (itemcount > 0) {
|
|
yield this.app.vault.modify(note, filedata);
|
|
showBalloon(itemcount + " attachements for note " + note.path + " were processed.", this.settings.showNotifications);
|
|
itemcount = 0;
|
|
}
|
|
}
|
|
this.newfCreated = [];
|
|
this.newfCreatedByDownloader = [];
|
|
this.noteModified = [];
|
|
this.newfMoveReq = false;
|
|
window.clearInterval(this.newfProcInt);
|
|
this.newfProcInt = 0;
|
|
});
|
|
this.setTitleAsName = () => __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
const noteFile = app.workspace.activeEditor.file;
|
|
const fileData = yield this.app.vault.cachedRead(noteFile);
|
|
const title = fileData.match(/^#{1,6} .+?($|\n)/gm);
|
|
var ind = 0;
|
|
if (title !== null) {
|
|
const newName = cFileName(trimAny(title[0].toString(), ["#", " "])).slice(0, 200);
|
|
var fullPath = pathJoin([noteFile.parent.path, newName + ".md"]);
|
|
var fExist = yield this.app.vault.exists(fullPath);
|
|
if (trimAny(noteFile.path, ["\\", "/"]) != trimAny(fullPath, ["\\", "/"])) {
|
|
while (fExist) {
|
|
ind++;
|
|
var fullPath = pathJoin([noteFile.parent.path, newName + " (" + ind + ")" + ".md"]);
|
|
var fExist = yield this.app.vault.exists(fullPath);
|
|
}
|
|
yield this.app.vault.rename(noteFile, fullPath);
|
|
showBalloon(`The note was renamed to ` + fullPath, this.settings.showNotifications);
|
|
}
|
|
}
|
|
}
|
|
catch (e) {
|
|
showBalloon(`Cannot rename. Please select a note or click inside selected note in canvas.`, this.settings.showNotifications);
|
|
return;
|
|
}
|
|
});
|
|
this.convertSelToURI = () => __awaiter(this, void 0, void 0, function* () {
|
|
this.app.workspace.activeEditor.editor.replaceSelection(encObsURI(yield this.app.workspace.activeEditor.getSelection()));
|
|
});
|
|
this.processModifiedQueue = () => __awaiter(this, void 0, void 0, function* () {
|
|
const iteration = this.modifiedQueue.iterationQueue();
|
|
for (const page of iteration) {
|
|
this.processPage(page, false);
|
|
}
|
|
});
|
|
}
|
|
onload() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
yield this.loadSettings();
|
|
this.addCommand({
|
|
id: "download-images",
|
|
name: "Download all media files (Plugin folder)",
|
|
callback: this.processActivePage(false),
|
|
});
|
|
this.addCommand({
|
|
id: "download-images-def",
|
|
name: "Download all media files (Obsidian folder)",
|
|
callback: this.processActivePage(true),
|
|
});
|
|
if (!this.settings.disAddCom) {
|
|
this.addRibbonIcon("dice", APP_TITLE + "\r\nDownload media files", () => {
|
|
this.processActivePage(false)();
|
|
});
|
|
this.addCommand({
|
|
id: "set-title-as-name",
|
|
name: "Set first # header as a note name.",
|
|
callback: this.setTitleAsName,
|
|
});
|
|
this.addCommand({
|
|
id: "download-images-all",
|
|
name: "Download media files for all your notes",
|
|
callback: this.openProcessAllModal,
|
|
});
|
|
this.addCommand({
|
|
id: "convert-selection-to-URI",
|
|
name: "Convert selection to URI",
|
|
callback: this.convertSelToURI,
|
|
});
|
|
this.addCommand({
|
|
id: "remove-orphans-from-obsidian-folder",
|
|
name: "Remove all orphaned attachments (Obsidian folder)",
|
|
callback: () => { this.removeOrphans("obsidian")(); },
|
|
});
|
|
this.addCommand({
|
|
id: "remove-orphans-from-plugin-folder",
|
|
name: "Remove all orphaned attachments (Plugin folder)",
|
|
callback: () => { this.removeOrphans("plugin")(); },
|
|
});
|
|
}
|
|
// Some file has been created
|
|
this.app.vault.on('create', (file) => __awaiter(this, void 0, void 0, function* () {
|
|
logError();
|
|
logError(file.path);
|
|
this.onMdCreateFunc(file);
|
|
this.onFCreateFunc(file);
|
|
}));
|
|
// Some file has been deleted
|
|
this.app.vault.on('delete', (file) => __awaiter(this, void 0, void 0, function* () {
|
|
const includeRegex = new RegExp(this.settings.include, "i");
|
|
if (!file ||
|
|
!(file instanceof obsidian.TFile) ||
|
|
!(file.path.match(includeRegex)) ||
|
|
!this.settings.removeMediaFolder ||
|
|
this.settings.saveAttE != "nextToNoteS") {
|
|
return;
|
|
}
|
|
let rootdir = this.settings.mediaRootDir;
|
|
const useSysTrash = (this.app.vault.getConfig("trashOption") === "system");
|
|
logError();
|
|
if (this.settings.saveAttE !== "obsFolder" &&
|
|
path__default["default"].basename(rootdir).includes("${notename}") &&
|
|
!rootdir.includes("${date}")) {
|
|
rootdir = rootdir.replace("${notename}", file.basename);
|
|
if (this.settings.saveAttE == "nextToNoteS") {
|
|
rootdir = pathJoin([path__default["default"].dirname((file === null || file === void 0 ? void 0 : file.path) || ""), rootdir]);
|
|
}
|
|
try {
|
|
if (this.app.vault.getAbstractFileByPath(rootdir) instanceof obsidian.TFolder) {
|
|
this.app.vault.trash(app.vault.getAbstractFileByPath(rootdir), useSysTrash);
|
|
showBalloon("Attachment folder " + rootdir + " was moved to trash can.", this.settings.showNotifications);
|
|
}
|
|
}
|
|
catch (e) {
|
|
logError();
|
|
return;
|
|
}
|
|
}
|
|
}));
|
|
this.app.vault.on('rename', (file, oldPath) => __awaiter(this, void 0, void 0, function* () {
|
|
var _a, _b, _c;
|
|
const includeRegex = new RegExp(this.settings.include, "i");
|
|
if (!file ||
|
|
!(file instanceof obsidian.TFile) ||
|
|
!(file.path.match(includeRegex)) ||
|
|
!this.settings.removeMediaFolder ||
|
|
this.settings.saveAttE != "nextToNoteS" ||
|
|
this.settings.pathInTags != "onlyRelative") {
|
|
return;
|
|
}
|
|
let oldRootdir = this.settings.mediaRootDir;
|
|
if (path__default["default"].basename(oldRootdir).includes("${notename}") &&
|
|
!oldRootdir.includes("${date}")) {
|
|
oldRootdir = oldRootdir.replace("${notename}", (_a = path__default["default"].parse(oldPath)) === null || _a === void 0 ? void 0 : _a.name);
|
|
let newRootDir = oldRootdir.replace((_b = path__default["default"].parse(oldPath)) === null || _b === void 0 ? void 0 : _b.name, (_c = path__default["default"].parse(file.path)) === null || _c === void 0 ? void 0 : _c.name);
|
|
let newRootDir_ = newRootDir;
|
|
let oldRootdir_ = oldRootdir;
|
|
oldRootdir_ = pathJoin([(path__default["default"].dirname(oldPath) || ""), oldRootdir]);
|
|
newRootDir_ = pathJoin([(path__default["default"].dirname(file.path) || ""), newRootDir]);
|
|
try {
|
|
if (this.app.vault.getAbstractFileByPath(oldRootdir_) instanceof obsidian.TFolder) {
|
|
yield this.ensureFolderExists(path__default["default"].dirname(newRootDir_));
|
|
//await this.app.fileManager.renameFile(app.vault.getAbstractFileByPath(oldRootdir),newRootDir)
|
|
yield this.app.vault.adapter.rename(oldRootdir_, newRootDir_);
|
|
showBalloon("Attachment folder was renamed to " + newRootDir_, this.settings.showNotifications);
|
|
}
|
|
}
|
|
catch (e) {
|
|
showBalloon("Cannot move attachment folder: \r\n" + e, this.settings.showNotifications);
|
|
logError();
|
|
return;
|
|
}
|
|
let content = yield this.app.vault.cachedRead(file);
|
|
content = content
|
|
.replaceAll("](" + encodeURI(oldRootdir), "](" + encodeURI(newRootDir))
|
|
.replaceAll("[" + oldRootdir, "[" + newRootDir);
|
|
this.app.vault.modify(file, content);
|
|
}
|
|
}));
|
|
// Some file has been modified
|
|
this.app.vault.on('modify', (file) => __awaiter(this, void 0, void 0, function* () {
|
|
if (!this.newfMoveReq)
|
|
return;
|
|
logError();
|
|
logError(file.path + "\r\n", false);
|
|
const includeRegex = new RegExp(this.settings.include, "i");
|
|
if (!file ||
|
|
!(file instanceof obsidian.TFile) ||
|
|
!(file.path.match(includeRegex))) {
|
|
return;
|
|
}
|
|
else {
|
|
if (this.settings.processAll) {
|
|
if (!this.noteModified.includes(file)) {
|
|
this.noteModified.push(file);
|
|
}
|
|
this.setupNewMdFilesProcInterval();
|
|
}
|
|
}
|
|
}));
|
|
this.app.workspace.on("editor-paste", (evt, editor, info) => {
|
|
this.onPasteFunc(evt, editor, info);
|
|
});
|
|
this.setupQueueInterval();
|
|
this.addSettingTab(new SettingTab(this.app, this));
|
|
});
|
|
}
|
|
setupQueueInterval() {
|
|
if (this.intervalId) {
|
|
const intervalId = this.intervalId;
|
|
this.intervalId = 0;
|
|
window.clearInterval(intervalId);
|
|
}
|
|
if (this.settings.realTimeUpdate &&
|
|
this.settings.realTimeUpdateInterval > 0) {
|
|
this.intervalId = window.setInterval(this.processModifiedQueue, this.settings.realTimeUpdateInterval * 1000);
|
|
this.registerInterval(this.intervalId);
|
|
}
|
|
}
|
|
processPage(file, defaultdir = false) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (file == null) {
|
|
showBalloon(`Empty note!`, this.settings.showNotifications);
|
|
return null;
|
|
}
|
|
const content = yield this.app.vault.cachedRead(file);
|
|
const fixedContent = yield replaceAsync(content, MD_SEARCH_PATTERN, imageTagProcessor(this, file, this.settings, defaultdir));
|
|
if (content != fixedContent[0] && fixedContent[1] === false) {
|
|
this.modifiedQueue.remove(file);
|
|
yield this.app.vault.modify(file, fixedContent[0]);
|
|
fixedContent[2].forEach((element) => {
|
|
this.newfCreatedByDownloader.push(element);
|
|
});
|
|
showBalloon(`Attachements for "${file.path}" were processed.`, this.settings.showNotifications);
|
|
}
|
|
else if (content != fixedContent[0] && fixedContent[1] === true) {
|
|
this.modifiedQueue.remove(file);
|
|
yield this.app.vault.modify(file, fixedContent[0]);
|
|
fixedContent[2].forEach((element) => {
|
|
this.newfCreatedByDownloader.push(element);
|
|
});
|
|
showBalloon(`WARNING!\r\nAttachements for "${file.path}" were processed, but some attachements were not downloaded/replaced...`, this.settings.showNotifications);
|
|
}
|
|
else {
|
|
if (this.settings.showNotifications) {
|
|
showBalloon(`Page "${file.path}" has been processed, but nothing was changed.`, this.settings.showNotifications);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
onPasteFunc(evt = undefined, editor = undefined, info = undefined) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (evt === undefined) {
|
|
return;
|
|
}
|
|
if (!this.settings.realTimeUpdate) {
|
|
return;
|
|
}
|
|
try {
|
|
const activeFile = app.workspace.activeEditor.file;
|
|
const fItems = evt.clipboardData.files;
|
|
const tItems = evt.clipboardData.items;
|
|
for (const key in tItems) {
|
|
// Check if it was a text/html
|
|
if (tItems[key].kind == "string") {
|
|
if (this.settings.realTimeUpdate) {
|
|
const cont = obsidian.htmlToMarkdown(evt.clipboardData.getData("text/html")) +
|
|
obsidian.htmlToMarkdown(evt.clipboardData.getData("text"));
|
|
for (const reg_p of MD_SEARCH_PATTERN) {
|
|
if (reg_p.test(cont)) {
|
|
showBalloon("Media links were found, processing...", this.settings.showNotifications);
|
|
this.enqueueActivePage(activeFile);
|
|
this.setupQueueInterval();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
catch (e) {
|
|
showBalloon(`Please select a note or click inside selected note in canvas.`, this.settings.showNotifications);
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
onMdCreateFunc(file) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const includeRegex = new RegExp(this.settings.include, "i");
|
|
if (!file ||
|
|
!(file instanceof obsidian.TFile) ||
|
|
!(this.settings.processCreated) ||
|
|
!(file.path.match(includeRegex)))
|
|
return;
|
|
const timeGapMs = Math.abs(Date.now() - file.stat.ctime);
|
|
if (timeGapMs > 1000)
|
|
return;
|
|
logError();
|
|
logError(file.path, false);
|
|
const cont = yield this.app.vault.cachedRead(file);
|
|
for (const reg_p of MD_SEARCH_PATTERN) {
|
|
if (reg_p.test(cont)) {
|
|
// this.processPage(file)
|
|
this.enqueueActivePage(file);
|
|
this.setupQueueInterval();
|
|
this.setupNewMdFilesProcInterval();
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
onFCreateFunc(file) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const includeRegex = new RegExp(this.settings.include, "i");
|
|
if (!file ||
|
|
!(file instanceof obsidian.TFile) ||
|
|
file.path.match(includeRegex) ||
|
|
!(this.settings.processAll))
|
|
return;
|
|
if (!file.stat.ctime)
|
|
return;
|
|
const timeGapMs = Math.abs(Date.now() - file.stat.ctime);
|
|
if (timeGapMs > 1000)
|
|
return;
|
|
this.newfCreated.push(file.path);
|
|
this.newfMoveReq = true;
|
|
this.setupNewMdFilesProcInterval();
|
|
});
|
|
}
|
|
setupNewMdFilesProcInterval() {
|
|
logError();
|
|
window.clearInterval(this.newfProcInt);
|
|
this.newfProcInt = 0;
|
|
this.newfProcInt = window.setInterval(this.processMdFilesOnTimer, this.settings.realTimeUpdateInterval * 1000);
|
|
this.registerInterval(this.newfProcInt);
|
|
}
|
|
enqueueActivePage(activeFile) {
|
|
this.modifiedQueue.push(activeFile, 1 //this.settings.realTim3AttemptsToProcess
|
|
);
|
|
}
|
|
// ------------ Load / Save settings -----------------
|
|
onunload() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
this.app.workspace.off("editor-drop", null);
|
|
this.app.workspace.off("editor-paste", null);
|
|
this.app.workspace.off('file-menu', null);
|
|
// this.app.vault.off("create", null)
|
|
logError();
|
|
});
|
|
}
|
|
loadSettings() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
|
this.setupQueueInterval();
|
|
});
|
|
}
|
|
saveSettings() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
yield this.saveData(this.settings);
|
|
}
|
|
catch (error) {
|
|
displayError(error);
|
|
}
|
|
});
|
|
}
|
|
ensureFolderExists(folderPath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
yield this.app.vault.createFolder(folderPath);
|
|
return;
|
|
}
|
|
catch (e) {
|
|
logError();
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
// ------------------ Settings tab ----------------------
|
|
class SettingTab extends obsidian.PluginSettingTab {
|
|
constructor(app, plugin) {
|
|
super(app, plugin);
|
|
this.plugin = plugin;
|
|
}
|
|
displSw(cont) {
|
|
cont.findAll(".setting-item").forEach((el) => {
|
|
if (el.getAttr("class").includes("media_folder_set")) {
|
|
if (this.plugin.settings.saveAttE === "obsFolder" ||
|
|
this.plugin.settings.saveAttE === "nextToNote") {
|
|
el.hide();
|
|
}
|
|
else {
|
|
el.show();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
display() {
|
|
let { containerEl } = this;
|
|
containerEl.empty();
|
|
containerEl.createEl("h1", { text: APP_TITLE });
|
|
const donheader = containerEl.createEl("div");
|
|
donheader.createEl("a", { text: "Support the project! ", href: "https://www.buymeacoffee.com/sergeikorneev", cls: "donheader_txt" });
|
|
containerEl.createEl("h3", { text: "Interface settings" });
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Show notifications")
|
|
.setDesc("Show notifications when pages were processed.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.showNotifications)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.showNotifications = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Disable additional commands")
|
|
.setDesc("Do not show additional commands in command palette. Reload the plugin in settings to take effect (turn off/on).")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.disAddCom)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.disAddCom = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
containerEl.createEl("h3", { text: "Processing settings" });
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Automatic processing")
|
|
.setDesc("Process notes on create/copy/paste.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.realTimeUpdate)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.realTimeUpdate = value;
|
|
yield this.plugin.saveSettings();
|
|
this.plugin.setupQueueInterval();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Automatic processing interval")
|
|
.setDesc("Interval in seconds for processing update. It takes some time to reveal changed content of a note to plugins.")
|
|
.addText((text) => text
|
|
.setValue(String(this.plugin.settings.realTimeUpdateInterval))
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
let numberValue = Number(value);
|
|
if (isNaN(numberValue) ||
|
|
!Number.isInteger(numberValue) ||
|
|
numberValue <= 5 ||
|
|
numberValue > 3600) {
|
|
displayError("The value should be a positive integer number between 5 and 3600!");
|
|
return;
|
|
}
|
|
if (numberValue < 5) {
|
|
numberValue = 5;
|
|
}
|
|
this.plugin.settings.realTimeUpdateInterval = numberValue;
|
|
yield this.plugin.saveSettings();
|
|
this.plugin.setupQueueInterval();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Number of retries for every single attachment")
|
|
.setDesc("If an error occurs during downloading (network etc.) try to re-download several times.")
|
|
.addText((text) => text
|
|
.setValue(String(this.plugin.settings.tryCount))
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
let numberValue = Number(value);
|
|
if (isNaN(numberValue) ||
|
|
!Number.isInteger(numberValue) ||
|
|
numberValue < 1 ||
|
|
numberValue > 6) {
|
|
displayError("The value should be a positive integer number between 1 and 6!");
|
|
return;
|
|
}
|
|
this.plugin.settings.tryCount = numberValue;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Process all new markdown files")
|
|
.setDesc("Process all new created/cloud-synced files with corresponding extensions.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.processCreated)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.processCreated = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Process all new attachements")
|
|
.setDesc("The plugin will also move all attachements from obsidian default folder to plugin folder.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.processAll)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.processAll = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Use MD5 for new attachements")
|
|
.setDesc("The plugin will use MD5 when renaming all new attachements.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.useMD5ForNewAtt)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.useMD5ForNewAtt = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Download unknown filetypes")
|
|
.setDesc("Download unknown filetypes and save them with .unknown extension.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.downUnknown)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.downUnknown = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("File size lower limit in Kb")
|
|
.setDesc("Do not download files with size less than this value. Set 0 for no limit.")
|
|
.addText((text) => text
|
|
.setValue(String(this.plugin.settings.filesizeLimit))
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
let numberValue = Number(value);
|
|
if (isNaN(numberValue) ||
|
|
!Number.isInteger(numberValue) ||
|
|
numberValue < 0) {
|
|
displayError("The value should be a positive integer!");
|
|
return;
|
|
}
|
|
if (numberValue < 0) {
|
|
numberValue = 0;
|
|
}
|
|
this.plugin.settings.filesizeLimit = numberValue;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Exclusions")
|
|
.setDesc("The plugin will not download attachements with these extensions.")
|
|
.addText((text) => text
|
|
.setValue(this.plugin.settings.ignoredExt)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.ignoredExt = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
containerEl.createEl("h3", { text: "Note settings" });
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Preserve link captions")
|
|
.setDesc("Add media links captions to converted tags.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.useCaptions)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.useCaptions = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Add original filename or 'Open file' tag")
|
|
.setDesc("Add [[original filename]] or [original filename](link to attachement) after replaced tag (only for file:// protocol or dropped/pasted files ).")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.addNameOfFile)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.addNameOfFile = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Include")
|
|
.setDesc("Include only files matching this regex pattern when running on all notes.")
|
|
.addText((text) => text.setValue(this.plugin.settings.include).onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
if (!safeRegex$1(value)) {
|
|
displayError("Unsafe regex! https://www.npmjs.com/package/safe-regex");
|
|
return;
|
|
}
|
|
this.plugin.settings.include = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
containerEl.createEl("h3", { text: "Orphaned attachments" });
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Remove files completely")
|
|
.setDesc("Do not move orphaned files into the garbage can.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.removeOrphansCompl)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.removeOrphansCompl = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
containerEl.createEl("h3", { text: "Media folder settings" });
|
|
new obsidian.Setting(containerEl)
|
|
.setName("How to write paths in tags")
|
|
.setDesc("Select whether to write full paths in tags or not.")
|
|
.addDropdown((text) => text
|
|
.addOption("fullDirPath", "Full path")
|
|
.addOption("onlyRelative", "Relative to note")
|
|
.addOption("baseFileName", "Only filename")
|
|
.setValue(this.plugin.settings.pathInTags)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.pathInTags = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Folder to save new attachements")
|
|
.setDesc("Select where all new attachements will be saved.\nYou can use templates e.g. _resouces/${date}/${notename}")
|
|
.addDropdown((text) => text
|
|
.addOption("obsFolder", "Copy Obsidian settings")
|
|
.addOption("inFolderBelow", "In the root folder specified below")
|
|
.addOption("nextToNoteS", "Next to note in the folder specified below")
|
|
.setValue(this.plugin.settings.saveAttE)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.saveAttE = value;
|
|
this.displSw(containerEl);
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Move/delete/rename media folder")
|
|
.setDesc("Rename or move this folder to the obsidian or system garbage can when the associated note is deleted/renamed/moved. \
|
|
This setting takes effect only if the path contains ${notename} template at the end\
|
|
and the options 'Next to note in the folder specified below' / 'Relative to note' are selected.\
|
|
Use this setting at your own risk.")
|
|
.setClass("media_folder_set")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.removeMediaFolder)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.removeMediaFolder = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Media folder")
|
|
.setDesc("Folder to keep all downloaded media files.")
|
|
.setClass("media_folder_set")
|
|
.addText((text) => text
|
|
.setValue(this.plugin.settings.mediaRootDir)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
if (value.match(/(\)|\(|\"|\'|\#|\]|\[|\:|\>|\<|\*|\|)/g) !== null) {
|
|
displayError("Unsafe folder name! Some chars are forbidden in some filesystems.");
|
|
return;
|
|
}
|
|
this.plugin.settings.mediaRootDir = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
this.displSw(containerEl);
|
|
}
|
|
}
|
|
|
|
module.exports = LocalImagesPlugin;
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIi4uL25vZGVfbW9kdWxlcy9zYWZlLXJlZ2V4L2xpYi9hbmFseXplci5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2NvbXBhdC10cmFuc3BpbGVyL3RyYW5zZm9ybXMvY29tcGF0LWRvdGFsbC1zLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2NvbXBhdC10cmFuc3BpbGVyL3RyYW5zZm9ybXMvY29tcGF0LW5hbWVkLWNhcHR1cmluZy1ncm91cHMtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvY29tcGF0LXRyYW5zcGlsZXIvdHJhbnNmb3Jtcy9jb21wYXQteC1mbGFnLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2NvbXBhdC10cmFuc3BpbGVyL3RyYW5zZm9ybXMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9nZW5lcmF0b3IvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9wYXJzZXIvdW5pY29kZS9wYXJzZXItdW5pY29kZS1wcm9wZXJ0aWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvcGFyc2VyL2dlbmVyYXRlZC9yZWdleHAtdHJlZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L3BhcnNlci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L3RyYXZlcnNlL25vZGUtcGF0aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L3RyYXZlcnNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvdHJhbnNmb3JtL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvY29tcGF0LXRyYW5zcGlsZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC91dGlscy9jbG9uZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItc3Vycm9nYXRlLXBhaXItdG8tc2luZ2xlLXVuaWNvZGUtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvY2hhci1jb2RlLXRvLXNpbXBsZS1jaGFyLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItY2FzZS1pbnNlbnNpdGl2ZS1sb3dlcmNhc2UtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvY2hhci1jbGFzcy1yZW1vdmUtZHVwbGljYXRlcy10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC90cmFuc2Zvcm0vdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9xdWFudGlmaWVycy1tZXJnZS10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9xdWFudGlmaWVyLXJhbmdlLXRvLXN5bWJvbC10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9jaGFyLWNsYXNzLWNsYXNzcmFuZ2VzLXRvLWNoYXJzLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItY2xhc3MtdG8tbWV0YS10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9jaGFyLWNsYXNzLXRvLXNpbmdsZS1jaGFyLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItZXNjYXBlLXVuZXNjYXBlLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItY2xhc3MtY2xhc3NyYW5nZXMtbWVyZ2UtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvZGlzanVuY3Rpb24tcmVtb3ZlLWR1cGxpY2F0ZXMtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvZ3JvdXAtc2luZ2xlLWNoYXJzLXRvLWNoYXItY2xhc3MuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9yZW1vdmUtZW1wdHktZ3JvdXAtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvdW5ncm91cC10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9jb21iaW5lLXJlcGVhdGluZy1wYXR0ZXJucy10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vc3BlY2lhbC1zeW1ib2xzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvaW50ZXJwcmV0ZXIvZmluaXRlLWF1dG9tYXRvbi9uZmEvbmZhLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvaW50ZXJwcmV0ZXIvZmluaXRlLWF1dG9tYXRvbi9kZmEvZGZhLW1pbmltaXplci5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vZGZhL2RmYS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vc3RhdGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9pbnRlcnByZXRlci9maW5pdGUtYXV0b21hdG9uL25mYS9uZmEtc3RhdGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9pbnRlcnByZXRlci9maW5pdGUtYXV0b21hdG9uL25mYS9idWlsZGVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vbmZhL25mYS1mcm9tLXJlZ2V4cC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9jb21wYXQtdHJhbnNwaWxlci9ydW50aW1lL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvcmVnZXhwLXRyZWUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc2FmZS1yZWdleC9saWIvaGV1cmlzdGljLWFuYWx5emVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NhZmUtcmVnZXgvbGliL2FuYWx5emVyLWZhbWlseS5qcyIsIi4uL25vZGVfbW9kdWxlcy9zYWZlLXJlZ2V4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cnRvazMvbGliL0ZzUHJvbWlzZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wZWVrLXJlYWRhYmxlL2xpYi9FbmRPZkZpbGVTdHJlYW0uanMiLCIuLi9ub2RlX21vZHVsZXMvcGVlay1yZWFkYWJsZS9saWIvRGVmZXJyZWQuanMiLCIuLi9ub2RlX21vZHVsZXMvcGVlay1yZWFkYWJsZS9saWIvU3RyZWFtUmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3BlZWstcmVhZGFibGUvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cnRvazMvbGliL0Fic3RyYWN0VG9rZW5pemVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cnRvazMvbGliL1JlYWRTdHJlYW1Ub2tlbml6ZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvc3RydG9rMy9saWIvQnVmZmVyVG9rZW5pemVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cnRvazMvbGliL2NvcmUuanMiLCIuLi9ub2RlX21vZHVsZXMvc3RydG9rMy9saWIvRmlsZVRva2VuaXplci5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHJ0b2szL2xpYi9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Rva2VuLXR5cGVzL2xpYi9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9maWxlLXR5cGUvdXRpbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9maWxlLXR5cGUvc3VwcG9ydGVkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtdHlwZS9jb3JlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtdHlwZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy92YWxpZGF0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvT3B0aW9uc0J1aWxkZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIveG1sTm9kZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9Eb2NUeXBlUmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cm51bS9zdHJudW0uanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvT3JkZXJlZE9ialBhcnNlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvWE1MUGFyc2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9vcmRlcmVkSnMyWG1sLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL2Z4cC5qcyIsIi4uL25vZGVfbW9kdWxlcy9pcy1zdmcvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZXNjYXBlLXN0cmluZy1yZWdleHAvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvdHJpbS1yZXBlYXRlZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9maWxlbmFtZS1yZXNlcnZlZC1yZWdleC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHJpcC1vdXRlci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9maWxlbmFtaWZ5L2ZpbGVuYW1pZnkuanMiLCIuLi9zcmMvY29uZmlnLnRzIiwiLi4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tZDUuanMiLCIuLi9zcmMvdXRpbHMudHMiLCIuLi9ub2RlX21vZHVsZXMvYXN5bmMtbG9jay9saWIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYXN5bmMtbG9jay9pbmRleC5qcyIsIi4uL3NyYy9jb250ZW50UHJvY2Vzc29yLnRzIiwiLi4vc3JjL3VuaXF1ZVF1ZXVlLnRzIiwiLi4vc3JjL21vZGFsLnRzIiwiLi4vc3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbImFuYWx5emVyIiwidHJhbnNmb3JtcyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsImdlbiIsImdlbmVyYXRvciIsIl9zbGljZWRUb0FycmF5IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwicmVnZXhwVHJlZSIsInBhcnNlciIsIl9jcmVhdGVDbGFzcyIsIl9jbGFzc0NhbGxDaGVjayIsIk5vZGVQYXRoIiwidHJhdmVyc2UiLCJ0cmFuc2Zvcm0iLCJfdHJhbnNmb3JtIiwiY29tcGF0VHJhbnNwaWxlciIsImNsb25lIiwiVVBQRVJfQV9DUCIsIlVQUEVSX1pfQ1AiLCJkaXNqdW5jdGlvblRvTGlzdCIsImxpc3RUb0Rpc2p1bmN0aW9uIiwiaW5jcmVhc2VRdWFudGlmaWVyQnlPbmUiLCJfcmVxdWlyZSIsImhhc0FwcHJvcHJpYXRlU2libGluZ3MiLCJpc01ldGEiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsInJlcXVpcmUkJDE1Iiwib3B0aW1pemVyIiwiRVBTSUxPTiIsIkVQU0lMT05fQ0xPU1VSRSIsIk5GQSIsIkRGQSIsIlN0YXRlIiwiTkZBU3RhdGUiLCJjaGFyIiwiYWx0Iiwib3IiLCJyZXAiLCJwbHVzUmVwIiwicXVlc3Rpb25SZXAiLCJidWlsZGVycyIsIlJlZ0V4cFRyZWUiLCJoZXVyaXN0aWNBbmFseXplciIsImFuYWx5emVyRmFtaWx5IiwiZnMiLCJEZWZlcnJlZF8xIiwiQWJzdHJhY3RUb2tlbml6ZXJfMSIsInBlZWtfcmVhZGFibGVfMSIsIlJlYWRTdHJlYW1Ub2tlbml6ZXJfMSIsIkJ1ZmZlclRva2VuaXplcl8xIiwiRmlsZVRva2VuaXplcl8xIiwiZnJvbUZpbGUiLCJpZWVlNzU0IiwidXRpbCIsInN1cHBvcnRlZCIsInN0cnRvazMiLCJmaWxlVHlwZSIsImNvcmUiLCJkZWZhdWx0T3B0aW9ucyIsInZhbGlkYXRvciIsImJ1aWxkT3B0aW9ucyIsInhtbE5vZGUiLCJyZWFkRG9jVHlwZSIsInRvTnVtYmVyIiwiT3JkZXJlZE9ialBhcnNlciIsInJlcGxhY2VFbnRpdGllc1ZhbHVlIiwicHJldHRpZnkiLCJwcm9wTmFtZSIsIlhNTFBhcnNlciIsImlzU3ZnTW9kdWxlIiwiZXNjYXBlU3RyaW5nUmVnZXhwIiwiZmlsZW5hbWVSZXNlcnZlZFJlZ2V4TW9kdWxlIiwidHJpbVJlcGVhdGVkIiwic3RyaXBPdXRlciIsInRoaXMiLCJ1bmRlZmluZWQiLCJnbG9iYWwiLCJyZXF1aXJlIiwiTm90aWNlIiwicmVxdWVzdFVybCIsInBhdGgiLCJmcm9tQnVmZmVyIiwiaXNTdmciLCJBc3luY0xvY2siLCJVUkwiLCJNb2RhbCIsIlBsdWdpbiIsIlRGaWxlIiwiVEZvbGRlciIsImh0bWxUb01hcmtkb3duIiwiUGx1Z2luU2V0dGluZ1RhYiIsIlNldHRpbmciLCJzYWZlUmVnZXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW9HQTtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDbkcsUUFBUSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDdEcsUUFBUSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDdEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENB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Q0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3hwQjtBQUNBLFNBQVNDLG9CQUFrQixDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuTTtBQUNBLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBTXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUMzQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO0FBQ3BDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDdEIsSUFBSSxPQUFPLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7QUFDbEMsSUFBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDNUIsSUFBSSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7QUFDOUIsSUFBSSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87QUFDeEIsSUFBSSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7QUFDbEMsSUFBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDNUIsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0EsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNoRCxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUNqRSxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLFFBQVE7QUFDbEIsSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNaLElBQUksS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDekIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNoQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVk7QUFDdkIsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNoQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQzNDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNoQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNoQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDdEQsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xCO0FBQ0EsRUFBRSxJQUFJLEtBQUssRUFBRTtBQUNiLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQztBQUMvQyxHQUNBO0FBQ0EsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ1osSUFBSSxJQUFJLEVBQUUsYUFBYTtBQUN2QixJQUFJLElBQUksRUFBRSxFQUFFO0FBQ1osSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVB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QUFDUCxJQUFJLElBQUksRUFBRSxZQUFZO0FBQ3RCLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsR0FBRyxDQUFDO0FBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDdEQsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixFQUFFLEVBQUUsR0FBRztBQUNQLElBQUksSUFBSSxFQUFFLFlBQVk7QUFDdEIsSUFBSSxRQUFRLEVBQUUsSUFBSTtBQUNsQixJQUFJLFNBQVMsRUFBRSxFQUFFO0FBQ2pCLEdBQUcsQ0FBQztBQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEYsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUN4RixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUMxQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQzVDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNwQixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDVixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ1osSUFBSSxJQUFJLEVBQUUsWUFBWTtBQUN0QixJQUFJLElBQUksRUFBRSxFQUFFO0FBQ1osSUFBSSxNQUFNLEVBQUUsSUFBSTtBQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDWixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ1osSUFBSSxJQUFJLEVBQUUsWUFBWTtBQUN0QixJQUFJLElBQUksRUFBRSxFQUFFO0FBQ1osSUFBSSxNQUFNLEVBQUUsSUFBSTtBQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDWixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ1osSUFBSSxJQUFJLEVBQUUsWUFBWTtBQUN0QixJQUFJLElBQUksRUFBRSxFQUFFO0FBQ1osSUFBSSxNQUFNLEVBQUUsSUFBSTtBQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDWixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsRUFB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Q3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUM1QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ2xFLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDYixJQUFJLElBQUksRUFBRSxZQUFZO0FBQ3RCLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDWixJQUFJLEVBQUUsRUFBRSxFQUFFO0FBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsR0FBRztBQUNILENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE1BQU0sR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDM3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFB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RSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcmhDO0FBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNYLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxDQUFDLENBQUM7QUFDRjtBQUNBLFNBQVMsR0FBRztBQUNaLEVBQUUsVUFBVSxFQUFFLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRTtBQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUM3QjtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFNBQVMsRUFBRSxTQUFTLFNBQVMsR0FBRztBQUNsQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixHQUFHO0FBQ0gsRUFBRSxlQUFlLEVBQUUsU0FBUyxlQUFlLEdBQUc7QUFDOUMsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsR0FBRztBQUNILEVBQUUsU0FBUyxFQUFFLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUN2QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSCxFQUFFLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDL0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLEdBQUc7QUFDSCxFQUFFLFFBQVEsRUFBRSxTQUFTLFFBQVEsR0FBRztBQUNoQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0gsRUFBRSxZQUFZLEVBQUUsU0FBUyxZQUFZLEdBQUc7QUFDeEM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RDLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO0FBQy9CLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELElBQUksSUFBSSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUN4RTtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0RCxNQUFNLElBQUksWUFBWSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsTUFBTSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO0FBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQzVCLFFBQVEsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUN6QixRQUFpQixNQUFNLENBQUMsTUFBTSxDQUFDO0FBQy9CLFFBQVEsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNwQixVQUFVLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLFVBQVUsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxVQUFVLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBVSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3hDLFlBQVksSUFBSSxZQUFZLENBQUM7QUFDN0I7QUFDQSxZQUFZLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUVBLG9CQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDOUcsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDdEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDckIsTUFBTSxPQUFPLFNBQVMsQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDakYsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQzVFLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLFVBQVUsRUFBRTtBQUNwQixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLFVBQVUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUMxRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsUUFBUSxHQUFHLHFCQUFxQixHQUFHLE1BQU0sR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEgsR0FBRztBQUNILEVBQUUsU0FBUyxFQUFFLFNBQVMsU0FBUyxHQUFHO0FBQ2xDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLEdBQUc7QUFDSCxFQUFFLGNBQWMsRUFBRSxTQUFTLGNBQWMsR0FBRztBQUM1QyxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztBQUM3QixHQUFHO0FBQ0gsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLGdCQUFnQixHQUFHO0FBQ2hELElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQy9CLEdBQUc7QUFDSCxFQUFFLGdCQUFnQixFQUFFLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO0FBQ3ZELElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3JCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzFDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDO0FBQ25GO0FBQ0E7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLElBQUksT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRTtBQUNwRCxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUMxQixNQUFNLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDaEYsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN6RDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7QUFDckcsR0FBRztBQUNILEVBQUUsUUFBUSxFQUFFLFNBQVMsUUFBUSxDQUFDLFNBQVMsRUFBRTtBQUN6QyxJQUFJLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RjtBQUNBLElBQUksT0FBTztBQUNYO0FBQ0EsTUFBTSxJQUFJLEVBQUUsU0FBUztBQUNyQixNQUFNLEtBQUssRUFBRSxNQUFNO0FBQ25CO0FBQ0E7QUFDQSxNQUFNLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO0FBQ3pDLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO0FBQ3JDLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO0FBQ3JDLE1BQU0sT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhO0FBQ2pDLE1BQU0sV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7QUFDekMsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7QUFDckMsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNILEVBQUUsS0FBSyxFQUFFLFNBQVMsS0FBSyxHQUFHO0FBQzFCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ2hELEdBQUc7QUFDSCxFQUFFLGFBQWEsRUFBRSxTQUFTLGFBQWEsR0FBRztBQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxHQUFHO0FBQ0gsRUFBRSxNQUFNLEVBQUUsU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUMxQyxJQUFJLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLE9BQU8sRUFBRTtBQUNqQjtBQUNBLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3hDLE1BQU0sT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxFQUFFLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUNuQyxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSCxDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ3JCLEVBQUUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLENBQUMsT0FBTyxHQUFHO0FBQ2IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJO0FBQ3hCLENBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEdBQUc7QUFDZDtBQUNBO0FBQ0E7QUFDQSxFQUFFLFVBQVUsRUFBRSxTQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUU7QUFDM0MsSUFBSSxFQUFFLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxVQUFVLEVBQUUsU0FBUyxVQUFVLEdBQUc7QUFDcEMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFO0FBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNwQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUMvRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztBQUNuQyxJQUFJLElBQUksWUFBWSxFQUFFO0FBQ3RCLE1BQU0sRUFBRSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQy9ELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN6QyxJQUFJLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztBQUM1QjtBQUNBLElBQUksR0FBRztBQUNQLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNsQjtBQUNBLFFBQVEsRUFBRSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDbkMsUUFBUSxvQkFBb0IsRUFBRSxDQUFDO0FBQy9CLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUMsTUFBTSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNoRCxRQUFRLEVBQUUsQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQ25DLFFBQVEsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0E7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUM1QixRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO0FBQ3pDLFVBQVUsS0FBSyxHQUFHO0FBQ2xCLFlBQVksV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO0FBQzFDLFlBQVksU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0FBQ3RDLFlBQVksU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0FBQ3RDLFlBQVksT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO0FBQ2xDLFlBQVksV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO0FBQzFDLFlBQVksU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0FBQ3RDLFdBQVcsQ0FBQztBQUNaLFNBQVM7QUFDVDtBQUNBLFFBQVEsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0M7QUFDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pJO0FBQ0EsUUFBUSxLQUFLLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3pDLE9BQU87QUFDUDtBQUNBO0FBQ0EsV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakMsVUFBVSxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsVUFBVSxJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN6RCxVQUFVLElBQUksaUJBQWlCLEdBQUcsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDO0FBQ3RFLFVBQVUsSUFBSSxpQkFBaUIsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hFO0FBQ0EsVUFBVSxJQUFJLFlBQVksR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDMUY7QUFDQSxVQUFVLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNuQyxZQUFZLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxZQUFZLE9BQU8sU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3BDLGNBQWMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLGNBQWMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsY0FBYyxJQUFJLGlCQUFpQixFQUFFO0FBQ3JDLGdCQUFnQixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsZ0JBQWdCLElBQUksWUFBWSxFQUFFO0FBQ2xDLGtCQUFrQixZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RCxpQkFBaUI7QUFDakIsZUFBZTtBQUNmLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0Q7QUFDQSxVQUFVLElBQUksaUJBQWlCLEVBQUU7QUFDakMsWUFBWSxNQUFNLEdBQUcsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELFlBQXFCLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDckU7QUFDQSxZQUFZLElBQUksa0JBQWtCLEdBQUcsWUFBWSxLQUFLLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDeEg7QUFDQSxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFQSxvQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFDcEY7QUFDQSxZQUFZLGdCQUFnQixDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDaEQ7QUFDQSxZQUFZLElBQUksWUFBWSxFQUFFO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUMzQyxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxVQUFVLElBQUksa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFDN0UsU0FBUztBQUNUO0FBQ0E7QUFDQSxhQUFhLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtBQUNsQyxZQUFZLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4QixZQUFZLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQztBQUNBLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtBQUNuRjtBQUNBLGNBQWMsRUFBRSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDekMsY0FBYyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUU7QUFDeEQsY0FBYyxFQUFFLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUN6QyxjQUFjLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZELGNBQWMsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDO0FBQzFDLGFBQWE7QUFDYjtBQUNBLFlBQVksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxZQUFZLEVBQUUsQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsV0FBVztBQUNYLEtBQUssUUFBUSxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDNUQsR0FBRztBQUNILEVBQUUsWUFBWSxFQUFFLFNBQVMsWUFBWSxDQUFDLGVBQWUsRUFBRTtBQUN2RCxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUM7QUFDaEMsSUFBSSxPQUFPLE9BQU8sQ0FBQztBQUNuQixHQUFHO0FBQ0gsRUFBRSxZQUFZLEVBQUUsU0FBUyxZQUFZLEdBQUc7QUFDeEMsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixHQUFHO0FBQ0gsRUFBRSxZQUFZLEVBQUUsU0FBUyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtBQUNwRSxFQUFFLFVBQVUsRUFBRSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sRUFBRSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDbkMsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLE9BQU8sQ0FBQyxZQUFZLEdBQUcsVUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ2hELEVBQUUsYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUN6QixFQUFFLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDbkI7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsRUFBRSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDN0IsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM3QixNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sQ0FBQyxPQUFPLEdBQUcsVUFBVSxLQUFLLEVBQUU7QUFDbkMsRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUU7QUFDeEUsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7QUFDckQsR0FBRztBQUNILEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRTtBQUN4QixFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsRUFBRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN4RCxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBQzdFLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO0FBQ25DLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRTtBQUMzSSxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsa0NBQWtDLENBQUMsQ0FBQztBQUN2RyxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLElBQUksaUJBQWlCLEdBQUdOLHVCQUFrRCxDQUFDO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtBQUN2QyxFQUFFLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDcEMsRUFBRSxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsRUFBRSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxZQUFZLEtBQUssQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsRUFBRSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLFdBQVcsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUY7QUFDQTtBQUNBLEVBQUUsSUFBSSxnQkFBZ0IsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0Y7QUFDQSxFQUFFLElBQUksV0FBVyxFQUFFO0FBQ25CLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQixJQUFJLElBQUksR0FBRyxrQkFBa0IsQ0FBQztBQUM5QixHQUFHLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTtBQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzlDLE1BQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDNUUsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3RELE1BQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLDJCQUEyQixHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLElBQUksSUFBSSxFQUFFLGlCQUFpQjtBQUMzQixJQUFJLElBQUksRUFBRSxJQUFJO0FBQ2QsSUFBSSxLQUFLLEVBQUUsS0FBSztBQUNoQixJQUFJLFFBQVEsRUFBRSxRQUFRO0FBQ3RCLElBQUksU0FBUyxFQUFFLFdBQVc7QUFDMUIsSUFBSSxNQUFNLEVBQUUsZ0JBQWdCO0FBQzVCLElBQUksYUFBYSxFQUFFLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLElBQUk7QUFDbkUsSUFBSSxjQUFjLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSztBQUN2RSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDVixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUNoQyxFQUFFLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDekI7QUFDQSxFQUFFLFFBQVEsSUFBSTtBQUNkLElBQUksS0FBSyxTQUFTO0FBQ2xCLE1BQU07QUFDTixRQUFRLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakQsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLElBQUksS0FBSyxLQUFLO0FBQ2QsTUFBTTtBQUNOLFFBQVEsU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hELFFBQVEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakQsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLElBQUksS0FBSyxLQUFLLENBQUM7QUFDZixJQUFJLEtBQUssU0FBUztBQUNsQixNQUFNO0FBQ04sUUFBUSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzFDLFVBQVUsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUQsY0FBYyxtQkFBbUIsR0FBR0ssZ0JBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDekUsY0FBYyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGNBQWMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsVUFBVSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQyxVQUFVLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLFVBQVUsU0FBUyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUMzRTtBQUNBLFVBQVUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkQsU0FBUyxNQUFNO0FBQ2YsVUFBVSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEQsVUFBVSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4QyxVQUFVLElBQUksU0FBUyxHQUFHLFFBQVEsRUFBRTtBQUNwQyxZQUFZLE1BQU0sSUFBSSxXQUFXLENBQUMsaUNBQWlDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDN0UsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRCxTQUFTO0FBQ1QsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLElBQUksS0FBSyxNQUFNO0FBQ2YsTUFBTTtBQUNOLFFBQVEsUUFBUSxLQUFLO0FBQ3JCLFVBQVUsS0FBSyxLQUFLO0FBQ3BCLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQixZQUFZLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFlBQVksTUFBTTtBQUNsQixVQUFVLEtBQUssS0FBSztBQUNwQixZQUFZLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUIsWUFBWSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxZQUFZLE1BQU07QUFDbEIsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFlBQVksU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsWUFBWSxNQUFNO0FBQ2xCLFVBQVUsS0FBSyxLQUFLO0FBQ3BCLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQixZQUFZLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFlBQVksTUFBTTtBQUNsQixVQUFVLEtBQUssS0FBSztBQUNwQixZQUFZLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUIsWUFBWSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxZQUFZLE1BQU07QUFDbEIsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFlBQVksU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsVUFBVSxLQUFLLEtBQUs7QUFDcEIsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFlBQVksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEtBQUssR0FBRztBQUNsQixZQUFZLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDekIsWUFBWSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzVCLFlBQVksTUFBTTtBQUNsQixVQUFVO0FBQ1YsWUFBWSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzVCLFNBQVM7QUFDVCxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsSUFBSSxLQUFLLFFBQVE7QUFDakIsTUFBTTtBQUNOLFFBQVEsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN2QixRQUFRLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLElBQUksSUFBSSxFQUFFLElBQUk7QUFDZCxJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUMzQixFQUFFLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkI7QUFDQSxFQUFFLElBQUkseUJBQXlCLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLEVBQUUsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDaEMsRUFBRSxJQUFJLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFDakM7QUFDQSxFQUFFLElBQUk7QUFDTixJQUFJLEtBQUssSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLHlCQUF5QixHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSx5QkFBeUIsR0FBRyxJQUFJLEVBQUU7QUFDNUosTUFBTSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQzdCO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hELFFBQVEsTUFBTSxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN6RCxPQUFPO0FBQ1AsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUU7QUFDaEIsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDN0IsSUFBSSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLEdBQUcsU0FBUztBQUNaLElBQUksSUFBSTtBQUNSLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFDMUQsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0IsT0FBTztBQUNQLEtBQUssU0FBUztBQUNkLE1BQU0sSUFBSSxpQkFBaUIsRUFBRTtBQUM3QixRQUFRLE1BQU0sY0FBYyxDQUFDO0FBQzdCLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzFDLEVBQUUsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLEVBQUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFNBQVMsSUFBSSxvQkFBb0IsRUFBRTtBQUMxRCxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLE1BQU0sSUFBSSxFQUFFLGVBQWU7QUFDM0IsTUFBTSxJQUFJLEVBQUUsUUFBUTtBQUNwQixNQUFNLE1BQU0sRUFBRSxTQUFTO0FBQ3ZCLE1BQU0sU0FBUyxFQUFFLFNBQVM7QUFDMUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxJQUFJLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQztBQUMzQyxJQUFJLGFBQWEsR0FBRyx3QkFBd0IsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUMvQyxFQUFFLElBQUksYUFBYSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsRUFBRSxJQUFJLGNBQWMsR0FBRyxLQUFLLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUM5RTtBQUNBLEVBQUUsSUFBSSxhQUFhLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDeEMsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLDhCQUE4QixHQUFHLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3RGLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssR0FBRyxzT0FBc08sQ0FBQztBQUNuUDtBQUNBLFNBQVMsc0JBQXNCLENBQUMsSUFBSSxFQUFFO0FBQ3RDLEVBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUU7QUFDMUosSUFBSSxJQUFJLGFBQWEsRUFBRTtBQUN2QixNQUFNLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RixLQUFLO0FBQ0wsSUFBSSxJQUFJLGlCQUFpQixFQUFFO0FBQzNCLE1BQU0sT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLEtBQUs7QUFDTCxJQUFJLElBQUksa0JBQWtCLEVBQUU7QUFDNUI7QUFDQTtBQUNBLE1BQU0sT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTCxJQUFJLElBQUksWUFBWSxFQUFFO0FBQ3RCLE1BQU0sT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FBQ0wsSUFBSSxJQUFJLFNBQVMsRUFBRTtBQUNuQixNQUFNLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDN0MsRUFBRSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEVBQUUsSUFBSSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkQ7QUFDQSxFQUFFLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM3QyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLE1BQU0sSUFBSSxFQUFFLGVBQWU7QUFDM0IsTUFBTSxJQUFJLEVBQUUsTUFBTTtBQUNsQixNQUFNLE1BQU0sRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDO0FBQ3BDLE1BQU0sU0FBUyxFQUFFLFNBQVM7QUFDMUIsTUFBTSxZQUFZLEVBQUUsWUFBWTtBQUNoQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdkIsRUFBRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDckIsRUFBRSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekI7QUFDQSxFQUFFLElBQUksT0FBTyxFQUFFO0FBQ2YsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUN0QyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDOUIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUN0QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUMxQixFQUFFLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsR0FBRztBQUNqRCxJQUFJLFNBQVMsRUFBRSxTQUFTO0FBQ3hCLElBQUksT0FBTyxFQUFFLE9BQU87QUFDcEIsSUFBSSxXQUFXLEVBQUUsV0FBVztBQUM1QixJQUFJLFdBQVcsRUFBRSxXQUFXO0FBQzVCLElBQUksU0FBUyxFQUFFLFdBQVcsSUFBSSxDQUFDO0FBQy9CLElBQUksU0FBUyxFQUFFLFdBQVcsSUFBSSxDQUFDO0FBQy9CLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDMUIsSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDaEYsTUFBTSxJQUFJLFdBQVcsRUFBRTtBQUN2QixRQUFRLEdBQUcsR0FBRztBQUNkLFVBQVUsU0FBUyxFQUFFLFNBQVM7QUFDOUIsVUFBVSxPQUFPLEVBQUUsT0FBTztBQUMxQixVQUFVLFdBQVcsRUFBRSxXQUFXO0FBQ2xDLFVBQVUsV0FBVyxFQUFFLFdBQVc7QUFDbEMsVUFBVSxTQUFTLEVBQUUsV0FBVyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3JELFVBQVUsU0FBUyxFQUFFLFdBQVcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNyRCxTQUFTLENBQUM7QUFDVixPQUFPO0FBQ1AsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0E7QUFDQSxTQUFTLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDM0MsUUFBUSxJQUFJLFdBQVcsRUFBRTtBQUN6QixVQUFVLEdBQUcsR0FBRztBQUNoQixZQUFZLFNBQVMsRUFBRSxTQUFTO0FBQ2hDLFlBQVksT0FBTyxFQUFFLE9BQU87QUFDNUIsWUFBWSxXQUFXLEVBQUUsV0FBVztBQUNwQyxZQUFZLFdBQVcsRUFBRSxXQUFXO0FBQ3BDLFlBQVksU0FBUyxFQUFFLEVBQUUsV0FBVztBQUNwQyxZQUFZLFNBQVMsRUFBRSxFQUFFLFdBQVc7QUFDcEMsV0FBVyxDQUFDO0FBQ1osU0FBUztBQUNULFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsT0FBTztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ3pCLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO0FBQ25DLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNmLE1BQU0sTUFBTSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDO0FBQ2pFLE1BQU0sS0FBSyxFQUFFO0FBQ2IsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDM0IsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVc7QUFDL0IsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVc7QUFDL0IsT0FBTztBQUNQLE1BQU0sR0FBRyxFQUFFO0FBQ1gsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU87QUFDekIsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDN0IsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDN0IsT0FBTztBQUNQLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUN6QixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO0FBQ3BDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7QUFDbEMsSUFBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDNUIsSUFBSSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7QUFDOUIsSUFBSSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87QUFDeEIsSUFBSSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7QUFDbEMsSUFBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDNUIsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0EsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ2hDLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtBQUMxQixJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBQ0Q7QUFDQSxTQUFTLG9CQUFvQixHQUFHO0FBQ2hDLEVBQUUsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDekMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFO0FBQzdCLEVBQUUsTUFBTSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBQ0Q7QUFDQSxJQUFBRSxZQUFjLEdBQUcsT0FBTzs7Ozs7O0FDdDNDeEI7QUFDQSxJQUFJLGdCQUFnQixHQUFHUCxZQUFrQyxDQUFDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsVUFBVSxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQ3BELEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsSUFBQVEsUUFBYyxHQUFHLGdCQUFnQjs7Ozs7O0FDckJqQztBQUNBLElBQUlDLGNBQVksR0FBRyxZQUFZLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sVUFBVSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksVUFBVSxFQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcGpCO0FBQ0EsU0FBU0MsaUJBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsWUFBWSxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDeko7QUFDQSxJQUFJLHVCQUF1QixHQUFHLGFBQWEsQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFHLFlBQVksQ0FBQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUMsVUFBUSxHQUFHLFlBQVk7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzFCLElBQUksSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlGLElBQUksSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVGLElBQUksSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pGO0FBQ0EsSUFBSUQsaUJBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRUQsY0FBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzFCLElBQUksR0FBRyxFQUFFLGNBQWM7QUFDdkIsSUFBSSxLQUFLLEVBQUUsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFO0FBQzNDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQy9DLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLEdBQUcsUUFBUSxHQUFHLGVBQWUsQ0FBQyxDQUFDO0FBQzVHLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFVBQVU7QUFDbkIsSUFBSSxLQUFLLEVBQUUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQ25DLE1BQU0sSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNGLE1BQU0sSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlGO0FBQ0E7QUFDQSxNQUFNLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUN2QixVQUFVLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQztBQUM3QyxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsUUFBUSxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyRSxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDdkIsVUFBVSxRQUFRLEdBQUcsbUJBQW1CLENBQUM7QUFDekMsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DLFFBQVEsU0FBUyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEUsT0FBTztBQUNQLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsYUFBYTtBQUN0QixJQUFJLEtBQUssRUFBRSxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDdEMsTUFBTSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUY7QUFDQTtBQUNBLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNyQixRQUFRLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQztBQUMzQyxPQUFPO0FBQ1AsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDM0MsTUFBTSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLGVBQWU7QUFDeEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUMvQyxNQUFNLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ2pIO0FBQ0EsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBSSxLQUFLLElBQUksUUFBUSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7QUFDbEQsUUFBUSxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFBSSxLQUFLLEVBQUUsU0FBUyxNQUFNLEdBQUc7QUFDN0IsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtBQUM1QixRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1AsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN4QixRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO0FBQ3pELFVBQVUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0I7QUFDQSxRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsZUFBZTtBQUN4QixJQUFJLEtBQUssRUFBRSxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ3BELE1BQU0sSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRDtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEQsUUFBUSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsV0FBVztBQUNwQixJQUFJLEtBQUssRUFBRSxTQUFTLFNBQVMsR0FBRztBQUNoQyxNQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7QUFDaEMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxTQUFTO0FBQ2xCLElBQUksS0FBSyxFQUFFLFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRTtBQUNyQyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQztBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDMUI7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3hCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7QUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3pELE9BQU87QUFDUDtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQy9DLFNBQVM7QUFDVDtBQUNBO0FBQ0EsTUFBTSxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEYsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQ2pCLElBQUksS0FBSyxFQUFFLFNBQVMsTUFBTSxDQUFDLFNBQVMsRUFBRTtBQUN0QyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLFdBQVc7QUFDcEIsSUFBSSxLQUFLLEVBQUUsU0FBUyxTQUFTLEdBQUc7QUFDaEMsTUFBTSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDN0IsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxVQUFVO0FBQ25CLElBQUksS0FBSyxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQy9CLE1BQU0sSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2pDLFFBQVEsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRixPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pELFFBQVEsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3BGLE9BQU87QUFDUCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLGdCQUFnQjtBQUN6QixJQUFJLEtBQUssRUFBRSxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDekMsTUFBTSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL0YsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxZQUFZO0FBQ3JCLElBQUksS0FBSyxFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQ2pDLE1BQU0sSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUN2RixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTtBQUM5QixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSSxHQUFHLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLG9CQUFvQjtBQUM3QixJQUFJLEtBQUssRUFBRSxTQUFTLGtCQUFrQixHQUFHO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDOUMsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1AsTUFBTSxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUksS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxnQkFBZ0I7QUFDekIsSUFBSSxLQUFLLEVBQUUsU0FBUyxjQUFjLEdBQUc7QUFDckMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUCxNQUFNLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5SSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDUCxJQUFJLEdBQUcsRUFBRSxZQUFZO0FBQ3JCLElBQUksS0FBSyxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRTtBQUNyQyxNQUFNLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRyxNQUFNLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxRixNQUFNLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pGO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2pCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEMsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxNQUFNLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtBQUMvQixRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUMzQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUN6QixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsY0FBYztBQUN2QixJQUFJLEtBQUssRUFBRSxTQUFTLFlBQVksR0FBRztBQUNuQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO0FBQzlCLFFBQVEsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE9BQU87QUFDUCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSx1QkFBdUI7QUFDaEMsSUFBSSxLQUFLLEVBQUUsU0FBUyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUU7QUFDOUMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzRixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMLElBQUksR0FBRyxFQUFFLG9CQUFvQjtBQUM3QixJQUFJLEtBQUssRUFBRSxTQUFTLGtCQUFrQixHQUFHO0FBQ3pDLE1BQU0sT0FBTyxRQUFRLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOO0FBQ0EsRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0FFLFVBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsVUFBUSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBO0FBQ0EsU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtBQUN0QixJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLEdBQUc7QUFDSCxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUNEO0FBQ0EsSUFBQSxRQUFjLEdBQUdBLFVBQVE7Ozs7OztBQ25hekI7QUFDQSxJQUFJQSxVQUFRLEdBQUdYLFFBQXNCLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQzNCLEVBQUUsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZGO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUMxQixFQUFFLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFDMUM7QUFDQSxFQUFFLFNBQVMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUNoRCxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQztBQUN4QixJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2IsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN6QixVQUFVLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsU0FBUyxNQUFNO0FBQ2YsVUFBVSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzlCLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLFVBQVUsSUFBSSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQzNFLFlBQVksU0FBUztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLFlBQVksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFlBQVlXLFVBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsWUFBWSxPQUFPLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ3pDLGNBQWMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RELGNBQWMsS0FBSyxHQUFHQSxVQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxhQUFhO0FBQ2IsWUFBWUEsVUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hELFdBQVc7QUFDWDtBQUNBO0FBQ0EsZUFBZTtBQUNmLGNBQWMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEMsYUFBYTtBQUNiLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksRUFBRTtBQUNkLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUNEO0FBQ0EsSUFBQUMsVUFBYyxHQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxFQUFFLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUU7QUFDN0MsSUFBSSxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN6RztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNsQyxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLE9BQU8sRUFBRTtBQUNsRCxNQUFNLElBQUksT0FBTyxPQUFPLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtBQUNuRCxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUCxNQUFNLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSUQsVUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0FBQ0E7QUFDQSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUU7QUFDeEMsTUFBTSxJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7QUFDOUMsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE9BQU87QUFDUCxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDbkQsTUFBTSxJQUFJLFVBQVUsR0FBR0EsVUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRCxNQUFNLElBQUksUUFBUSxHQUFHQSxVQUFRLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hFO0FBQ0Es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Q0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2hELEdBQUc7QUFDSCxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDakMsRUFBRSxPQUFPLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUN4QyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLElBQUksTUFBTSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksTUFBTTtBQUNsRSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUNqQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDO0FBQ2xDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQ2pDLEVBQUUsT0FBTyxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUN0RSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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SyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeHBCO0FBQ0EsSUFBSUksY0FBWSxHQUFHLFlBQVksRUFB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TSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsc0RBQXNELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4cEI7QUFDQSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFD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QUN0RCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsU0FBUyxFQUFFLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDbEQsSUFBSSxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxRQUFRLEVBQUUsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQ25DLElBQUksT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxFQUFFLFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRTtBQUN0QyxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUMsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUM3RCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFFBQVEsRUFBRSxTQUFTLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ2pELElBQUksSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUNyRixRQUFRLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxPQUFPLFNBQVMs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QUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDO0FBQ2xFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUM7QUFDdkIsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUM3RDtBQUNBLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDO0FBQ3pCO0FBQ0EsRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQzFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUM1QixJQUFJLENBQUMsR0FBRyxLQUFJO0FBQ1osR0FBRyxNQUFNO0FBQ1QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzQyxNQUFNLENBQUMsR0FBRTtBQUNULE1BQU0sQ0FBQyxJQUFJLEVBQUM7QUFDWixLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ3hCLE1BQU0sS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFDO0FBQ3JCLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFDO0FBQzFDLEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsTUFBTSxDQUFDLEdBQUU7QUFDVCxNQUFNLENBQUMsSUFBSSxFQUFDO0FBQ1osS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzNCLE1BQU0sQ0FBQyxHQUFHLEVBQUM7QUFDWCxNQUFNLENBQUMsR0FBRyxLQUFJO0FBQ2QsS0FBSyxNQUFNLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBQztBQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBSztBQUNuQixLQUFLLE1BQU07QUFDWCxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBQztBQUM1RCxNQUFNLENBQUMsR0FBRyxFQUFDO0FBQ1gsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ2xGO0FBQ0EsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUM7QUFDckIsRUFBRSxJQUFJLElBQUksS0FBSTtBQUNkLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ2pGO0FBQ0EsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBRztBQUNuQzs7O0NDbkZBLE1BQU0sQ0FBQyxjQUFjLENBQUEsT0FBQSxFQUFVLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlELENBQUEsT0FBQSxDQUFBLGNBQUEsR0FBeUIsT0FBcUIsQ0FBQSxVQUFBLEdBQUEsT0FBQSxDQUFBLFVBQUEsR0FBcUIsT0FBeUIsQ0FBQSxjQUFBLEdBQUEsT0FBQSxDQUFBLFVBQUEsR0FBcUIscUJBQXFCLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxVQUFBLEdBQXFCLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxVQUFBLEdBQXFCLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxVQUFBLEdBQXFCLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxRQUFBLEdBQW1CLG9CQUFvQixPQUFtQixDQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsU0FBQSxHQUFvQixPQUFtQixDQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsUUFBQSxHQUFtQixPQUFtQixDQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsUUFBQSxHQUFtQixPQUFtQixDQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsUUFBQSxHQUFtQixlQUFlLE9BQW9CLENBQUEsU0FBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLE9BQW9CLENBQUEsU0FBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLE9BQW9CLENBQUEsU0FBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLE9BQWdCLENBQUEsS0FBQSxHQUFBLEtBQUssQ0FBQyxDQUFDO0NBQ3ZuQixNQUFNOEQsU0FBTyxHQUFHL0QsT0FBa0IsQ0FBQztBQUNuQztDQUNBLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUNuQixLQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDdkQ7QUFDRDtBQUNBO0FBQ0E7Q0FDQSxPQUFnQixDQUFBLEtBQUEsR0FBQTtLQUNaLEdBQUcsRUFBRSxDQUFDO0FBQ1YsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtTQUNmLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNyQztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1NBQ3RCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBb0IsQ0FBQSxTQUFBLEdBQUE7S0FDaEIsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3ZCLFNBQVEsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM1QztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlCLFNBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pELFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBb0IsQ0FBQSxTQUFBLEdBQUE7S0FDaEIsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1NBQ2YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3RDO0FBQ0wsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7U0FDdEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsU0FBUSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDckI7QUFDTCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7Q0FDQSxPQUFvQixDQUFBLFNBQUEsR0FBQTtLQUNoQixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDdkIsU0FBUSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0IsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNsRjtBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlCLFNBQVEsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNoRCxTQUFRLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pELFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBb0IsQ0FBQSxTQUFBLEdBQUE7S0FDaEIsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3ZCLFNBQVEsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLFNBQVEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQzVFO0FBQ0wsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDOUIsU0FBUSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0IsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFNBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRCxTQUFRLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNyQjtBQUNMLEVBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtDQUNBLE9BQW9CLENBQUEsU0FBQSxHQUFBO0tBQ2hCLEdBQUcsRUFBRSxDQUFDO0FBQ1YsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUN2QixTQUFRLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDNUM7QUFDTCxLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUM5QixTQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxTQUFRLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNyQjtBQUNMLEVBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtDQUNBLE9BQW9CLENBQUEsU0FBQSxHQUFBO0tBQ2hCLEdBQUcsRUFBRSxDQUFDO0FBQ1YsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtTQUNmLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN0QztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1NBQ3RCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBZSxDQUFBLElBQUEsR0FBQTtLQUNYLEdBQUcsRUFBRSxDQUFDO0FBQ1YsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtTQUNmLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNwQztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1NBQ3RCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBbUIsQ0FBQSxRQUFBLEdBQUE7S0FDZixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7U0FDZixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDckM7QUFDTCxLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtTQUN0QixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQyxTQUFRLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNyQjtBQUNMLEVBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtDQUNBLE9BQW1CLENBQUEsUUFBQSxHQUFBO0tBQ2YsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3ZCLFNBQVEsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMzQztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlCLFNBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBbUIsQ0FBQSxRQUFBLEdBQUE7S0FDZixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDdkIsU0FBUSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdEQsT0FBTyxRQUFRLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDO01BQ2hFO0FBQ0wsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDOUIsU0FBUSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2hELFNBQVEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsU0FBUSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDckI7QUFDTCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7Q0FDQSxPQUFtQixDQUFBLFFBQUEsR0FBQTtLQUNmLEdBQUcsRUFBRSxDQUFDO0FBQ1YsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUN2QixTQUFRLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN0RCxPQUFPLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7TUFDaEU7QUFDTCxLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUM5QixTQUFRLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQixRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsU0FBUSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BELFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBbUIsQ0FBQSxRQUFBLEdBQUE7S0FDZixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7U0FDZixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDckM7QUFDTCxLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtTQUN0QixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQyxTQUFRLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNyQjtBQUNMLEVBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtDQUNBLE9BQW1CLENBQUEsUUFBQSxHQUFBO0tBQ2YsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3ZCLFNBQVEsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMzQztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlCLFNBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBb0IsQ0FBQSxTQUFBLEdBQUE7S0FDaEIsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3ZCLFNBQVEsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMvQztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlCLFNBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BELFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBbUIsQ0FBQSxRQUFBLEdBQUE7S0FDZixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDdkIsU0FBUSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzlDO0FBQ0wsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDOUIsU0FBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsU0FBUSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDckI7QUFDTCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7Q0FDQSxPQUFvQixDQUFBLFNBQUEsR0FBQTtLQUNoQixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7U0FDZixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekM7QUFDTCxLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtTQUN0QixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QyxTQUFRLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNyQjtBQUNMLEVBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtDQUNBLE9BQW1CLENBQUEsUUFBQSxHQUFBO0tBQ2YsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1NBQ2YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3hDO0FBQ0wsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7U0FDdEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsU0FBUSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDckI7QUFDTCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7Q0FDQSxPQUFxQixDQUFBLFVBQUEsR0FBQTtLQUNqQixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7QUFDMUIsU0FBUSxPQUFPK0QsU0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlEO0FBQ0wsS0FBSSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDakMsU0FBUUEsU0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRSxTQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7TUFDNUI7QUFDTCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7Q0FDQSxPQUFxQixDQUFBLFVBQUEsR0FBQTtLQUNqQixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDdkIsU0FBUSxPQUFPQSxTQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDMUQ7QUFDTCxLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUM5QixTQUFRQSxTQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFLFNBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUM1QjtBQUNMLEVBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtDQUNBLE9BQXFCLENBQUEsVUFBQSxHQUFBO0tBQ2pCLEdBQUcsRUFBRSxDQUFDO0FBQ1YsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtTQUNmLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN2QztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1NBQ3RCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBcUIsQ0FBQSxVQUFBLEdBQUE7S0FDakIsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3ZCLFNBQVEsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM3QztBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlCLFNBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xELFNBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0NBQ0EsT0FBcUIsQ0FBQSxVQUFBLEdBQUE7S0FDakIsR0FBRyxFQUFFLENBQUM7QUFDVixLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1NBQ2YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZDO0FBQ0wsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7U0FDdEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsU0FBUSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDckI7QUFDTCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7Q0FDQSxPQUFxQixDQUFBLFVBQUEsR0FBQTtLQUNqQixHQUFHLEVBQUUsQ0FBQztBQUNWLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDdkIsU0FBUSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzdDO0FBQ0wsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDOUIsU0FBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQsU0FBUSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDckI7QUFDTCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7Q0FDQSxPQUFxQixDQUFBLFVBQUEsR0FBQTtLQUNqQixHQUFHLEVBQUUsRUFBRTtBQUNYLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDdkIsU0FBUSxPQUFPQSxTQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDM0Q7QUFDTCxLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUM5QixTQUFRQSxTQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLFNBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUM1QjtBQUNMLEVBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtDQUNBLE9BQXFCLENBQUEsVUFBQSxHQUFBO0tBQ2pCLEdBQUcsRUFBRSxFQUFFO0FBQ1gsS0FBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUN2QixTQUFRLE9BQU9BLFNBQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMxRDtBQUNMLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlCLFNBQVFBLFNBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEUsU0FBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO01BQzVCO0FBQ0wsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQSxNQUFNLFVBQVUsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7S0FDSSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ3JCLFNBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7TUFDbEI7QUFDTDtBQUNBLEtBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7TUFDZjtFQUNKO0FBQ0QsQ0FBQSxPQUFBLENBQUEsVUFBQSxHQUFxQixVQUFVLENBQUM7QUFDaEMsQ0FBQSxNQUFNLGNBQWMsQ0FBQztLQUNqQixXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ3JCLFNBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7TUFDbEI7QUFDTCxLQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3ZCLFNBQVEsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3BEO0VBQ0o7QUFDRCxDQUFBLE9BQUEsQ0FBQSxjQUFBLEdBQXlCLGNBQWMsQ0FBQztBQUN4QyxDQUFBLE1BQU0sVUFBVSxDQUFDO0tBQ2IsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNyQixTQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO01BQ2xCO0FBQ0wsS0FBSSxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtBQUN6QixTQUFRLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDaEU7RUFDSjtBQUNELENBQUEsT0FBQSxDQUFBLFVBQUEsR0FBcUIsVUFBVSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLENBQUEsTUFBTSxVQUFVLENBQUM7QUFDakIsS0FBSSxXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRTtBQUMvQixTQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFNBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7TUFDNUI7QUFDTCxLQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFO1NBQ3BCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNyRjtFQUNKO0FBQ0QsQ0FBQSxPQUFBLENBQUEsVUFBQSxHQUFxQixVQUFVLENBQUM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFBLE1BQU0sY0FBYyxDQUFDO0tBQ2pCLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDckIsU0FBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztNQUNsQjtLQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3pDLFNBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFNBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM3QyxhQUFZLEdBQUcsSUFBSSxjQUFjLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDeEY7U0FDRCxPQUFPLEdBQUcsQ0FBQztNQUNkO0tBQ0QsT0FBTyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7U0FDeEIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7TUFDL0I7QUFDTCxLQUFJLE9BQU8saUJBQWlCLENBQUMsRUFBRSxFQUFFO0FBQ2pDLFNBQVEsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO0FBQzFCLGFBQVksT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1VBQ2xDO2NBQ0k7YUFDRCxFQUFFLElBQUksT0FBTyxDQUFDO0FBQzFCLGFBQVksT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1VBQzFFO01BQ0o7QUFDTCxLQUFJLE9BQU8saUJBQWlCLENBQUMsSUFBSSxFQUFFO1NBQzNCLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO2FBQzFDLE9BQU8sSUFBSSxDQUFDO1VBQ2Y7U0FDRCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsRSxTQUFRLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtBQUNoQyxhQUFZLE1BQU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7VUFDdEM7U0FDRCxPQUFPLFNBQVMsQ0FBQztNQUNwQjtBQUNMLEtBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLFNBQVEsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuRTtFQUNKO0FBQ0QsQ0FBQSxPQUFBLENBQUEsY0FBQSxHQUF5QixjQUFjLENBQUM7Q0FDeEMsY0FBYyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0tBQ3RGLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHO0FBQ2hGLEtBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUNwRixLQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7QUFDbEYsS0FBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0FBQ2xGLEtBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUNsRixLQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7QUFDbEYsS0FBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7QUFDN0UsS0FBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7Ozs7O0FDcGMzQ0MsTUFBQSxDQUFBLGFBQXFCLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxNQUFBLENBQUEsd0JBQWdDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsS0FBSztBQUMzRCxDQUFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RixDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JCLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixFQUFFO0FBQ0Y7QUFDQSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEI7QUFDQSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdDLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixFQUFFO0FBQ0Y7QUFDQSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxPQUFPLE9BQU8sS0FBSyxHQUFHLENBQUM7QUFDeEIsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsTUFBQSxDQUFBLG1CQUEyQixHQUFHO0FBQzlCLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSztBQUMxQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdILEVBQUU7QUFDRixDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ1A7O0FDckNBLElBQUFDLFdBQWMsR0FBRztBQUNqQixDQUFDLFVBQVUsRUFBRTtBQUNiLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsSUFBSTtBQUNOLEVBQUUsS0FBSztBQUNQLEVBQUUsSUFBSTtBQUNOLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsSUFBSTtBQUNOLEVBQUUsSUFBSTtBQUNOLEVBQUUsUUFBUTtBQUNWLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsSUFBSTtBQUNOLEVBQUUsS0FBSztBQUNQLEVBQUUsR0FBRztBQUNMLEVBQUUsSUFBSTtBQUNOLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsT0FBTztBQUNULEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsSUFBSTtBQUNOLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsT0FBTztBQUNULEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsT0FBTztBQUNULEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsSUFBSTtBQUNOLEVBQUUsS0FBSztBQUNQLEVBQUUsSUFBSTtBQUNOLEVBQUUsSUFBSTtBQUNOLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUUsS0FBSztBQUNQLEVBQUU7QUFDRixDQUFDLFNBQVMsRUFBRTtBQUNaLEVBQUUsWUFBWTtBQUNkLEVBQUUsV0FBVztBQUNiLEVBQUUsV0FBVztBQUNiLEVBQUUsWUFBWTtBQUNkLEVBQUUsWUFBWTtBQUNkLEVBQUUsYUFBYTtBQUNmLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsWUFBWTtBQUNkLEVBQUUsV0FBVztBQUNiLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsc0JB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QUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQzVIO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLElBQUksT0FBTyxJQUFJLE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRDtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUMxSDtBQUNBLEtBQUssT0FBTztBQUNaLE1BQU0sR0FBRyxFQUFFLEtBQUs7QUFDaEIsTUFBTSxJQUFJLEVBQUUsZ0JBQWdCO0FBQzVCLE1BQU0sQ0FBQztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUMxSDtBQUNBLEtBQUssT0FBTztBQUNaLE1BQU0sR0FBRyxFQUFFLEtB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QUcsQ0FBQyxDQUFDO0FBQy9CLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQzlCLFFBQVEsa0JBQWtCLEVBQUUsQ0FBQztBQUM3QixPQUFPLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3JDLFFBQVEsa0JBQWtCLEVBQUUsQ0FBQztBQUM3QixRQUFRLElBQUksa0JBQWtCLEtBQUssQ0FBQyxFQUFFO0FBQ3RDLFVBQVUsTUFBTTtBQUNoQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHLE1BQU07QUFDVCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDMUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDMUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDMUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDMUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDMUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDMUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDMUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDMUIsSUFBSTtBQUNKLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJ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LENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxPQUFPLElBQUk7QUFDckMsSUFBSSxPQUFPLEtBQUs7QUFDaEIsQ0FBQztBQUNELFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDOUIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUMzQixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE9BQU8sSUFBSTtBQUNyQyxJQUFJLE9BQU8sS0FBSztBQUNoQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDM0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDeEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDeEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDeEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDeEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDeEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7QUFDeEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxPQUFPLElBQUk7QUFDckMsSUFBSSxPQUFPLEtBQUs7QUFDaEIsQ0FBQztBQUNELFNBQVMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUMzQixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN4QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE9BQU8sSUFBSTtBQUNyQyxJQUFJLE9BQU8sS0FBSztBQUNoQixDQUFDO0FBQ0Q7QUFDQSxJQUFBLGFBQWMsR0FBR0EsYUFBVzs7QUM5STVCLE1BQU0sUUFBUSxHQUFHLHVCQUF1QixDQUFDO0FBQ3pDLE1BQU0sUUFBUSxHQUFHLDZFQUE2RSxDQUFDO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO0FBQ3pDLElBQUksTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ3RDLENBQUM7QUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQzdDLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzFDLENBQUM7QUFDRDtBQUNBO0FBQ0EsTUFBTSxRQUFRLEdBQUc7QUFDakIsSUFBSSxHQUFHLElBQUksSUFBSTtBQUNmLElBQUksWUFBWSxFQUFFLElBQUk7QUFDdEIsSUFBSSxZQUFZLEVBQUUsSUFBSTtBQUN0QixJQUFJLFNBQVMsRUFBRSxJQUFJO0FBQ25CO0FBQ0EsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxTQUFTQyxVQUFRLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDcEQsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQztBQUNwRDtBQUNBLElBQUksSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ3ZGLFNBQVMsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDdkQsUUFBUSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxLQUFJO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEQsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNqQixZQUFZLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxZQUFZLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxZQUFZLElBQUksaUJBQWlCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0E7QUFDQSxZQUFZLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsWUFBWSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUM3RyxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNuSCxpQkFBZ0I7QUFDaEIsZ0JBQWdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQyxnQkFBZ0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN4QyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hELG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDckQseUJBQXlCLE9BQU8sR0FBRyxDQUFDO0FBQ3BDLGlCQUFpQixLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ25DLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDckQseUJBQXlCLE9BQU8sR0FBRyxDQUFDO0FBQ3BDLGlCQUFpQixLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixHQUFHLE1BQU0sS0FBSyxHQUFHLEtBQUssaUJBQWlCLEtBQUssRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUM7QUFDakYseUJBQXlCLEdBQUcsTUFBTSxLQUFLLGlCQUFpQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ3JFLHlCQUF5QixJQUFJLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2xGLHlCQUF5QixPQUFPLEdBQUcsQ0FBQztBQUNwQyxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsR0FBRyxZQUFZLENBQUM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsR0FBRyxpQkFBaUIsS0FBSyxNQUFNLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDaEUseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixLQUFLLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUMxRSx5QkFBeUIsT0FBTyxHQUFHLENBQUM7QUFDcEMsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLEdBQUcsVUFBVSxLQUFLLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNyRCxxQkFBcUIsR0FBRyxVQUFVLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU8sR0FBRyxDQUFDO0FBQzNCLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUyxLQUFJO0FBQ2IsWUFBWSxPQUFPLEdBQUcsQ0FBQztBQUN2QixTQUFTO0FBQ1QsS0FBSztBQUNMLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDMUIsSUFBSSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsR0FBRyxNQUFNLEtBQUssR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDekMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDeEQsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RixRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFDRCxJQUFBLE1BQWMsR0FBR0E7O0FDMUhqQjtBQUNBO0FBQ0EsTUFBTSxJQUFJLEdBQUcxRSxNQUFrQixDQUFDO0FBQ2hDLE1BQU0sT0FBTyxHQUFHQyxTQUFvQixDQUFDO0FBQ3JDLE1BQU0sV0FBVyxHQUFHQyxhQUEwQixDQUFDO0FBQy9DLE1BQU0sUUFBUSxHQUFHdUIsTUFBaUIsQ0FBQztBQUNuQztBQUVFLHVGQUF1RjtBQUN6RixHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1rRCxrQkFBZ0I7QUFDdEIsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHO0FBQ3hCLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDeEQsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNwRCxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3BELE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDekQsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5RCxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUc7QUFDeEIsTUFBTSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNwRCxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3RELE1BQU0sS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2xELE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDckQsTUFBTSxXQUFXLEdBQUcsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN6RCxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNsRCxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ25ELEtBQUssQ0FBQztBQUNOLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBQ25ELElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLG9CQUFvQixHQUFHQyxzQkFBb0IsQ0FBQztBQUNyRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNuRCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLFNBQVMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUM7QUFDOUMsRUFBRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDaEQsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxJQUFJLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDN0IsT0FBTyxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3pDLE9BQU8sR0FBRyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztBQUNsQyxNQUFLO0FBQ0wsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRTtBQUNqRyxFQUFFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtBQUN6QixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDOUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BHLE1BQU0sR0FBRyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLENBQUM7QUFDakQ7QUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CLE9BQU8sS0FBSyxHQUFHLE9BQU8sTUFBTSxLQUFLLE9BQU8sR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFDOUQ7QUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3ZDLFFBQVEsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUM1RixPQUFPLEtBQUk7QUFDWCxRQUFRLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QyxRQUFRLEdBQUcsVUFBVSxLQUFLLEdBQUcsQ0FBQztBQUM5QixVQUFVLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDOUYsU0FBUyxLQUFJO0FBQ2IsVUFBVSxPQUFPLEdBQUcsQ0FBQztBQUNyQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7QUFDbkMsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO0FBQ25DLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxJQUFJLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDeEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUU7QUFDN0IsTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUNoQixLQUFLO0FBQ0wsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzNCLE1BQU0sT0FBTyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyw4Q0FBOEMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRjtBQUNBLFNBQVMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDckQsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDckU7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRCxJQUFJLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELE1BQU0sSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUM7QUFDOUQsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUU7QUFDakQsVUFBVSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RCxTQUFTO0FBQ1QsUUFBUSxHQUFHLEtBQUssS0FBSyxXQUFXLEVBQUUsS0FBSyxJQUFJLFlBQVksQ0FBQztBQUN4RCxRQUFRLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUNsQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7QUFDdkMsWUFBWSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25DLFdBQVc7QUFDWCxVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckQsVUFBVSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkYsVUFBVSxHQUFHLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxXQUFXLEtBQUssR0FBRyxPQUFPLE1BQU0sS0FBSyxPQUFPLE1BQU0sSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDO0FBQ3hFO0FBQ0EsWUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLFdBQVcsS0FBSTtBQUNmO0FBQ0EsWUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVTtBQUNyQyxjQUFjLE1BQU07QUFDcEIsY0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQjtBQUM5QyxjQUFjLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCO0FBQzdDLGFBQWEsQ0FBQztBQUNkLFdBQVc7QUFDWCxTQUFTLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFO0FBQ3hELFVBQVUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNwQyxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0wsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUU7QUFDMUMsTUFBTSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvRCxNQUFNLE9BQU8sY0FBYyxDQUFDO0FBQzVCLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSztBQUNoQixHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsTUFBTSxRQUFRLEdBQUcsU0FBUyxPQUFPLEVBQUU7QUFDbkMsRUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQyxFQUFFLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMzQixFQUFFLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNwQixFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNqQixFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDLElBQUksTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ2xCO0FBQ0E7QUFDQSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDaEMsUUFBUSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSw0QkFBNEIsRUFBQztBQUMxRixRQUFRLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMvRDtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUN2QyxVQUFVLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsVUFBVSxHQUFHLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvQixZQUFZLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7QUFDMUMsVUFBVSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQ3ZCLFVBQVUsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsUUFBUSxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDekUsVUFBVSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEYsU0FBUztBQUNULFFBQVEsSUFBSSxTQUFTLEdBQUcsRUFBQztBQUN6QixRQUFRLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNqRixVQUFVLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUN0RSxVQUFVLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsU0FBUyxLQUFJO0FBQ2IsVUFBVSxTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxTQUFTO0FBQ1QsUUFBUSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUM7QUFDQSxRQUFRLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLFFBQVEsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDdkIsT0FBTyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDdkM7QUFDQSxRQUFRLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RCxRQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUUvRixLQUFJO0FBQ2I7QUFDQSxVQUFVLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RCxVQUFVLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkQ7QUFDQSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDMUUsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RixXQUFXO0FBQ1gsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDO0FBQ3REO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUNuQyxPQUFPLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3BELFFBQVEsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLHdCQUF3QixFQUFDO0FBQ3hGLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUN4QyxVQUFVLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakU7QUFDQSxVQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RTtBQUNBLFVBQVUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkcsU0FBUztBQUNULFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNyQixPQUFPLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3BELFFBQVEsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMvQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLE9BQU8sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDbEQsUUFBUSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRixRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRDtBQUNBLFFBQVEsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFFO0FBQ0E7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdEM7QUFDQTtBQUNBLFVBQVUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEcsU0FBUyxLQUFJO0FBQ2IsVUFBVSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlGLFVBQVUsR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDeEMsVUFBVSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDM0IsT0FBTyxLQUFLO0FBQ1osUUFBUSxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUNwQyxRQUFRLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbkMsUUFBUSxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ25ELFFBQVEsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUMzQztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO0FBQzNDLFVBQVUsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0QsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksV0FBVyxJQUFJLFFBQVEsRUFBRTtBQUNyQyxVQUFVLEdBQUcsV0FBVyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUM7QUFDNUM7QUFDQSxZQUFZLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckYsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUM7QUFDcEMsUUFBUSxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2pGLFVBQVUsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakQsVUFBVSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxRQUFRLEdBQUcsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDdEMsVUFBVSxLQUFLLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ25ELFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDdkUsVUFBVSxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDOUI7QUFDQSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoRixZQUFZLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ2xDLFdBQVc7QUFDWDtBQUNBLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEUsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUNsQyxXQUFXO0FBQ1g7QUFDQSxlQUFjO0FBQ2Q7QUFDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRixZQUFZLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFlBQVksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDM0MsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNLFNBQVMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRCxVQUFVLEdBQUcsT0FBTyxLQUFLLE1BQU0sSUFBSSxjQUFjLENBQUM7QUFDbEQsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUUsV0FBVztBQUNYLFVBQVUsR0FBRyxVQUFVLEVBQUU7QUFDekIsWUFBWSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRyxXQUFXO0FBQ1g7QUFDQSxVQUFVLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQsVUFBVSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDO0FBQ3RELFNBQVMsS0FBSTtBQUNiO0FBQ0EsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEYsWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUNuRCxjQUFjLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlELGNBQWMsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUMvQixhQUFhLEtBQUk7QUFDakIsY0FBYyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFhO0FBQ2I7QUFDQSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtBQUM5QyxjQUFjLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkQsWUFBWSxHQUFHLE9BQU8sS0FBSyxNQUFNLElBQUksY0FBYyxDQUFDO0FBQ3BELGNBQWMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hGLGFBQWE7QUFDYixZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUM7QUFDeEQsWUFBWSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELFdBQVc7QUFDWDtBQUNBLGVBQWM7QUFDZCxZQUFZLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELFlBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakQ7QUFDQSxZQUFZLEdBQUcsT0FBTyxLQUFLLE1BQU0sSUFBSSxjQUFjLENBQUM7QUFDcEQsY0FBYyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEYsYUFBYTtBQUNiLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQztBQUN4RCxZQUFZLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDcEMsV0FBVztBQUNYLFVBQVUsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN4QixVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDekIsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLLEtBQUk7QUFDVCxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN0QixFQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQztBQUNoRCxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBQztBQUNsRixFQUFFLEdBQUcsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUNuQixLQUFLLEdBQUcsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDO0FBQ3RDLElBQUksU0FBUyxDQUFDLE9BQU8sR0FBRyxPQUFNO0FBQzlCLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwQyxHQUFHLEtBQUk7QUFDUCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEMsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLE1BQU1BLHNCQUFvQixHQUFHLFNBQVMsR0FBRyxDQUFDO0FBQzFDO0FBQ0EsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO0FBQ2xDLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO0FBQy9DLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0RCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELEtBQUs7QUFDTCxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztBQUM1QyxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuRCxLQUFLO0FBQ0wsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQzlDLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRCxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLEdBQUc7QUFDSCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsRUFBQztBQUNELFNBQVMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO0FBQ3ZFLEVBQUUsSUFBSSxRQUFRLEVBQUU7QUFDaEIsSUFBSSxHQUFHLFVBQVUsS0FBSyxTQUFTLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFDO0FBQ3pGO0FBQ0EsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO0FBQzFDLE1BQU0sV0FBVyxDQUFDLE9BQU87QUFDekIsTUFBTSxLQUFLO0FBQ1gsTUFBTSxLQUFLO0FBQ1gsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLEtBQUs7QUFDN0UsTUFBTSxVQUFVLENBQUMsQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsS0FBSyxFQUFFO0FBQ2pELE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzRCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNILEVBQUUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQztBQUN2RCxFQUFFLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxjQUFjLENBQUM7QUFDNUMsRUFBRSxLQUFLLE1BQU0sWUFBWSxJQUFJLFNBQVMsRUFBRTtBQUN4QyxJQUFJLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxJQUFJLElBQUksV0FBVyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssV0FBVyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQzVFLEdBQUc7QUFDSCxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDOUQsRUFBRSxJQUFJLFlBQVksQ0FBQztBQUNuQixFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ3ZELElBQUksSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLElBQUksSUFBSSxZQUFZLEVBQUU7QUFDdEIsUUFBUSxJQUFJLEVBQUUsS0FBSyxZQUFZLEVBQUUsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUNuRCxLQUFLLE1BQU0sSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDekMsUUFBUSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzFCLEtBQUssTUFBTSxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDdEMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsVUFBVSxPQUFPO0FBQ2pCLFlBQVksSUFBSSxFQUFFLE1BQU07QUFDeEIsWUFBWSxLQUFLLEVBQUUsS0FBSztBQUN4QixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU8sS0FBSTtBQUNYLFFBQVEsT0FBTztBQUNmLFVBQVUsSUFBSSxFQUFFLE1BQU07QUFDdEIsVUFBVSxLQUFLLEVBQUUsS0FBSztBQUN0QixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDNUIsTUFBTSxFQUFFLEdBQUcsSUFBRztBQUNkLEtBQUs7QUFDTCxJQUFJLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDakIsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQ2xELEVBQUUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN6QixJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzNCLEdBQUcsS0FBSTtBQUNQLElBQUksT0FBTyxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDakUsRUFBRSxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNuRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTztBQUNyQixFQUFFLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDM0IsRUFBRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2xDLEVBQUUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUN2QixFQUFFLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixFQUFFLEdBQUcsY0FBYyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNCLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckUsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLGNBQWMsQ0FBQztBQUNwQixJQUFJLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsSUFBSSxHQUFHLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN6QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLGNBQWMsR0FBRyxPQUFPLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU87QUFDVCxJQUFJLE9BQU8sRUFBRSxPQUFPO0FBQ3BCLElBQUksTUFBTSxFQUFFLE1BQU07QUFDbEIsSUFBSSxVQUFVLEVBQUUsVUFBVTtBQUMxQixJQUFJLGNBQWMsRUFBRSxjQUFjO0FBQ2xDLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM5QyxFQUFFLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLEVBQUUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNoQyxVQUFVLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUMzRixVQUFVLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0RSxVQUFVLEdBQUcsWUFBWSxLQUFLLE9BQU8sQ0FBQztBQUN0QyxZQUFZLFlBQVksRUFBRSxDQUFDO0FBQzNCLFlBQVksSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLGNBQWMsT0FBTztBQUNyQixnQkFBZ0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUM1RCxnQkFBZ0IsQ0FBQyxHQUFHLFVBQVU7QUFDOUIsZUFBZTtBQUNmLGFBQWE7QUFDYixXQUFXO0FBQ1gsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZCLFNBQVMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3hDLFVBQVUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixFQUFDO0FBQzVGLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUN2QixTQUFTLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RELFVBQVUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixFQUFDO0FBQzdGLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUN2QixTQUFTLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3JELFVBQVUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEcsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZCLFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFDO0FBQ3JEO0FBQ0EsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUN2QixZQUFZLE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzNELFlBQVksSUFBSSxXQUFXLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQzVGLGNBQWMsWUFBWSxFQUFFLENBQUM7QUFDN0IsYUFBYTtBQUNiLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDakMsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1AsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9DLEVBQUUsSUFBSSxXQUFXLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzlDO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDOUIsSUFBSSxHQUFHLE1BQU0sS0FBSyxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFDdkMsU0FBUyxHQUFHLE1BQU0sS0FBSyxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDOUMsU0FBUyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkMsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0IsTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUNqQixLQUFLLE1BQU07QUFDWCxNQUFNLE9BQU8sRUFBRSxDQUFDO0FBQ2hCLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQSxJQUFBLGtCQUFjLEdBQUdELGtCQUFnQjs7OztBQ3prQmpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNFLFVBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQ2hDLEVBQUUsT0FBTyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUM7QUFDdEMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNYLEVBQUUsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsSUFBSSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsSUFBSSxNQUFNLFFBQVEsR0FBR0MsVUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLElBQUksR0FBRyxLQUFLLEtBQUssU0FBUyxFQUFFLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDaEQsU0FBUyxRQUFRLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFDM0M7QUFDQSxJQUFJLEdBQUcsUUFBUSxLQUFLLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFDekMsTUFBTSxHQUFHLElBQUksS0FBSyxTQUFTLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyRCxXQUFXLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLEtBQUssS0FBSyxHQUFHLFFBQVEsS0FBSyxTQUFTLENBQUM7QUFDcEMsTUFBTSxTQUFTO0FBQ2YsS0FBSyxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5RCxNQUFNLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0M7QUFDQSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEUsT0FBTyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO0FBQ3pILFFBQVEsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQzdDLFFBQVEsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEUsYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDMUYsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNwRCxZQUFZLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ2xFLFNBQVM7QUFDVCxRQUFRLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsT0FBTyxLQUFJO0FBQ1g7QUFDQTtBQUNBLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDMUQsVUFBVSxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxTQUFTLEtBQUk7QUFDYixVQUFVLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO0FBQzlCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNuRSxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssU0FBUyxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFFLEVBQUUsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUNEO0FBQ0EsU0FBU0EsVUFBUSxDQUFDLEdBQUcsQ0FBQztBQUN0QixFQUFFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLEdBQUcsR0FBRyxLQUFLLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNoQyxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUM7QUFDdkQsRUFBRSxJQUFJLE9BQU8sRUFBRTtBQUNmLElBQUksTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDNUIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDekUsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM5QyxPQUFPLE1BQU07QUFDYixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUMsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztBQUNoQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDbkMsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM1QztBQUNBLEVBQUUsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRTtBQUNGLElBQUksU0FBUyxLQUFLLENBQUM7QUFDbkIsS0FBSyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUYsSUFBSTtBQUNKLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCxTQUFBLENBQUEsUUFBZ0IsR0FBR0Q7O0FDaEhuQixNQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUc3RSxjQUEyQixDQUFDO0FBQ3BELE1BQU0sZ0JBQWdCLEdBQUdDLGtCQUE2QixDQUFDO0FBQ3ZELE1BQU0sRUFBRSxRQUFRLENBQUMsR0FBR0MsU0FBc0IsQ0FBQztBQUMzQyxNQUFNb0UsV0FBUyxHQUFHN0MsV0FBdUIsQ0FBQztBQUMxQztBQUNBLE1BQU1zRCxXQUFTO0FBQ2Y7QUFDQSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUNuQyxRQUFRLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQzlCLEtBQUssSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ25DLFlBQVksT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN6QyxTQUFTLEtBQUk7QUFDYixZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUM7QUFDOUUsU0FBUztBQUNULFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQztBQUM3QixZQUFZLEdBQUcsZ0JBQWdCLEtBQUssSUFBSSxFQUFFLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUNoRTtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUdULFdBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDekUsWUFBWSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDakMsY0FBYyxNQUFNLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDckYsYUFBYTtBQUNiLFdBQVc7QUFDWCxRQUFRLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEUsUUFBUSxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNwRSxRQUFRLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxPQUFPLGFBQWEsQ0FBQztBQUMzRixhQUFhLE9BQU8sUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7QUFDekIsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDckMsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDO0FBQzFELFNBQVMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwRSxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUM7QUFDbkcsU0FBUyxLQUFLLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUMvQixZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQUN6RSxTQUFTLEtBQUk7QUFDYixZQUFZLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDL0MsU0FBUztBQUNULEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxJQUFBLFdBQWMsR0FBR1MsV0FBUzs7QUN6RDFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDaEMsSUFBSSxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZELFFBQVEsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUMxQixLQUFLO0FBQ0wsSUFBSSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7QUFDcEQsSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEIsSUFBSSxJQUFJLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUNyQztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsUUFBUSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBUSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekMsUUFBUSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLFFBQVEsR0FBRyxRQUFPO0FBQ2xELGFBQWEsUUFBUSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQyxZQUFZLEVBQUU7QUFDOUMsWUFBWSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRTtBQUNoRCxnQkFBZ0IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEUsZ0JBQWdCLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakUsYUFBYTtBQUNiLFlBQVksSUFBSSxvQkFBb0IsRUFBRTtBQUN0QyxnQkFBZ0IsTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUN0QyxhQUFhO0FBQ2IsWUFBWSxNQUFNLElBQUksT0FBTyxDQUFDO0FBQzlCLFlBQVksb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLFlBQVksU0FBUztBQUNyQixTQUFTLE1BQU0sSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDLGFBQWEsRUFBRTtBQUN0RCxZQUFZLElBQUksb0JBQW9CLEVBQUU7QUFDdEMsZ0JBQWdCLE1BQU0sSUFBSSxXQUFXLENBQUM7QUFDdEMsYUFBYTtBQUNiLFlBQVksTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEYsWUFBWSxvQkFBb0IsR0FBRyxLQUFLLENBQUM7QUFDekMsWUFBWSxTQUFTO0FBQ3JCLFNBQVMsTUFBTSxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUMsZUFBZSxFQUFFO0FBQ3hELFlBQVksTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pGLFlBQVksb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFlBQVksU0FBUztBQUNyQixTQUFTLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3ZDLFlBQVksTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5RCxZQUFZLE1BQU0sT0FBTyxHQUFHLE9BQU8sS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQztBQUNsRSxZQUFZLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUUsWUFBWSxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDckYsWUFBWSxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRSxZQUFZLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUN4QyxZQUFZLFNBQVM7QUFDckIsU0FBUztBQUNULFFBQVEsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxhQUFhLEtBQUssRUFBRSxFQUFFO0FBQ2xDLFlBQVksYUFBYSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDOUMsU0FBUztBQUNULFFBQVEsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRCxRQUFRLE1BQU0sUUFBUSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzlELFFBQVEsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3JGLFFBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUMxRCxZQUFZLElBQUksT0FBTyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3ZFLGlCQUFpQixNQUFNLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUMzQyxTQUFTLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtBQUN0RixZQUFZLE1BQU0sSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFNBQVMsTUFBTSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZELFlBQVksTUFBTSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxTQUFTLE1BQU07QUFDZixZQUFZLE1BQU0sSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxRQUFRLElBQUksV0FBVyxLQUFLLEVBQUUsS0FBSyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUN4RyxnQkFBZ0IsTUFBTSxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDbEYsYUFBYSxNQUFNO0FBQ25CLGdCQUFnQixNQUFNLElBQUksUUFBUSxDQUFDO0FBQ25DLGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNULFFBQVEsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQ3ZCLElBQUksTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLElBQUksSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7QUFDOUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTtBQUNsQyxZQUFZLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0UsWUFBWSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdELFlBQVksSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRTtBQUN2RSxnQkFBZ0IsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlGLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNwQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO0FBQ3pDLFFBQVEsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDM0csS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQ2xELElBQUksSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRTtBQUN0RSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRCxZQUFZLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsWUFBWSxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRSxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUNELElBQUEsYUFBYyxHQUFHLEtBQUs7O0FDakl0QjtBQUNBLE1BQU0sa0JBQWtCLEdBQUcvRSxhQUEwQixDQUFDO0FBQ3REO0FBQ0EsTUFBTSxjQUFjLEdBQUc7QUFDdkIsRUFBRSxtQkFBbUIsRUFBRSxJQUFJO0FBQzNCLEVBQUUsbUJBQW1CLEVBQUUsS0FBSztBQUM1QixFQUFFLFlBQVksRUFBRSxPQUFPO0FBQ3ZCLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSTtBQUN4QixFQUFFLGFBQWEsRUFBRSxLQUFLO0FBQ3RCLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDZixFQUFFLFFBQVEsRUFBRSxJQUFJO0FBQ2hCLEVBQUUsaUJBQWlCLEVBQUUsS0FBSztBQUMxQixFQUFFLG9CQUFvQixFQUFFLElBQUk7QUFDNUIsRUFBRSx5QkFBeUIsRUFBRSxJQUFJO0FBQ2pDLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0gsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLFFBQVEsRUFBRSxDQUFDLEVBQUU7QUFDakQsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSCxFQUFFLGFBQWEsRUFBRSxLQUFLO0FBQ3RCLEVBQUUsZUFBZSxFQUFFLEtBQUs7QUFDeEIsRUFBRSxZQUFZLEVBQUUsRUFBRTtBQUNsQixFQUFFLFFBQVEsRUFBRTtBQUNaLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDakQsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUNoRCxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ2hELElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7QUFDbkQsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtBQUNuRCxHQUFHO0FBQ0gsRUFBRSxlQUFlLEVBQUUsSUFBSTtBQUN2QixFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ2Y7QUFDQTtBQUNBLEVBQUUsWUFBWSxFQUFFLEtBQUs7QUFDckIsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxTQUFTLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDMUIsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1RCxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFO0FBQ3pFLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxnQkFBZ0I7QUFDdkMsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLLENBQUM7QUFDTixHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7QUFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNuQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxxQkFBb0I7QUFDbEQ7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEIsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVc7QUFDaEMsTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUNoQixLQUFLLENBQUM7QUFDTixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDdEIsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsSUFBSSxFQUFFO0FBQ3pDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNoQyxJQUFJLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRCxHQUFHLEtBQUs7QUFDUixJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xHLE1BQU0sSUFBSSxHQUFHO0FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUk7QUFDM0MsUUFBTztBQUNQLEtBQUs7QUFDTCxJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2pDLEdBQUc7QUFDSCxDQUFDLENBQUM7QUFDRjtBQUNBLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUM5QyxFQUFFLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDeEIsSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUVyQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNuQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzFGLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUM1RTtBQUNBLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUU7QUFDMUMsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlELEtBQUssTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUM5QztBQUNBLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ2hCLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELE9BQU8sS0FBSztBQUNaO0FBQ0EsUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtBQUMvQyxVQUFVLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkQsU0FBUyxNQUFNO0FBQ2YsVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN6QztBQUNBLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0QyxNQUFNLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUVoQyxNQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUNsQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzlGLGVBQWUsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNoRjtBQUNBLFNBQVMsTUFBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUM3QyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7QUFDeEMsWUFBWSxVQUFVLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN4RCxXQUFXLEtBQUk7QUFDZixZQUFZLFVBQVUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUM7QUFDckUsV0FBVztBQUNYLFNBQVMsTUFBTTtBQUNmLFVBQVUsVUFBVSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRSxTQUFTO0FBQ1QsT0FBTztBQUNQLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUNuQyxRQUFRLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RFLE9BQU87QUFDUCxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUM7QUFDeEIsS0FBSyxNQUFNO0FBQ1g7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtBQUN4RixRQUFRLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxVQUFVLE9BQU8sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFDO0FBQy9ELE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUNGO0FBQ0EsT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLFFBQVEsRUFBRSxHQUFHLENBQUM7QUFDNUQsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFO0FBQ2hFLElBQUksT0FBTyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQzFCLEdBQUcsTUFBTSxPQUFPLEdBQUcsR0FBRyxRQUFRLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEQsRUFBQztBQUNEO0FBQ0EsU0FBUyxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUNuRCxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMzRixJQUFJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hHLEdBQUcsTUFBTTtBQUNULElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEUsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ3ZFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNsRyxTQUFTO0FBQ1QsTUFBTSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2hHLEtBQUs7QUFDTCxHQUFHLEtBQUk7QUFDUDtBQUNBLElBQUksSUFBSSxTQUFTLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2pELElBQUksSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDdkIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBQzFCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDNUMsTUFBTSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxPQUFPLEdBQUcsYUFBYSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHO0FBQ3RHLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDN0gsTUFBTSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDcEUsS0FBSyxLQUFLO0FBQ1YsTUFBTTtBQUNOLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVU7QUFDckYsUUFBUSxHQUFHO0FBQ1gsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsTUFBTTtBQUMvQyxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxDQUFDO0FBQzFDLEVBQUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbkQsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEdBQUcsSUFBRztBQUN6RCxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQzFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNuQixHQUFHLEtBQUk7QUFDUCxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBQztBQUMxQixHQUFHO0FBQ0gsRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixFQUFDO0FBYUQ7QUFDQSxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ3hFLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsS0FBSyxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO0FBQ2xGLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hFLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7QUFDNUYsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDbkUsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUMzQixJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMvRSxHQUFHLEtBQUk7QUFDUCxJQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRDtBQUNBLElBQUksSUFBSSxTQUFTLEtBQUssRUFBRSxDQUFDO0FBQ3pCLE1BQU0sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNoRyxLQUFLLEtBQUk7QUFDVCxNQUFNLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHO0FBQzlELFNBQVMsU0FBUztBQUNsQixRQUFRLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNyQyxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxTQUFTLENBQUM7QUFDNUQsRUFBRSxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUN2RSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlELEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUNuQixFQUFDO0FBQ0Q7QUFDQSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDMUIsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFdBQVcsQ0FBQyxJQUFJLGdCQUFnQjtBQUN6QyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7QUFDekQsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNDLEdBQUcsTUFBTTtBQUNULElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLElBQUEsUUFBYyxHQUFHLE9BQU87O0FDaFF4QixNQUFNLFNBQVMsR0FBR0EsV0FBc0IsQ0FBQztBQUN6QyxNQUFNK0UsV0FBUyxHQUFHOUUsV0FBZ0MsQ0FBQztBQUNuRCxNQUFNLFVBQVUsR0FBR0MsUUFBZ0MsQ0FBQztBQUNwRDtBQUNBLElBQUEsR0FBYyxHQUFHO0FBQ2pCLEVBQUUsU0FBUyxFQUFFNkUsV0FBUztBQUN0QixFQUFFLFlBQVksRUFBRSxTQUFTO0FBQ3pCLEVBQUUsVUFBVSxFQUFFLFVBQVU7QUFDeEI7O0FDVEEsTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRy9FLEdBQTBCLENBQUM7QUFDN0Q7QUFDQSxNQUFNLEtBQUssR0FBRyxLQUFLLElBQUk7QUFDdkIsQ0FBQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtBQUM1QyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTtBQUM1QyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUNoQixDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEM7QUFDQSxDQUFDLElBQUk7QUFDTCxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNiLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixFQUFFO0FBQ0Y7QUFDQSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDbEIsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRTtBQUM3QixFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxPQUFPLElBQUksQ0FBQztBQUNiLENBQUMsQ0FBQztBQUNGO0FBQ0FnRixPQUFjLENBQUEsT0FBQSxHQUFHLEtBQUssQ0FBQztBQUN2QjtBQUNBQSxPQUFBLENBQUEsT0FBQSxDQUFBLE9BQXNCLEdBQUcsTUFBSzs7Ozs7QUN2QzlCLElBQUksZ0JBQWdCLEdBQUcscUJBQXFCLENBQUM7QUFDN0M7SUFDQUMsb0JBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUNoQyxDQUFDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzlCLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzNDLEVBQUU7QUFDRjtBQUNBLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLENBQUM7O0FDVEQsSUFBSUEsb0JBQWtCLEdBQUdqRixvQkFBK0IsQ0FBQztBQUN6RDtBQUNBLElBQUEsWUFBYyxHQUFHLFVBQVUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUN4QyxDQUFDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtBQUM1RCxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMzQyxFQUFFO0FBQ0Y7QUFDQSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUdpRixvQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0YsQ0FBQyxDQUFBOzs7Ozs7QUNSRDtBQUNBO0FBQ0FDLHVCQUFBLENBQUEsT0FBYyxHQUFHLE9BQU8seUJBQXlCLENBQUMsQ0FBQztBQUN4QkEsdUJBQUEsQ0FBQSxPQUFBLENBQUEsWUFBQSxHQUFHLE9BQU8sd0NBQXdDLEVBQUM7Ozs7O0FDSDlFLElBQUksa0JBQWtCLEdBQUdsRixvQkFBK0IsQ0FBQztBQUN6RDtBQUNBLElBQUEsVUFBYyxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxDQUFDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUN6RCxFQUFFLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUN4QixFQUFFO0FBQ0Y7QUFDQSxDQUFDLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQTs7OztBQ05EO0FBQ0EsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEM7QUFDQSxNQUFNLGNBQWMsR0FBRywrQkFBK0IsQ0FBQztBQUN2RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFDOUIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFDakM7QUFDZSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRTtBQUN6RCxDQUFDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO0FBQ2pDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzNDLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbkY7QUFDQSxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUNwRixFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztBQUNwRixFQUFFO0FBQ0Y7QUFDQSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEQsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEQsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRDtBQUNBLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM3QixFQUFFLE1BQU0sR0FBR21GLGNBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDN0MsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUdDLFlBQVUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hFLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUM1RixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEtBQUssUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztBQUMzRztBQUNBLENBQUMsT0FBTyxNQUFNLENBQUM7QUFDZjs7QUNwQ08sTUFBTSxTQUFTLEdBQUcsMkJBQTJCLENBQUM7QUFJOUMsTUFBTSxZQUFZLEdBQUcsRUFBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyw4QkFBOEIsRUFBQyxDQUFDO0FBRTNFLE1BQU0sVUFBVSxHQUN2QiwySEFBMkgsQ0FBQztBQUVySCxNQUFNLGlCQUFpQixHQUM5Qjs7SUFFQSwyR0FBMkc7O0lBRTNHLG9HQUFvRzs7SUFFcEcsOEdBQThHO0lBQzlHLHVGQUF1RjtDQUN0RixDQUFBO0FBR00sTUFBTSxPQUFPLEdBQ3BCLDhCQUE4QixDQUFDO0FBTS9CO0FBQ08sTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsRCxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQztBQXdCbEQsTUFBTSxnQkFBZ0IsR0FBYztBQUN6QyxJQUFBLGNBQWMsRUFBRSxJQUFJO0FBQ3BCLElBQUEsVUFBVSxFQUFFLGtCQUFrQjtBQUM5QixJQUFBLFVBQVUsRUFBRSxJQUFJO0FBQ2hCLElBQUEsV0FBVyxFQUFFLElBQUk7QUFDakIsSUFBQSxVQUFVLEVBQUUsYUFBYTtBQUN6QixJQUFBLFdBQVcsRUFBRSxLQUFLO0FBQ2xCLElBQUEsUUFBUSxFQUFFLFdBQVc7QUFDckIsSUFBQSxjQUFjLEVBQUUsSUFBSTtBQUNwQixJQUFBLGFBQWEsRUFBRSxDQUFDO0FBQ2hCLElBQUEsUUFBUSxFQUFFLENBQUM7QUFDWCxJQUFBLHNCQUFzQixFQUFFLENBQUM7QUFDekIsSUFBQSxhQUFhLEVBQUUsSUFBSTtBQUNuQixJQUFBLGlCQUFpQixFQUFFLElBQUk7QUFDdkIsSUFBQSxPQUFPLEVBQUUsU0FBUztBQUNsQixJQUFBLFlBQVksRUFBRSx3QkFBd0I7QUFDdEMsSUFBQSxTQUFTLEVBQUUsS0FBSztBQUNoQixJQUFBLGVBQWUsRUFBRSxJQUFJO0FBQ3JCLElBQUEsaUJBQWlCLEVBQUUsSUFBSTtBQUN2QixJQUFBLGtCQUFrQixFQUFFLEtBQUs7Q0FDMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNFQSxDQUFDLFVBQVUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUMzQixHQUFrQztBQUNsQztBQUNBLElBQUUsTUFBaUIsQ0FBQSxPQUFBLEdBQVUsT0FBTyxFQUFFLENBQUM7SUFTckM7R0FDRCxDQUFDQyxjQUFJLEVBQUUsWUFBWTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7R0FDQyxJQUFJLFFBQVEsR0FBRyxRQUFRLEtBQUssVUFBVSxJQUFJLEVBQUVDLFdBQVMsRUFBRTtBQUN4RDtPQUNLLElBQUksTUFBTSxDQUFDO0FBQ2hCO0FBQ0E7T0FDSyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ3pELFdBQVMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDMUI7QUFDTjtBQUNBO09BQ0ssSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyRCxXQUFTLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hCO0FBQ047QUFDQTtPQUNLLElBQUksT0FBTyxVQUFVLEtBQUssV0FBVyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDakUsV0FBUyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUM5QjtBQUNOO0FBQ0E7QUFDQSxPQUFLLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7QUFDdEUsV0FBUyxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUM1QjtBQUNOO0FBQ0E7QUFDQSxPQUFLLElBQUksQ0FBQyxNQUFNLElBQUksT0FBT0MsY0FBTSxLQUFLLFdBQVcsSUFBSUEsY0FBTSxDQUFDLE1BQU0sRUFBRTtBQUNwRSxXQUFTLE1BQU0sR0FBR0EsY0FBTSxDQUFDLE1BQU0sQ0FBQztRQUMxQjtBQUNOO0FBQ0E7T0FDSyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU9DLGVBQU8sS0FBSyxVQUFVLEVBQUU7QUFDbkQsV0FBUyxJQUFJO2VBQ0EsTUFBTSxHQUFHLFVBQWlCLENBQUM7QUFDeEMsWUFBVSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUU7UUFDbkI7QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7T0FDSyxJQUFJLHFCQUFxQixHQUFHLFlBQVk7V0FDcEMsSUFBSSxNQUFNLEVBQUU7QUFDckI7QUFDQSxlQUFhLElBQUksT0FBTyxNQUFNLENBQUMsZUFBZSxLQUFLLFVBQVUsRUFBRTtBQUMvRCxtQkFBaUIsSUFBSTtBQUNyQix1QkFBcUIsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsb0JBQWtCLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFBRTtnQkFDbkI7QUFDZDtBQUNBO0FBQ0EsZUFBYSxJQUFJLE9BQU8sTUFBTSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7QUFDM0QsbUJBQWlCLElBQUk7dUJBQ0EsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2hFLG9CQUFrQixDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUU7Z0JBQ25CO1lBQ0o7QUFDVjtBQUNBLFdBQVMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0FBQ2hHLFFBQU0sQ0FBQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFLLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssWUFBWTtXQUN2QyxTQUFTLENBQUMsR0FBRyxFQUFFO0FBQ3hCO1dBQ1MsT0FBTyxVQUFVLEdBQUcsRUFBRTtlQUNsQixJQUFJLE9BQU8sQ0FBQztBQUN6QjtBQUNBLGVBQWEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxlQUFhLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQy9CO0FBQ0EsZUFBYSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNoQztlQUNhLE9BQU8sT0FBTyxDQUFDO0FBQzVCLFlBQVUsQ0FBQztRQUNMLEVBQUUsQ0FBQyxDQUFDO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtPQUNLLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLFlBQVk7QUFDMUM7QUFDQTtBQUNBLFdBQVMsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFhLE1BQU0sRUFBRSxVQUFVLFNBQVMsRUFBRTtBQUMxQztBQUNBLG1CQUFpQixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUM7QUFDQTttQkFDaUIsSUFBSSxTQUFTLEVBQUU7QUFDaEMsdUJBQXFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzVCO0FBQ2xCO0FBQ0E7QUFDQSxtQkFBaUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3BGLHVCQUFxQixPQUFPLENBQUMsSUFBSSxHQUFHLFlBQVk7QUFDaEQsMkJBQXlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDcEUsd0JBQXNCLENBQUM7b0JBQ0w7QUFDbEI7QUFDQTtBQUNBLG1CQUFpQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDbEQ7QUFDQTtBQUNBLG1CQUFpQixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN2QzttQkFDaUIsT0FBTyxPQUFPLENBQUM7Z0JBQ2xCO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7ZUFDYSxNQUFNLEVBQUUsWUFBWTtBQUNqQyxtQkFBaUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO21CQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQ7bUJBQ2lCLE9BQU8sUUFBUSxDQUFDO2dCQUNuQjtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO2VBQ2EsSUFBSSxFQUFFLFlBQVk7Z0JBQ2pCO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBYSxLQUFLLEVBQUUsVUFBVSxVQUFVLEVBQUU7QUFDMUMsbUJBQWlCLEtBQUssSUFBSSxZQUFZLElBQUksVUFBVSxFQUFFO0FBQ3RELHVCQUFxQixJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUU7MkJBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ2pEO29CQUNKO0FBQ2xCO0FBQ0E7QUFDQSxtQkFBaUIsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQzVELHVCQUFxQixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7b0JBQ3ZDO2dCQUNKO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7ZUFDYSxLQUFLLEVBQUUsWUFBWTttQkFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0M7QUFDZCxZQUFVLENBQUM7UUFDTCxFQUFFLENBQUMsQ0FBQztBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO09BQ0ssSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVMsSUFBSSxFQUFFLFVBQVUsS0FBSyxFQUFFLFFBQVEsRUFBRTtlQUM3QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0FBQzlDO0FBQ0EsZUFBYSxJQUFJLFFBQVEsSUFBSUYsV0FBUyxFQUFFO0FBQ3hDLG1CQUFpQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUMxQyxnQkFBYyxNQUFNO21CQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3BDO1lBQ0o7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBUyxRQUFRLEVBQUUsVUFBVSxPQUFPLEVBQUU7ZUFDekIsT0FBTyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBUyxNQUFNLEVBQUUsVUFBVSxTQUFTLEVBQUU7QUFDdEM7QUFDQSxlQUFhLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDeEMsZUFBYSxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQzdDLGVBQWEsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM5QyxlQUFhLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbkQ7QUFDQTtBQUNBLGVBQWEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxlQUFhLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtBQUNuQztBQUNBLG1CQUFpQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO3VCQUNuQyxJQUFJLFFBQVEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7dUJBQ2xFLFNBQVMsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksUUFBUSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzFGO0FBQ2xCLGdCQUFjLE1BQU07QUFDcEI7QUFDQSxtQkFBaUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNELHVCQUFxQixTQUFTLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzVEO2dCQUNKO0FBQ2QsZUFBYSxJQUFJLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQztBQUMzQztBQUNBO2VBQ2EsT0FBTyxJQUFJLENBQUM7WUFDZjtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7V0FDUyxLQUFLLEVBQUUsWUFBWTtBQUM1QjtBQUNBLGVBQWEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQyxlQUFhLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDMUM7QUFDQTtBQUNBLGVBQWEsS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxVQUFVLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RSxlQUFhLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUM7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtXQUNTLEtBQUssRUFBRSxZQUFZO2VBQ2YsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsZUFBYSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO2VBQ2EsT0FBTyxLQUFLLENBQUM7WUFDaEI7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBUyxNQUFNLEVBQUUsVUFBVSxNQUFNLEVBQUU7QUFDbkMsZUFBYSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDNUI7QUFDQSxlQUFhLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqRCxtQkFBaUIsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDO0FBQ2Q7ZUFDYSxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUM7QUFDVixRQUFNLENBQUMsQ0FBQztBQUNSO0FBQ0E7QUFDQTtBQUNBO09BQ0ssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFLLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTLFNBQVMsRUFBRSxVQUFVLFNBQVMsRUFBRTtBQUN6QztBQUNBLGVBQWEsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUN6QyxlQUFhLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDL0M7QUFDQTtBQUNBLGVBQWEsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQy9CLGVBQWEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTttQkFDL0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzNFLG1CQUFpQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRCxtQkFBaUIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDO0FBQ2Q7QUFDQSxlQUFhLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QjtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTLEtBQUssRUFBRSxVQUFVLE1BQU0sRUFBRTtBQUNsQztBQUNBLGVBQWEsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztBQUNBO0FBQ0EsZUFBYSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDNUIsZUFBYSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdkQsbUJBQWlCLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzdFO0FBQ2Q7QUFDQSxlQUFhLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEQ7QUFDVixRQUFNLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVMsU0FBUyxFQUFFLFVBQVUsU0FBUyxFQUFFO0FBQ3pDO0FBQ0EsZUFBYSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQ3pDLGVBQWEsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUMvQztBQUNBO0FBQ0EsZUFBYSxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDbEMsZUFBYSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO21CQUMvQixJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7bUJBQzFELFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMvQztBQUNkO0FBQ0EsZUFBYSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0I7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBUyxLQUFLLEVBQUUsVUFBVSxTQUFTLEVBQUU7QUFDckM7QUFDQSxlQUFhLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDcEQ7QUFDQTtBQUNBLGVBQWEsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzVCLGVBQWEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRTttQkFDdEMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzVFO0FBQ2Q7ZUFDYSxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDckQ7QUFDVixRQUFNLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVMsU0FBUyxFQUFFLFVBQVUsU0FBUyxFQUFFO0FBQ3pDLGVBQWEsSUFBSTtBQUNqQixtQkFBaUIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDekIsbUJBQWlCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDM0M7WUFDSjtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTLEtBQUssRUFBRSxVQUFVLE9BQU8sRUFBRTtBQUNuQyxlQUFhLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlEO0FBQ1YsUUFBTSxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtPQUNLLElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7V0FDUyxLQUFLLEVBQUUsWUFBWTtBQUM1QjtlQUNhLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0MsZUFBYSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUN4QjtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRTtBQUNsQztBQUNBLGVBQWEsSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLEVBQUU7bUJBQ3pCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQjtBQUNkO0FBQ0E7ZUFDYSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxlQUFhLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNyQztBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVMsUUFBUSxFQUFFLFVBQVUsT0FBTyxFQUFFO2VBQ3pCLElBQUksY0FBYyxDQUFDO0FBQ2hDO0FBQ0E7QUFDQSxlQUFhLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbkMsZUFBYSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hDLGVBQWEsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM5QyxlQUFhLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDNUMsZUFBYSxJQUFJLGNBQWMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxlQUFhLElBQUksWUFBWSxHQUFHLFlBQVksR0FBRyxjQUFjLENBQUM7ZUFDakQsSUFBSSxPQUFPLEVBQUU7QUFDMUI7bUJBQ2lCLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hELGdCQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLG1CQUFpQixZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDeEU7QUFDZDtBQUNBO0FBQ0EsZUFBYSxJQUFJLFdBQVcsR0FBRyxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQ3hEO0FBQ0E7QUFDQSxlQUFhLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN2RTtBQUNBO2VBQ2EsSUFBSSxXQUFXLEVBQUU7QUFDOUIsbUJBQWlCLEtBQUssSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxXQUFXLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRTtBQUNqRjt1QkFDcUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzNDO0FBQ2xCO0FBQ0E7bUJBQ2lCLGNBQWMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNuRSxtQkFBaUIsSUFBSSxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUM7Z0JBQ2hDO0FBQ2Q7QUFDQTtlQUNhLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMxRDtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO1dBQ1MsS0FBSyxFQUFFLFlBQVk7ZUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztlQUNsQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDOUM7ZUFDYSxPQUFPLEtBQUssQ0FBQztZQUNoQjtBQUNWO1dBQ1MsY0FBYyxFQUFFLENBQUM7QUFDMUIsUUFBTSxDQUFDLENBQUM7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7T0FDa0IsS0FBSyxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsV0FBUyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVMsSUFBSSxFQUFFLFVBQVUsR0FBRyxFQUFFO0FBQzlCO0FBQ0EsZUFBYSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDO0FBQ0E7QUFDQSxlQUFhLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQjtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7V0FDUyxLQUFLLEVBQUUsWUFBWTtBQUM1QjtlQUNhLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQ7QUFDQTtBQUNBLGVBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTLE1BQU0sRUFBRSxVQUFVLGFBQWEsRUFBRTtBQUMxQztBQUNBLGVBQWEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsZUFBYSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDN0I7QUFDQTtlQUNhLE9BQU8sSUFBSSxDQUFDO1lBQ2Y7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTLFFBQVEsRUFBRSxVQUFVLGFBQWEsRUFBRTtBQUM1QztlQUNhLElBQUksYUFBYSxFQUFFO0FBQ2hDLG1CQUFpQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMvQjtBQUNkO0FBQ0E7QUFDQSxlQUFhLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQztlQUNhLE9BQU8sSUFBSSxDQUFDO1lBQ2Y7QUFDVjtBQUNBLFdBQVMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTLGFBQWEsRUFBRSxVQUFVLE1BQU0sRUFBRTtBQUMxQyxlQUFhLE9BQU8sVUFBVSxPQUFPLEVBQUUsR0FBRyxFQUFFO0FBQzVDLG1CQUFpQixPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0QsZ0JBQWMsQ0FBQztZQUNMO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVMsaUJBQWlCLEVBQUUsVUFBVSxNQUFNLEVBQUU7QUFDOUMsZUFBYSxPQUFPLFVBQVUsT0FBTyxFQUFFLEdBQUcsRUFBRTtBQUM1QyxtQkFBaUIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUUsZ0JBQWMsQ0FBQztZQUNMO0FBQ1YsUUFBTSxFQUFFO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7T0FDSyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM5QjtPQUNLLE9BQU8sQ0FBQyxDQUFDO0FBQ2QsSUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDVjtBQUNBO0dBQ0MsT0FBTyxRQUFRLENBQUM7QUFDakI7QUFDQSxHQUFDLENBQUMsRUFBQTs7Ozs7Ozs7QUN0eUJELENBQUMsVUFBVSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzNCLEVBQWtDO0FBQ2xDO0FBQ0EsR0FBRSxpQkFBMkIsT0FBTyxDQUFDdEYsV0FBQSxFQUFpQixDQUFDLENBQUM7R0FTdEQ7QUFDRixFQUFDLENBQUNxRixjQUFJLEVBQUUsVUFBVSxRQUFRLEVBQUU7QUFDNUI7RUFDQyxDQUFDLFVBQVUsSUFBSSxFQUFFO0FBQ2xCO0FBQ0EsTUFBSyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDdEIsTUFBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3ZCLE1BQUssSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNyQyxNQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDL0IsTUFBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxNQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtBQUNBO0FBQ0EsTUFBSyxDQUFDLFlBQVk7QUFDbEIsVUFBUyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO2NBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDO1dBQ3hEO0FBQ1YsT0FBTSxFQUFFLEVBQUU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtNQUNLLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztVQUNqQyxRQUFRLEVBQUUsWUFBWTtjQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztrQkFDNUIsVUFBVSxFQUFFLFVBQVU7a0JBQ3RCLFVBQVUsRUFBRSxVQUFVO0FBQ3ZDLGVBQWMsQ0FBQyxDQUFDO1dBQ047QUFDVjtBQUNBLFVBQVMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtBQUMvQztBQUNBLGNBQWEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQztBQUNBLGtCQUFpQixJQUFJLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLGtCQUFpQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUM7a0JBQ2lCLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDNUIsc0JBQXFCLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sVUFBVSxLQUFLLEVBQUUsQ0FBQyxJQUFJLFVBQVU7QUFDN0UsdUJBQXNCLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUM7QUFDOUUsbUJBQWtCLENBQUM7ZUFDTDtBQUNkO0FBQ0E7Y0FDYSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN0QztjQUNhLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDaEMsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztjQUNoQyxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ2hDLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDaEMsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztjQUNoQyxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ2hDLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDaEMsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztjQUNoQyxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ2hDLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDaEMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztjQUNqQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2NBQ2pDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7Y0FDakMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztjQUNqQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2NBQ2pDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDOUM7QUFDQTtBQUNBLGNBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLGNBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLGNBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLGNBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0E7Y0FDYSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQzFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDMUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUMxQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQzFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDMUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUMxQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQzFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDMUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUMxQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQzFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hEO2NBQ2EsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RDtjQUNhLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQ7Y0FDYSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0E7QUFDQSxjQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLGNBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENB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QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDcEMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlDO2NBQ2EsT0FBTyxLQUFLLENBQUM7V0FDaEI7QUFDVixPQUFNLENBQUMsQ0FBQztBQUNSO0FBQ0EsTUFBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7VUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsVUFBUyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDNUM7QUFDTjtBQUNBLE1BQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1VBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELFVBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVDO0FBQ047QUFDQSxNQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QyxVQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsSUFB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S0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUU7Z0JBQzNCLFFBQVEsQ0FBVSxDQUFDLENBQUE7Z0JBQ25CLFFBQVEsQ0FBTSxDQUFDLENBQUE7QUFFZixnQkFBQSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLElBQUksR0FBRyxDQUFDLENBQUEsRUFBQSxHQUFBLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBSSxJQUFBLElBQUEsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEUsZ0JBQUEsT0FBTyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSTtBQUMxRCxxQkFBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdkMsd0JBQUEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDdkMsb0JBQUEsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEMsZ0JBQUEsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxnQkFBQSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFM0MsUUFBUSxDQUdt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
|