@luminocity/lemonate-gateway 7.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +20 -0
- package/dist/index.d.ts +4368 -0
- package/dist/lumino-client-api.cjs.js +11 -0
- package/dist/lumino-client-api.cjs.js.map +1 -0
- package/dist/lumino-client-api.esm.js +11 -0
- package/dist/lumino-client-api.esm.js.map +1 -0
- package/dist/lumino-client-api.umd.js +11 -0
- package/dist/lumino-client-api.umd.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lumino-client-api.esm.js","sources":["../src/EventEmitter.ts","../src/EventBus.ts","../src/ProxyEvent.ts","../src/Tools.ts","../src/Proxifier.ts","../src/Profiler.ts","../src/Exception.ts","../src/types/types.ts","../src/datatypes/Datatypes.ts","../node_modules/moment/moment.js","../src/repo/ApiGateway.ts","../src/repo/ItemCache.ts","../src/repo/LinkableItemsCache.ts","../src/repo/Snapshot.ts","../src/repo/Snapshotable.ts","../src/repo/Connection.ts","../src/repo/ScriptField.ts","../src/repo/Script.ts","../src/repo/Field.ts","../src/repo/PreparedItem.ts","../src/Permissions.ts","../src/repo/Template.ts","../src/ItemPreparator.ts","../src/repo/Block.ts","../node_modules/pako/dist/pako.esm.mjs","../src/Package.ts","../src/UndoManager.ts","../src/ItemChangeProcessor.ts","../src/ItemRepo.ts","../node_modules/localforage/dist/localforage.js","../src/storage/StorageIndexedDb.ts","../src/storage/StorageOpfs.ts","../src/storage/Storage.ts","../node_modules/lodash/isObject.js","../node_modules/lodash/_root.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/debounce.js","../node_modules/lodash/now.js","../node_modules/lodash/toNumber.js","../src/storage/ItemCache.ts","../src/storage/FolderCache.ts","../src/storage/ThumbCache.ts","../src/UserCache.ts","../src/GroupCache.ts","../src/AttachmentCache.ts","../src/Publisher.ts","../src/JobManager.ts","../src/AssetCreator.ts","../src/Serializer.ts","../src/Array.ts","../node_modules/lib0/map.js","../node_modules/lib0/set.js","../node_modules/lib0/array.js","../node_modules/lib0/observable.js","../node_modules/lib0/math.js","../node_modules/lib0/binary.js","../node_modules/lib0/number.js","../node_modules/lib0/string.js","../node_modules/lib0/encoding.js","../node_modules/lib0/error.js","../node_modules/lib0/decoding.js","../node_modules/lib0/webcrypto.js","../node_modules/lib0/random.js","../node_modules/lib0/time.js","../node_modules/lib0/promise.js","../node_modules/lib0/conditions.js","../node_modules/lib0/storage.js","../node_modules/lib0/object.js","../node_modules/lib0/traits.js","../node_modules/lib0/function.js","../node_modules/lib0/environment.js","../node_modules/lib0/buffer.js","../node_modules/lib0/pair.js","../node_modules/lib0/dom.js","../node_modules/lib0/symbol.js","../node_modules/lib0/logging.common.js","../node_modules/lib0/logging.js","../node_modules/lib0/iterator.js","../node_modules/yjs/dist/yjs.mjs","../node_modules/lib0/broadcastchannel.js","../node_modules/y-protocols/sync.js","../node_modules/y-protocols/awareness.js","../node_modules/y-websocket/src/y-websocket.js","../node_modules/y-protocols/auth.js","../node_modules/lib0/url.js","../src/collabstate/CollabDocument.ts","../src/Collab.ts","../src/ApiClient.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,"//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,"\n/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED$1 = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN$1 = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1 = 3;\nconst MAX_MATCH$1 = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1 = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1 = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1 = 30;\n/* number of distance codes */\n\nconst BL_CODES$1 = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1 = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1 = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Tracev((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Tracev((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) => {\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n\n const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS$1; bits++) {\n code = (code + bl_count[bits - 1]) << 1;\n next_code[bits] = code;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n let len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n};\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nconst tr_static_init = () => {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS$1 + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES$1; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES$1; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.sym_next = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) => {\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let sx = 0; /* running index in sym_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.sym_next !== 0) {\n do {\n dist = s.pending_buf[s.sym_buf + sx++] & 0xff;\n dist += (s.pending_buf[s.sym_buf + sx++] & 0xff) << 8;\n lc = s.pending_buf[s.sym_buf + sx++];\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and sym_buf is ok: */\n //Assert(s->pending < s->lit_bufsize + sx, \"pendingBuf overflow\");\n\n } while (sx < s.sym_next);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE$1;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) => {\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"block list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"allow list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* block_mask is the bit mask of block-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let block_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"block-listed\") bytes. */\n for (n = 0; n <= 31; n++, block_mask >>>= 1) {\n if ((block_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"allow-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS$1; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"block-listed\" or \"allow-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n bi_windup(s); /* align on byte boundary */\n put_short(s, stored_len);\n put_short(s, ~stored_len);\n if (stored_len) {\n s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n }\n s.pending += stored_len;\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and write out the encoded block.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN$1) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->sym_next / 3));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block$1(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) => {\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n\n s.pending_buf[s.sym_buf + s.sym_next++] = dist;\n s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n s.pending_buf[s.sym_buf + s.sym_next++] = lc;\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n return (s.sym_next === s.sym_end);\n};\n\nvar _tr_init_1 = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1 = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,\n Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n Z_UNKNOWN,\n Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42; /* zlib header -> BUSY_STATE */\n//#ifdef GZIP\nconst GZIP_STATE = 57; /* gzip header -> BUSY_STATE | EXTRA_STATE */\n//#endif\nconst EXTRA_STATE = 69; /* gzip extra block -> NAME_STATE */\nconst NAME_STATE = 73; /* gzip file name -> COMMENT_STATE */\nconst COMMENT_STATE = 91; /* gzip comment -> HCRC_STATE */\nconst HCRC_STATE = 103; /* gzip header CRC -> BUSY_STATE */\nconst BUSY_STATE = 113; /* deflate -> FINISH_STATE */\nconst FINISH_STATE = 666; /* stream complete */\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = messages[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) * 2) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n/* ===========================================================================\n * Slide the hash table when sliding the window down (could be avoided with 32\n * bit values at the expense of memory usage). We slide even when level == 0 to\n * keep the hash table consistent if we switch back to level > 0 later.\n */\nconst slide_hash = (s) => {\n let n, m;\n let p;\n let wsize = s.w_size;\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= wsize ? m - wsize : 0);\n } while (--n);\n n = wsize;\n//#ifndef FASTEST\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= wsize ? m - wsize : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n//#endif\n};\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output, except for\n * some deflate_stored() output, goes through this function so some\n * applications may wish to modify it to avoid allocating a large\n * strm->next_out buffer and copying into it. (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32_1(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32_1(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let n, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n slide_hash(s);\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n *\n * In case deflateParams() is used to later switch to a non-zero compression\n * level, s->matches (otherwise unused when storing) keeps track of the number\n * of hash table slides to perform. If s->matches is 1, then one hash table\n * slide will be done when switching. If s->matches is 2, the maximum value\n * allowed here, then the hash table will be cleared, since two or more slides\n * is the same as a clear.\n *\n * deflate_stored() is written to minimize the number of times an input byte is\n * copied. It is most efficient with large input and output buffers, which\n * maximizes the opportunites to have a single copy from next_in to next_out.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Smallest worthy block size when not flushing or finishing. By default\n * this is 32K. This can be as small as 507 bytes for memLevel == 1. For\n * large input and output buffers, the stored block size will be larger.\n */\n let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\n /* Copy as many min_block or larger stored blocks directly to next_out as\n * possible. If flushing, copy the remaining available input to next_out as\n * stored blocks, if there is enough space.\n */\n let len, left, have, last = 0;\n let used = s.strm.avail_in;\n do {\n /* Set len to the maximum size block that we can copy directly with the\n * available input data and output space. Set left to how much of that\n * would be copied from what's left in the window.\n */\n len = 65535/* MAX_STORED */; /* maximum deflate stored block length */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n if (s.strm.avail_out < have) { /* need room for header */\n break;\n }\n /* maximum stored block length that will fit in avail_out: */\n have = s.strm.avail_out - have;\n left = s.strstart - s.block_start; /* bytes left in window */\n if (len > left + s.strm.avail_in) {\n len = left + s.strm.avail_in; /* limit len to the input */\n }\n if (len > have) {\n len = have; /* limit len to the output */\n }\n\n /* If the stored block would be less than min_block in length, or if\n * unable to copy all of the available input when flushing, then try\n * copying to the window and the pending buffer instead. Also don't\n * write an empty block when flushing -- deflate() does that.\n */\n if (len < min_block && ((len === 0 && flush !== Z_FINISH$3) ||\n flush === Z_NO_FLUSH$2 ||\n len !== left + s.strm.avail_in)) {\n break;\n }\n\n /* Make a dummy stored block in pending to get the header bytes,\n * including any pending bits. This also updates the debugging counts.\n */\n last = flush === Z_FINISH$3 && len === left + s.strm.avail_in ? 1 : 0;\n _tr_stored_block(s, 0, 0, last);\n\n /* Replace the lengths in the dummy stored block with len. */\n s.pending_buf[s.pending - 4] = len;\n s.pending_buf[s.pending - 3] = len >> 8;\n s.pending_buf[s.pending - 2] = ~len;\n s.pending_buf[s.pending - 1] = ~len >> 8;\n\n /* Write the stored block header bytes. */\n flush_pending(s.strm);\n\n//#ifdef ZLIB_DEBUG\n// /* Update debugging counts for the data about to be copied. */\n// s->compressed_len += len << 3;\n// s->bits_sent += len << 3;\n//#endif\n\n /* Copy uncompressed bytes from the window to next_out. */\n if (left) {\n if (left > len) {\n left = len;\n }\n //zmemcpy(s->strm->next_out, s->window + s->block_start, left);\n s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n s.strm.next_out += left;\n s.strm.avail_out -= left;\n s.strm.total_out += left;\n s.block_start += left;\n len -= left;\n }\n\n /* Copy uncompressed bytes directly from next_in to next_out, updating\n * the check value.\n */\n if (len) {\n read_buf(s.strm, s.strm.output, s.strm.next_out, len);\n s.strm.next_out += len;\n s.strm.avail_out -= len;\n s.strm.total_out += len;\n }\n } while (last === 0);\n\n /* Update the sliding window with the last s->w_size bytes of the copied\n * data, or append all of the copied data to the existing window if less\n * than s->w_size bytes were copied. Also update the number of bytes to\n * insert in the hash tables, in the event that deflateParams() switches to\n * a non-zero compression level.\n */\n used -= s.strm.avail_in; /* number of input bytes directly copied */\n if (used) {\n /* If any input was used, then no unused input remains in the window,\n * therefore s->block_start == s->strstart.\n */\n if (used >= s.w_size) { /* supplant the previous history */\n s.matches = 2; /* clear hash */\n //zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);\n s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n s.strstart = s.w_size;\n s.insert = s.strstart;\n }\n else {\n if (s.window_size - s.strstart <= used) {\n /* Slide the window down. */\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n //zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);\n s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n s.strstart += used;\n s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n }\n s.block_start = s.strstart;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* If the last block was written to next_out, then done. */\n if (last) {\n return BS_FINISH_DONE;\n }\n\n /* If flushing and all input has been consumed, then done. */\n if (flush !== Z_NO_FLUSH$2 && flush !== Z_FINISH$3 &&\n s.strm.avail_in === 0 && s.strstart === s.block_start) {\n return BS_BLOCK_DONE;\n }\n\n /* Fill the window with any remaining input. */\n have = s.window_size - s.strstart;\n if (s.strm.avail_in > have && s.block_start >= s.w_size) {\n /* Slide the window down. */\n s.block_start -= s.w_size;\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n have += s.w_size; /* more space now */\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n if (have > s.strm.avail_in) {\n have = s.strm.avail_in;\n }\n if (have) {\n read_buf(s.strm, s.window, s.strstart, have);\n s.strstart += have;\n s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* There was not enough avail_out to write a complete worthy or flushed\n * stored block to next_out. Write a stored block to pending instead, if we\n * have enough input for a worthy block, or if flushing and there is enough\n * room for the remaining input as a stored block in the pending buffer.\n */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n /* maximum stored block length that will fit in pending: */\n have = s.pending_buf_size - have > 65535/* MAX_STORED */ ? 65535/* MAX_STORED */ : s.pending_buf_size - have;\n min_block = have > s.w_size ? s.w_size : have;\n left = s.strstart - s.block_start;\n if (left >= min_block ||\n ((left || flush === Z_FINISH$3) && flush !== Z_NO_FLUSH$2 &&\n s.strm.avail_in === 0 && left <= have)) {\n len = left > have ? have : left;\n last = flush === Z_FINISH$3 && s.strm.avail_in === 0 &&\n len === left ? 1 : 0;\n _tr_stored_block(s, s.block_start, len, last);\n s.block_start += len;\n flush_pending(s.strm);\n }\n\n /* We've done all we can with the available input and output. */\n return last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\n\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.sym_buf = 0; /* buffer for distances and literals/lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.sym_next = 0; /* running index in sym_buf */\n this.sym_end = 0; /* symbol table full when sym_next reaches this */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\n/* =========================================================================\n * Check for a valid deflate stream state. Return 0 if ok, 1 if not.\n */\nconst deflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const s = strm.state;\n if (!s || s.strm !== strm || (s.status !== INIT_STATE &&\n//#ifdef GZIP\n s.status !== GZIP_STATE &&\n//#endif\n s.status !== EXTRA_STATE &&\n s.status !== NAME_STATE &&\n s.status !== COMMENT_STATE &&\n s.status !== HCRC_STATE &&\n s.status !== BUSY_STATE &&\n s.status !== FINISH_STATE)) {\n return 1;\n }\n return 0;\n};\n\n\nconst deflateResetKeep = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status =\n//#ifdef GZIP\n s.wrap === 2 ? GZIP_STATE :\n//#endif\n s.wrap ? INIT_STATE : BUSY_STATE;\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = -2;\n _tr_init(s);\n return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK$3) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (deflateStateCheck(strm) || strm.state.wrap !== 2) {\n return Z_STREAM_ERROR$2;\n }\n strm.state.gzhead = head;\n return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR$2;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION$1) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED || (windowBits === 8 && wrap !== 1)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n s.status = INIT_STATE; /* to pass state test in deflateReset() */\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n /* We overlay pending_buf and sym_buf. This works since the average size\n * for length/distance pairs over any compressed block is assured to be 31\n * bits or less.\n *\n * Analysis: The longest fixed codes are a length code of 8 bits plus 5\n * extra bits, for lengths 131 to 257. The longest fixed distance codes are\n * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest\n * possible fixed-codes length/distance pair is then 31 bits total.\n *\n * sym_buf starts one-fourth of the way into pending_buf. So there are\n * three bytes in sym_buf for every four bytes in pending_buf. Each symbol\n * in sym_buf is three bytes -- two for the distance and one for the\n * literal/length. As each symbol is consumed, the pointer to the next\n * sym_buf value to read moves forward three bytes. From that symbol, up to\n * 31 bits are written to pending_buf. The closest the written pending_buf\n * bits gets to the next sym_buf symbol to read is just before the last\n * code is written. At that time, 31*(n-2) bits have been written, just\n * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at\n * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1\n * symbols are written.) The closest the writing gets to what is unread is\n * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and\n * can range from 128 to 32768.\n *\n * Therefore, at a minimum, there are 142 bits of space between what is\n * written and what is read in the overlain buffers, so the symbols cannot\n * be overwritten by the compressed data. That space is actually 139 bits,\n * due to the three-bit fixed-code block header.\n *\n * That covers the case where either Z_FIXED is specified, forcing fixed\n * codes, or when the use of fixed codes is chosen, because that choice\n * results in a smaller compressed block than dynamic codes. That latter\n * condition then assures that the above analysis also covers all dynamic\n * blocks. A dynamic-code block will only be chosen to be emitted if it has\n * fewer bits than a fixed-code block would for the same set of symbols.\n * Therefore its average symbol length is assured to be less than 31. So\n * the compressed data for a dynamic block also cannot overwrite the\n * symbols from which it is being constructed.\n */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->sym_buf = s->pending_buf + s->lit_bufsize;\n s.sym_buf = s.lit_bufsize;\n\n //s->sym_end = (s->lit_bufsize - 1) * 3;\n s.sym_end = (s.lit_bufsize - 1) * 3;\n /* We avoid equality with lit_bufsize*3 because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\n/* ========================================================================= */\nconst deflate$2 = (strm, flush) => {\n\n if (deflateStateCheck(strm) || flush > Z_BLOCK$1 || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (strm.avail_in !== 0 && !strm.input) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);\n }\n\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK$3;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH$3) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* Write the header */\n if (s.status === INIT_STATE && s.wrap === 0) {\n s.status = BUSY_STATE;\n }\n if (s.status === INIT_STATE) {\n /* zlib header */\n let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#ifdef GZIP\n if (s.status === GZIP_STATE) {\n /* gzip header */\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let left = (s.gzhead.extra.length & 0xffff) - s.gzindex;\n while (s.pending + left > s.pending_buf_size) {\n let copy = s.pending_buf_size - s.pending;\n // zmemcpy(s.pending_buf + s.pending,\n // s.gzhead.extra + s.gzindex, copy);\n s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n s.pending = s.pending_buf_size;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex += copy;\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n left -= copy;\n }\n // JS specific: s.gzhead.extra may be TypedArray or Array for backward compatibility\n // TypedArray.slice and TypedArray.from don't exist in IE10-IE11\n let gzhead_extra = new Uint8Array(s.gzhead.extra);\n // zmemcpy(s->pending_buf + s->pending,\n // s->gzhead->extra + s->gzindex, left);\n s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n s.pending += left;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = NAME_STATE;\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = COMMENT_STATE;\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n }\n s.status = HCRC_STATE;\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n }\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#endif\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n let bstate = s.level === 0 ? deflate_stored(s, flush) :\n s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush);\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK$3;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH$1) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK$3;\n }\n }\n }\n\n if (flush !== Z_FINISH$3) { return Z_OK$3; }\n if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const status = strm.state.status;\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR$2;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateGetDictionary = deflateGetDictionary;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n this.options = common.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED$1,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = deflate_1$2.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n if (opt.header) {\n deflate_1$2.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = deflate_1$2.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END$2) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = deflate_1$2.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK$2;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK$2) {\n this.result = common.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n const deflator = new Deflate$1(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 16209; /* got a data error -- remain here until reset */\nconst TYPE$1 = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE$1;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES$1 || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES$1) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS$1) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,\n Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR$1;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR$1; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK$1) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR$1;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK$1;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32_1(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT$1;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inffast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END$1;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR$1;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR$1;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR$1;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH$1))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR$1;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR$1;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32_1(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR$1;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR$1;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n this.options = common.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = inflate_1$2.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n\n this.header = new gzheader();\n\n inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = inflate_1$2.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = inflate_1$2.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n inflate_1$2.inflateReset(strm);\n status = inflate_1$2.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = inflate_1$2.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = common.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n const inflator = new Inflate$1(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\nexport { Deflate_1 as Deflate, Inflate_1 as Inflate, constants_1 as constants, pako as default, deflate_1 as deflate, deflateRaw_1 as deflateRaw, gzip_1 as gzip, inflate_1 as inflate, inflateRaw_1 as inflateRaw, ungzip_1 as ungzip };\n",null,null,null,null,"/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n",null,null,null,"/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n",null,null,null,null,null,null,null,null,null,null,null,"/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map<any, any>}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template K,V\n * @param {Map<K,V>} m\n * @return {Map<K,V>}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template {Map<any, any>} MAP\n * @template {MAP extends Map<any,infer V> ? function():V : unknown} CF\n * @param {MAP} map\n * @param {MAP extends Map<infer K,any> ? K : unknown} key\n * @param {CF} createT\n * @return {ReturnType<CF>}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map<K,V>} m\n * @param {function(V,K):R} f\n * @return {Array<R>}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map<K,V>} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map<K,V>} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set<T>} set\n * @return {Array<T>}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set<T>} set\n * @return {T|undefined}\n */\nexport const first = set => set.values().next().value\n\n/**\n * @template T\n * @param {Iterable<T>} entries\n * @return {Set<T>}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike<L>} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array<C>}\n */\nexport const create = () => /** @type {Array<C>} */ ([])\n\n/**\n * @template D\n * @param {Array<D>} a\n * @return {Array<D>}\n */\nexport const copy = a => /** @type {Array<D>} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array<M>} dest\n * @param {Array<M>} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike<T>|Iterable<T>} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template {ArrayLike<any>} ARR\n *\n * @param {ARR} arr\n * @param {ARR extends ArrayLike<infer S> ? ((value:S, index:number, arr:ARR) => boolean) : any} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template {ArrayLike<any>} ARR\n *\n * @param {ARR} arr\n * @param {ARR extends ArrayLike<infer S> ? ((value:S, index:number, arr:ARR) => boolean) : never} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike<ELEM>} a\n * @param {ArrayLike<ELEM>} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array<Array<ELEM>>} arr\n * @return {Array<ELEM>}\n */\nexport const flatten = arr => fold(arr, /** @type {Array<ELEM>} */ ([]), (acc, val) => acc.concat(val))\n\n/**\n * @template T\n * @param {number} len\n * @param {function(number, Array<T>):T} f\n * @return {Array<T>}\n */\nexport const unfold = (len, f) => {\n const array = new Array(len)\n for (let i = 0; i < len; i++) {\n array[i] = f(i, array)\n }\n return array\n}\n\n/**\n * @template T\n * @template RESULT\n * @param {Array<T>} arr\n * @param {RESULT} seed\n * @param {function(RESULT, T, number):RESULT} folder\n */\nexport const fold = (arr, seed, folder) => arr.reduce(folder, seed)\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array<T>} arr\n * @return {Array<T>}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike<T>} arr\n * @param {function(T):M} mapper\n * @return {Array<T>}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set<M>}\n */\n const happened = set.create()\n /**\n * @type {Array<T>}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n\n/**\n * @template {ArrayLike<any>} ARR\n * @template {function(ARR extends ArrayLike<infer T> ? T : never, number, ARR):any} MAPPER\n * @param {ARR} arr\n * @param {MAPPER} mapper\n * @return {Array<MAPPER extends function(...any): infer M ? M : never>}\n */\nexport const map = (arr, mapper) => {\n /**\n * @type {Array<any>}\n */\n const res = Array(arr.length)\n for (let i = 0; i < arr.length; i++) {\n res[i] = mapper(/** @type {any} */ (arr[i]), i, /** @type {any} */ (arr))\n }\n return /** @type {any} */ (res)\n}\n\n/**\n * This function bubble-sorts a single item to the correct position. The sort happens in-place and\n * might be useful to ensure that a single item is at the correct position in an otherwise sorted\n * array.\n *\n * @example\n * const arr = [3, 2, 5]\n * arr.sort((a, b) => a - b)\n * arr // => [2, 3, 5]\n * arr.splice(1, 0, 7)\n * array.bubbleSortItem(arr, 1, (a, b) => a - b)\n * arr // => [2, 3, 5, 7]\n *\n * @template T\n * @param {Array<T>} arr\n * @param {number} i\n * @param {(a:T,b:T) => number} compareFn\n */\nexport const bubblesortItem = (arr, i, compareFn) => {\n const n = arr[i]\n let j = i\n // try to sort to the right\n while (j + 1 < arr.length && compareFn(n, arr[j + 1]) > 0) {\n arr[j] = arr[j + 1]\n arr[++j] = n\n }\n if (i === j && j > 0) { // no change yet\n // sort to the left\n while (j > 0 && compareFn(arr[j - 1], n) > 0) {\n arr[j] = arr[j - 1]\n arr[--j] = n\n }\n }\n return j\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n * @experimental\n *\n * This is basically a (better typed) duplicate of Observable, which will replace Observable in the\n * next release.\n *\n * @template {{[key in keyof EVENTS]: function(...any):void}} EVENTS\n */\nexport class ObservableV2 {\n constructor () {\n /**\n * Some desc.\n * @type {Map<string, Set<any>>}\n */\n this._observers = map.create()\n }\n\n /**\n * @template {keyof EVENTS & string} NAME\n * @param {NAME} name\n * @param {EVENTS[NAME]} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, /** @type {string} */ (name), set.create).add(f)\n return f\n }\n\n /**\n * @template {keyof EVENTS & string} NAME\n * @param {NAME} name\n * @param {EVENTS[NAME]} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, /** @type {any} */ (_f))\n f(...args)\n }\n this.on(name, /** @type {any} */ (_f))\n }\n\n /**\n * @template {keyof EVENTS & string} NAME\n * @param {NAME} name\n * @param {EVENTS[NAME]} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @template {keyof EVENTS & string} NAME\n * @param {NAME} name The event name.\n * @param {Parameters<EVENTS[NAME]>} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n\n/* c8 ignore start */\n/**\n * Handles named events.\n *\n * @deprecated\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map<N, any>}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array<any>} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n/* c8 ignore end */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\nexport const HIGHEST_INT32 = binary.BITS31\nexport const HIGHEST_UINT32 = binary.BITS32\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n\n/**\n * Count the number of \"1\" bits in an unsigned 32bit number.\n *\n * Super fun bitcount algorithm by Brian Kernighan.\n *\n * @param {number} n\n */\nexport const countBits = n => {\n n &= binary.BITS32\n let count = 0\n while (n) {\n n &= (n - 1)\n count++\n }\n return count\n}\n","import * as array from './array.js'\n\n/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * The largest utf16 character.\n * Corresponds to Uint8Array([255, 255]) or charcodeof(2x2^8)\n */\nexport const MAX_UTF16_CHARACTER = fromCharCode(65535)\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n\n/**\n * @param {string} source\n * @param {number} n\n */\nexport const repeat = (source, n) => array.unfold(n, () => source).join('')\n\n/**\n * Escape HTML characters &,<,>,',\" to their respective HTML entities &,<,>,',"\n *\n * @param {string} str\n */\nexport const escapeHTML = str =>\n str.replace(/[&<>'\"]/g, r => /** @type {string} */ ({\n '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''',\n '\"': '"'\n }[r]))\n\n/**\n * Reverse of `escapeHTML`\n *\n * @param {string} str\n */\nexport const unescapeHTML = str =>\n str.replace(/&|<|>|'|"/g, r => /** @type {string} */ ({\n '&': '&',\n '<': '<',\n '>': '>',\n ''': \"'\",\n '"': '\"'\n }[r]))\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\nimport * as array from './array.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array<Uint8Array>}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * @param {function(Encoder):void} f\n */\nexport const encode = (f) => {\n const encoder = createEncoder()\n f(encoder)\n return toUint8Array(encoder)\n}\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Check whether encoder is empty.\n *\n * @function\n * @param {Encoder} encoder\n * @return {boolean}\n */\nexport const hasContent = encoder => encoder.cpos > 0 || encoder.bufs.length > 0\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(new Uint8Array(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(new Uint8Array(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write a string terminated by a special byte sequence. This is not very performant and is\n * generally discouraged. However, the resulting byte arrays are lexiographically ordered which\n * makes this a nice feature for databases.\n *\n * The string will be encoded using utf8 and then terminated and escaped using writeTerminatingUint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const writeTerminatedString = (encoder, str) =>\n writeTerminatedUint8Array(encoder, string.encodeUtf8(str))\n\n/**\n * Write a terminating Uint8Array. Note that this is not performant and is generally\n * discouraged. There are few situations when this is needed.\n *\n * We use 0x0 as a terminating character. 0x1 serves as an escape character for 0x0 and 0x1.\n *\n * Example: [0,1,2] is encoded to [1,0,1,1,2,0]. 0x0, and 0x1 needed to be escaped using 0x1. Then\n * the result is terminated using the 0x0 character.\n *\n * This is basically how many systems implement null terminated strings. However, we use an escape\n * character 0x1 to avoid issues and potenial attacks on our database (if this is used as a key\n * encoder for NoSql databases).\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} buf The string that is to be encoded.\n */\nexport const writeTerminatedUint8Array = (encoder, buf) => {\n for (let i = 0; i < buf.length; i++) {\n const b = buf[i]\n if (b === 0 || b === 1) {\n write(encoder, 1)\n }\n write(encoder, buf[i])\n }\n write(encoder, 0)\n}\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object<string,any> | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array<any> | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object<string,any>|Array<any>|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (array.isArray(data)) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n /**\n * Flush the encoded state and transform this to a Uint8Array.\n *\n * Note that this should only be called once.\n */\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n /**\n * Flush the encoded state and transform this to a Uint8Array.\n *\n * Note that this should only be called once.\n */\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n /**\n * Flush the encoded state and transform this to a Uint8Array.\n *\n * Note that this should only be called once.\n */\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array<string>}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\nimport * as encoding from './encoding.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = new Uint8Array(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTerminatedUint8Array = decoder => {\n const encoder = encoding.createEncoder()\n let b\n while (true) {\n b = readUint8(decoder)\n if (b === 0) {\n return encoding.toUint8Array(encoder)\n }\n if (b === 1) {\n b = readUint8(decoder)\n }\n encoding.write(encoder, b)\n }\n}\n\n/**\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const readTerminatedString = decoder => string.decodeUtf8(readTerminatedUint8Array(decoder))\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array<function(Decoder):any>}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object<string,any>\n const len = readVarUint(decoder)\n /**\n * @type {Object<string,any>}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array<any>\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","/* eslint-env browser */\n\nexport const subtle = crypto.subtle\nexport const getRandomValues = crypto.getRandomValues.bind(crypto)\n","/**\n * Isomorphic module for true random numbers / buffers / uuids.\n *\n * Attention: falls back to Math.random if the browser does not support crypto.\n *\n * @module random\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\nimport { getRandomValues } from 'lib0/webcrypto'\n\nexport const rand = Math.random\n\nexport const uint32 = () => getRandomValues(new Uint32Array(1))[0]\n\nexport const uint53 = () => {\n const arr = getRandomValues(new Uint32Array(8))\n return (arr[0] & binary.BITS21) * (binary.BITS32 + 1) + (arr[1] >>> 0)\n}\n\n/**\n * @template T\n * @param {Array<T>} arr\n * @return {T}\n */\nexport const oneOf = arr => arr[math.floor(rand() * arr.length)]\n\n// @ts-ignore\nconst uuidv4Template = [1e7] + -1e3 + -4e3 + -8e3 + -1e11\n\n/**\n * @return {string}\n */\nexport const uuidv4 = () => uuidv4Template.replace(/[018]/g, /** @param {number} c */ c =>\n (c ^ uint32() & 15 >> c / 4).toString(16)\n)\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Utility helpers to work with promises.\n *\n * @module promise\n */\n\nimport * as time from './time.js'\n\n/**\n * @template T\n * @callback PromiseResolve\n * @param {T|PromiseLike<T>} [result]\n */\n\n/**\n * @template T\n * @param {function(PromiseResolve<T>,function(Error):void):any} f\n * @return {Promise<T>}\n */\nexport const create = f => /** @type {Promise<T>} */ (new Promise(f))\n\n/**\n * @param {function(function():void,function(Error):void):void} f\n * @return {Promise<void>}\n */\nexport const createEmpty = f => new Promise(f)\n\n/**\n * `Promise.all` wait for all promises in the array to resolve and return the result\n * @template {unknown[] | []} PS\n *\n * @param {PS} ps\n * @return {Promise<{ -readonly [P in keyof PS]: Awaited<PS[P]> }>}\n */\nexport const all = Promise.all.bind(Promise)\n\n/**\n * @param {Error} [reason]\n * @return {Promise<never>}\n */\nexport const reject = reason => Promise.reject(reason)\n\n/**\n * @template T\n * @param {T|void} res\n * @return {Promise<T|void>}\n */\nexport const resolve = res => Promise.resolve(res)\n\n/**\n * @template T\n * @param {T} res\n * @return {Promise<T>}\n */\nexport const resolveWith = res => Promise.resolve(res)\n\n/**\n * @todo Next version, reorder parameters: check, [timeout, [intervalResolution]]\n * @deprecated use untilAsync instead\n *\n * @param {number} timeout\n * @param {function():boolean} check\n * @param {number} [intervalResolution]\n * @return {Promise<void>}\n */\nexport const until = (timeout, check, intervalResolution = 10) => create((resolve, reject) => {\n const startTime = time.getUnixTime()\n const hasTimeout = timeout > 0\n const untilInterval = () => {\n if (check()) {\n clearInterval(intervalHandle)\n resolve()\n } else if (hasTimeout) {\n /* c8 ignore else */\n if (time.getUnixTime() - startTime > timeout) {\n clearInterval(intervalHandle)\n reject(new Error('Timeout'))\n }\n }\n }\n const intervalHandle = setInterval(untilInterval, intervalResolution)\n})\n\n/**\n * @param {()=>Promise<boolean>|boolean} check\n * @param {number} timeout\n * @param {number} intervalResolution\n * @return {Promise<void>}\n */\nexport const untilAsync = async (check, timeout = 0, intervalResolution = 10) => {\n const startTime = time.getUnixTime()\n const noTimeout = timeout <= 0\n // eslint-disable-next-line no-unmodified-loop-condition\n while (noTimeout || time.getUnixTime() - startTime <= timeout) {\n if (await check()) return\n await wait(intervalResolution)\n }\n throw new Error('Timeout')\n}\n\n/**\n * @param {number} timeout\n * @return {Promise<undefined>}\n */\nexport const wait = timeout => create((resolve, _reject) => setTimeout(resolve, timeout))\n\n/**\n * Checks if an object is a promise using ducktyping.\n *\n * Promises are often polyfilled, so it makes sense to add some additional guarantees if the user of this\n * library has some insane environment where global Promise objects are overwritten.\n *\n * @param {any} p\n * @return {boolean}\n */\nexport const isPromise = p => p instanceof Promise || (p && p.then && p.catch && p.finally)\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined' && localStorage) {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object<string,any>} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object<string,any>} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[key:string]: V}} obj\n * @return {Array<V>}\n */\nexport const values = Object.values\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object<string,any>} obj\n * @param {function(any,string):R} f\n * @return {Array<R>}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @deprecated use object.size instead\n * @param {Object<string,any>} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object<string,any>} obj\n * @return {number}\n */\nexport const size = obj => keys(obj).length\n\n/**\n * @template {{ [key:string|number|symbol]: any }} T\n * @param {T} obj\n * @param {(v:T[keyof T],k:keyof T)=>boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|null|undefined} obj\n */\nexport const isEmpty = obj => {\n // eslint-disable-next-line no-unreachable-loop\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @template {{ [key:string|number|symbol]: any }} T\n * @param {T} obj\n * @param {(v:T[keyof T],k:keyof T)=>boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|number|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object<string,any>} a\n * @param {Object<string,any>} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (size(a) === size(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n\n/**\n * Make an object immutable. This hurts performance and is usually not needed if you perform good\n * coding practices.\n */\nexport const freeze = Object.freeze\n\n/**\n * Make an object and all its children immutable.\n * This *really* hurts performance and is usually not needed if you perform good coding practices.\n *\n * @template {any} T\n * @param {T} o\n * @return {Readonly<T>}\n */\nexport const deepFreeze = (o) => {\n for (const key in o) {\n const c = o[key]\n if (typeof c === 'object' || typeof c === 'function') {\n deepFreeze(o[key])\n }\n }\n return freeze(o)\n}\n\n/**\n * Get object property. Create T if property is undefined and set T on object.\n *\n * @function\n * @template {object} KV\n * @template {keyof KV} [K=keyof KV]\n * @param {KV} o\n * @param {K} key\n * @param {() => KV[K]} createT\n * @return {KV[K]}\n */\nexport const setIfUndefined = (o, key, createT) => hasProperty(o, key) ? o[key] : (o[key] = createT())\n","export const EqualityTraitSymbol = Symbol('Equality')\n\n/**\n * @typedef {{ [EqualityTraitSymbol]:(other:EqualityTrait)=>boolean }} EqualityTrait\n */\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\nimport * as traits from './traits.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array<function>} fs\n * @param {Array<any>} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array<T>|object} a\n * @param {Array<T>|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((array.isArray(a) && array.equalFlat(a, /** @type {Array<T>} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a === b) {\n return true\n }\n if (a == null || b == null || a.constructor !== b.constructor) {\n return false\n }\n if (a[traits.EqualityTraitSymbol] != null) {\n return a[traits.EqualityTraitSymbol](b)\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array<OPTS>} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n\nexport const isArray = array.isArray\n\n/**\n * @param {any} s\n * @return {s is String}\n */\nexport const isString = (s) => s && s.constructor === String\n\n/**\n * @param {any} n\n * @return {n is Number}\n */\nexport const isNumber = n => n != null && n.constructor === Number\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {any} n\n * @param {TYPE} T\n * @return {n is InstanceType<TYPE>}\n */\nexport const is = (n, T) => n && n.constructor === T\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {TYPE} T\n */\nexport const isTemplate = (T) =>\n /**\n * @param {any} n\n * @return {n is InstanceType<TYPE>}\n **/\n n => n && n.constructor === T\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module environment\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next 2 */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release && /node|io\\.js/.test(process.release.name) && Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map<string,string>}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase().replaceAll('-', '_')])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {string}\n */\n/* c8 ignore next 5 */\nexport const ensureConf = (name) => {\n const c = getConf(name)\n if (c == null) throw new Error(`Expected configuration \"${name.toUpperCase().replaceAll('-', '_')}\"`)\n return c\n}\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\n/**\n * Color is enabled by default if the terminal supports it.\n *\n * Explicitly enable color using `--color` parameter\n * Disable color using `--no-color` parameter or using `NO_COLOR=1` environment variable.\n * `FORCE_COLOR=1` enables color and takes precedence over all.\n */\nexport const supportsColor = forceColor || (\n !hasParam('--no-colors') && // @todo deprecate --no-colors\n !hasConf('no-color') &&\n (!isNode || process.stdout.isTTY) && (\n !isNode ||\n hasParam('--color') ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n )\n)\n/* c8 ignore stop */\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as array from './array.js'\nimport * as math from './math.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return createUint8ArrayViewFromArrayBuffer(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Implements base64url - see https://datatracker.ietf.org/doc/html/rfc4648#section-5\n * @param {Uint8Array} buf\n */\nexport const toBase64UrlEncoded = buf => toBase64(buf).replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', '')\n\n/**\n * @param {string} base64\n */\nexport const fromBase64UrlEncoded = base64 => fromBase64(base64.replaceAll('-', '+').replaceAll('_', '/'))\n\n/**\n * Base64 is always a more efficient choice. This exists for utility purposes only.\n *\n * @param {Uint8Array} buf\n */\nexport const toHexString = buf => array.map(buf, b => b.toString(16).padStart(2, '0')).join('')\n\n/**\n * Note: This function expects that the hex doesn't start with 0x..\n *\n * @param {string} hex\n */\nexport const fromHexString = hex => {\n const hlen = hex.length\n const buf = new Uint8Array(math.ceil(hlen / 2))\n for (let i = 0; i < hlen; i += 2) {\n buf[buf.length - i / 2 - 1] = Number.parseInt(hex.slice(hlen - i - 2, hlen - i), 16)\n }\n return buf\n}\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data =>\n encoding.encode(encoder => encoding.writeAny(encoder, data))\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n\n/**\n * Shift Byte Array {N} bits to the left. Does not expand byte array.\n *\n * @param {Uint8Array} bs\n * @param {number} N should be in the range of [0-7]\n */\nexport const shiftNBitsLeft = (bs, N) => {\n if (N === 0) return bs\n bs = new Uint8Array(bs)\n bs[0] <<= N\n for (let i = 1; i < bs.length; i++) {\n bs[i - 1] |= bs[i] >>> (8 - N)\n bs[i] <<= N\n }\n return bs\n}\n","/**\n * Working with value pairs.\n *\n * @module pair\n */\n\n/**\n * @template L,R\n */\nexport class Pair {\n /**\n * @param {L} left\n * @param {R} right\n */\n constructor (left, right) {\n this.left = left\n this.right = right\n }\n}\n\n/**\n * @template L,R\n * @param {L} left\n * @param {R} right\n * @return {Pair<L,R>}\n */\nexport const create = (left, right) => new Pair(left, right)\n\n/**\n * @template L,R\n * @param {R} right\n * @param {L} left\n * @return {Pair<L,R>}\n */\nexport const createReversed = (right, left) => new Pair(left, right)\n\n/**\n * @template L,R\n * @param {Array<Pair<L,R>>} arr\n * @param {function(L, R):any} f\n */\nexport const forEach = (arr, f) => arr.forEach(p => f(p.left, p.right))\n\n/**\n * @template L,R,X\n * @param {Array<Pair<L,R>>} arr\n * @param {function(L, R):X} f\n * @return {Array<X>}\n */\nexport const map = (arr, f) => arr.map(p => f(p.left, p.right))\n","/* eslint-env browser */\n\n/**\n * Utility module to work with the DOM.\n *\n * @module dom\n */\n\nimport * as pair from './pair.js'\nimport * as map from './map.js'\n\n/* c8 ignore start */\n/**\n * @type {Document}\n */\nexport const doc = /** @type {Document} */ (typeof document !== 'undefined' ? document : {})\n\n/**\n * @param {string} name\n * @return {HTMLElement}\n */\nexport const createElement = name => doc.createElement(name)\n\n/**\n * @return {DocumentFragment}\n */\nexport const createDocumentFragment = () => doc.createDocumentFragment()\n\n/**\n * @param {string} text\n * @return {Text}\n */\nexport const createTextNode = text => doc.createTextNode(text)\n\nexport const domParser = /** @type {DOMParser} */ (typeof DOMParser !== 'undefined' ? new DOMParser() : null)\n\n/**\n * @param {HTMLElement} el\n * @param {string} name\n * @param {Object} opts\n */\nexport const emitCustomEvent = (el, name, opts) => el.dispatchEvent(new CustomEvent(name, opts))\n\n/**\n * @param {Element} el\n * @param {Array<pair.Pair<string,string|boolean>>} attrs Array of key-value pairs\n * @return {Element}\n */\nexport const setAttributes = (el, attrs) => {\n pair.forEach(attrs, (key, value) => {\n if (value === false) {\n el.removeAttribute(key)\n } else if (value === true) {\n el.setAttribute(key, '')\n } else {\n // @ts-ignore\n el.setAttribute(key, value)\n }\n })\n return el\n}\n\n/**\n * @param {Element} el\n * @param {Map<string, string>} attrs Array of key-value pairs\n * @return {Element}\n */\nexport const setAttributesMap = (el, attrs) => {\n attrs.forEach((value, key) => { el.setAttribute(key, value) })\n return el\n}\n\n/**\n * @param {Array<Node>|HTMLCollection} children\n * @return {DocumentFragment}\n */\nexport const fragment = children => {\n const fragment = createDocumentFragment()\n for (let i = 0; i < children.length; i++) {\n appendChild(fragment, children[i])\n }\n return fragment\n}\n\n/**\n * @param {Element} parent\n * @param {Array<Node>} nodes\n * @return {Element}\n */\nexport const append = (parent, nodes) => {\n appendChild(parent, fragment(nodes))\n return parent\n}\n\n/**\n * @param {HTMLElement} el\n */\nexport const remove = el => el.remove()\n\n/**\n * @param {EventTarget} el\n * @param {string} name\n * @param {EventListener} f\n */\nexport const addEventListener = (el, name, f) => el.addEventListener(name, f)\n\n/**\n * @param {EventTarget} el\n * @param {string} name\n * @param {EventListener} f\n */\nexport const removeEventListener = (el, name, f) => el.removeEventListener(name, f)\n\n/**\n * @param {Node} node\n * @param {Array<pair.Pair<string,EventListener>>} listeners\n * @return {Node}\n */\nexport const addEventListeners = (node, listeners) => {\n pair.forEach(listeners, (name, f) => addEventListener(node, name, f))\n return node\n}\n\n/**\n * @param {Node} node\n * @param {Array<pair.Pair<string,EventListener>>} listeners\n * @return {Node}\n */\nexport const removeEventListeners = (node, listeners) => {\n pair.forEach(listeners, (name, f) => removeEventListener(node, name, f))\n return node\n}\n\n/**\n * @param {string} name\n * @param {Array<pair.Pair<string,string>|pair.Pair<string,boolean>>} attrs Array of key-value pairs\n * @param {Array<Node>} children\n * @return {Element}\n */\nexport const element = (name, attrs = [], children = []) =>\n append(setAttributes(createElement(name), attrs), children)\n\n/**\n * @param {number} width\n * @param {number} height\n */\nexport const canvas = (width, height) => {\n const c = /** @type {HTMLCanvasElement} */ (createElement('canvas'))\n c.height = height\n c.width = width\n return c\n}\n\n/**\n * @param {string} t\n * @return {Text}\n */\nexport const text = createTextNode\n\n/**\n * @param {pair.Pair<string,string>} pair\n */\nexport const pairToStyleString = pair => `${pair.left}:${pair.right};`\n\n/**\n * @param {Array<pair.Pair<string,string>>} pairs\n * @return {string}\n */\nexport const pairsToStyleString = pairs => pairs.map(pairToStyleString).join('')\n\n/**\n * @param {Map<string,string>} m\n * @return {string}\n */\nexport const mapToStyleString = m => map.map(m, (value, key) => `${key}:${value};`).join('')\n\n/**\n * @todo should always query on a dom element\n *\n * @param {HTMLElement|ShadowRoot} el\n * @param {string} query\n * @return {HTMLElement | null}\n */\nexport const querySelector = (el, query) => el.querySelector(query)\n\n/**\n * @param {HTMLElement|ShadowRoot} el\n * @param {string} query\n * @return {NodeListOf<HTMLElement>}\n */\nexport const querySelectorAll = (el, query) => el.querySelectorAll(query)\n\n/**\n * @param {string} id\n * @return {HTMLElement}\n */\nexport const getElementById = id => /** @type {HTMLElement} */ (doc.getElementById(id))\n\n/**\n * @param {string} html\n * @return {HTMLElement}\n */\nconst _parse = html => domParser.parseFromString(`<html><body>${html}</body></html>`, 'text/html').body\n\n/**\n * @param {string} html\n * @return {DocumentFragment}\n */\nexport const parseFragment = html => fragment(/** @type {any} */ (_parse(html).childNodes))\n\n/**\n * @param {string} html\n * @return {HTMLElement}\n */\nexport const parseElement = html => /** @type HTMLElement */ (_parse(html).firstElementChild)\n\n/**\n * @param {HTMLElement} oldEl\n * @param {HTMLElement|DocumentFragment} newEl\n */\nexport const replaceWith = (oldEl, newEl) => oldEl.replaceWith(newEl)\n\n/**\n * @param {HTMLElement} parent\n * @param {HTMLElement} el\n * @param {Node|null} ref\n * @return {HTMLElement}\n */\nexport const insertBefore = (parent, el, ref) => parent.insertBefore(el, ref)\n\n/**\n * @param {Node} parent\n * @param {Node} child\n * @return {Node}\n */\nexport const appendChild = (parent, child) => parent.appendChild(child)\n\nexport const ELEMENT_NODE = doc.ELEMENT_NODE\nexport const TEXT_NODE = doc.TEXT_NODE\nexport const CDATA_SECTION_NODE = doc.CDATA_SECTION_NODE\nexport const COMMENT_NODE = doc.COMMENT_NODE\nexport const DOCUMENT_NODE = doc.DOCUMENT_NODE\nexport const DOCUMENT_TYPE_NODE = doc.DOCUMENT_TYPE_NODE\nexport const DOCUMENT_FRAGMENT_NODE = doc.DOCUMENT_FRAGMENT_NODE\n\n/**\n * @param {any} node\n * @param {number} type\n */\nexport const checkNodeType = (node, type) => node.nodeType === type\n\n/**\n * @param {Node} parent\n * @param {HTMLElement} child\n */\nexport const isParentOf = (parent, child) => {\n let p = child.parentNode\n while (p && p !== parent) {\n p = p.parentNode\n }\n return p === parent\n}\n/* c8 ignore stop */\n","/**\n * Utility module to work with EcmaScript Symbols.\n *\n * @module symbol\n */\n\n/**\n * Return fresh symbol.\n */\nexport const create = Symbol\n\n/**\n * @param {any} s\n * @return {boolean}\n */\nexport const isSymbol = s => typeof s === 'symbol'\n","import * as symbol from './symbol.js'\nimport * as time from './time.js'\nimport * as env from './environment.js'\nimport * as func from './function.js'\nimport * as json from './json.js'\n\nexport const BOLD = symbol.create()\nexport const UNBOLD = symbol.create()\nexport const BLUE = symbol.create()\nexport const GREY = symbol.create()\nexport const GREEN = symbol.create()\nexport const RED = symbol.create()\nexport const PURPLE = symbol.create()\nexport const ORANGE = symbol.create()\nexport const UNCOLOR = symbol.create()\n\n/* c8 ignore start */\n/**\n * @param {Array<undefined|string|Symbol|Object|number|function():any>} args\n * @return {Array<string|object|number|undefined>}\n */\nexport const computeNoColorLoggingArgs = args => {\n if (args.length === 1 && args[0]?.constructor === Function) {\n args = /** @type {Array<string|Symbol|Object|number>} */ (/** @type {[function]} */ (args)[0]())\n }\n const strBuilder = []\n const logArgs = []\n // try with formatting until we find something unsupported\n let i = 0\n for (; i < args.length; i++) {\n const arg = args[i]\n if (arg === undefined) {\n break\n } else if (arg.constructor === String || arg.constructor === Number) {\n strBuilder.push(arg)\n } else if (arg.constructor === Object) {\n break\n }\n }\n if (i > 0) {\n // create logArgs with what we have so far\n logArgs.push(strBuilder.join(''))\n }\n // append the rest\n for (; i < args.length; i++) {\n const arg = args[i]\n if (!(arg instanceof Symbol)) {\n logArgs.push(arg)\n }\n }\n return logArgs\n}\n/* c8 ignore stop */\n\nconst loggingColors = [GREEN, PURPLE, ORANGE, BLUE]\nlet nextColor = 0\nlet lastLoggingTime = time.getUnixTime()\n\n/* c8 ignore start */\n/**\n * @param {function(...any):void} _print\n * @param {string} moduleName\n * @return {function(...any):void}\n */\nexport const createModuleLogger = (_print, moduleName) => {\n const color = loggingColors[nextColor]\n const debugRegexVar = env.getVariable('log')\n const doLogging = debugRegexVar !== null &&\n (debugRegexVar === '*' || debugRegexVar === 'true' ||\n new RegExp(debugRegexVar, 'gi').test(moduleName))\n nextColor = (nextColor + 1) % loggingColors.length\n moduleName += ': '\n return !doLogging\n ? func.nop\n : (...args) => {\n if (args.length === 1 && args[0]?.constructor === Function) {\n args = args[0]()\n }\n const timeNow = time.getUnixTime()\n const timeDiff = timeNow - lastLoggingTime\n lastLoggingTime = timeNow\n _print(\n color,\n moduleName,\n UNCOLOR,\n ...args.map((arg) => {\n if (arg != null && arg.constructor === Uint8Array) {\n arg = Array.from(arg)\n }\n const t = typeof arg\n switch (t) {\n case 'string':\n case 'symbol':\n return arg\n default: {\n return json.stringify(arg)\n }\n }\n }),\n color,\n ' +' + timeDiff + 'ms'\n )\n }\n}\n/* c8 ignore stop */\n","/**\n * Isomorphic logging module with support for colors!\n *\n * @module logging\n */\n\nimport * as env from './environment.js'\nimport * as set from './set.js'\nimport * as pair from './pair.js'\nimport * as dom from './dom.js'\nimport * as json from './json.js'\nimport * as map from './map.js'\nimport * as eventloop from './eventloop.js'\nimport * as math from './math.js'\nimport * as common from './logging.common.js'\n\nexport { BOLD, UNBOLD, BLUE, GREY, GREEN, RED, PURPLE, ORANGE, UNCOLOR } from './logging.common.js'\n\n/**\n * @type {Object<Symbol,pair.Pair<string,string>>}\n */\nconst _browserStyleMap = {\n [common.BOLD]: pair.create('font-weight', 'bold'),\n [common.UNBOLD]: pair.create('font-weight', 'normal'),\n [common.BLUE]: pair.create('color', 'blue'),\n [common.GREEN]: pair.create('color', 'green'),\n [common.GREY]: pair.create('color', 'grey'),\n [common.RED]: pair.create('color', 'red'),\n [common.PURPLE]: pair.create('color', 'purple'),\n [common.ORANGE]: pair.create('color', 'orange'), // not well supported in chrome when debugging node with inspector - TODO: deprecate\n [common.UNCOLOR]: pair.create('color', 'black')\n}\n\n/**\n * @param {Array<string|Symbol|Object|number|function():any>} args\n * @return {Array<string|object|number>}\n */\n/* c8 ignore start */\nconst computeBrowserLoggingArgs = (args) => {\n if (args.length === 1 && args[0]?.constructor === Function) {\n args = /** @type {Array<string|Symbol|Object|number>} */ (/** @type {[function]} */ (args)[0]())\n }\n const strBuilder = []\n const styles = []\n const currentStyle = map.create()\n /**\n * @type {Array<string|Object|number>}\n */\n let logArgs = []\n // try with formatting until we find something unsupported\n let i = 0\n for (; i < args.length; i++) {\n const arg = args[i]\n // @ts-ignore\n const style = _browserStyleMap[arg]\n if (style !== undefined) {\n currentStyle.set(style.left, style.right)\n } else {\n if (arg === undefined) {\n break\n }\n if (arg.constructor === String || arg.constructor === Number) {\n const style = dom.mapToStyleString(currentStyle)\n if (i > 0 || style.length > 0) {\n strBuilder.push('%c' + arg)\n styles.push(style)\n } else {\n strBuilder.push(arg)\n }\n } else {\n break\n }\n }\n }\n if (i > 0) {\n // create logArgs with what we have so far\n logArgs = styles\n logArgs.unshift(strBuilder.join(''))\n }\n // append the rest\n for (; i < args.length; i++) {\n const arg = args[i]\n if (!(arg instanceof Symbol)) {\n logArgs.push(arg)\n }\n }\n return logArgs\n}\n/* c8 ignore stop */\n\n/* c8 ignore start */\nconst computeLoggingArgs = env.supportsColor\n ? computeBrowserLoggingArgs\n : common.computeNoColorLoggingArgs\n/* c8 ignore stop */\n\n/**\n * @param {Array<string|Symbol|Object|number>} args\n */\nexport const print = (...args) => {\n console.log(...computeLoggingArgs(args))\n /* c8 ignore next */\n vconsoles.forEach((vc) => vc.print(args))\n}\n\n/* c8 ignore start */\n/**\n * @param {Array<string|Symbol|Object|number>} args\n */\nexport const warn = (...args) => {\n console.warn(...computeLoggingArgs(args))\n args.unshift(common.ORANGE)\n vconsoles.forEach((vc) => vc.print(args))\n}\n/* c8 ignore stop */\n\n/**\n * @param {Error} err\n */\n/* c8 ignore start */\nexport const printError = (err) => {\n console.error(err)\n vconsoles.forEach((vc) => vc.printError(err))\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} url image location\n * @param {number} height height of the image in pixel\n */\n/* c8 ignore start */\nexport const printImg = (url, height) => {\n if (env.isBrowser) {\n console.log(\n '%c ',\n `font-size: ${height}px; background-size: contain; background-repeat: no-repeat; background-image: url(${url})`\n )\n // console.log('%c ', `font-size: ${height}x; background: url(${url}) no-repeat;`)\n }\n vconsoles.forEach((vc) => vc.printImg(url, height))\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} base64\n * @param {number} height\n */\n/* c8 ignore next 2 */\nexport const printImgBase64 = (base64, height) =>\n printImg(`data:image/gif;base64,${base64}`, height)\n\n/**\n * @param {Array<string|Symbol|Object|number>} args\n */\nexport const group = (...args) => {\n console.group(...computeLoggingArgs(args))\n /* c8 ignore next */\n vconsoles.forEach((vc) => vc.group(args))\n}\n\n/**\n * @param {Array<string|Symbol|Object|number>} args\n */\nexport const groupCollapsed = (...args) => {\n console.groupCollapsed(...computeLoggingArgs(args))\n /* c8 ignore next */\n vconsoles.forEach((vc) => vc.groupCollapsed(args))\n}\n\nexport const groupEnd = () => {\n console.groupEnd()\n /* c8 ignore next */\n vconsoles.forEach((vc) => vc.groupEnd())\n}\n\n/**\n * @param {function():Node} createNode\n */\n/* c8 ignore next 2 */\nexport const printDom = (createNode) =>\n vconsoles.forEach((vc) => vc.printDom(createNode()))\n\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {number} height\n */\n/* c8 ignore next 2 */\nexport const printCanvas = (canvas, height) =>\n printImg(canvas.toDataURL(), height)\n\nexport const vconsoles = set.create()\n\n/**\n * @param {Array<string|Symbol|Object|number>} args\n * @return {Array<Element>}\n */\n/* c8 ignore start */\nconst _computeLineSpans = (args) => {\n const spans = []\n const currentStyle = new Map()\n // try with formatting until we find something unsupported\n let i = 0\n for (; i < args.length; i++) {\n let arg = args[i]\n // @ts-ignore\n const style = _browserStyleMap[arg]\n if (style !== undefined) {\n currentStyle.set(style.left, style.right)\n } else {\n if (arg === undefined) {\n arg = 'undefined '\n }\n if (arg.constructor === String || arg.constructor === Number) {\n // @ts-ignore\n const span = dom.element('span', [\n pair.create('style', dom.mapToStyleString(currentStyle))\n ], [dom.text(arg.toString())])\n if (span.innerHTML === '') {\n span.innerHTML = ' '\n }\n spans.push(span)\n } else {\n break\n }\n }\n }\n // append the rest\n for (; i < args.length; i++) {\n let content = args[i]\n if (!(content instanceof Symbol)) {\n if (content.constructor !== String && content.constructor !== Number) {\n content = ' ' + json.stringify(content) + ' '\n }\n spans.push(\n dom.element('span', [], [dom.text(/** @type {string} */ (content))])\n )\n }\n }\n return spans\n}\n/* c8 ignore stop */\n\nconst lineStyle =\n 'font-family:monospace;border-bottom:1px solid #e2e2e2;padding:2px;'\n\n/* c8 ignore start */\nexport class VConsole {\n /**\n * @param {Element} dom\n */\n constructor (dom) {\n this.dom = dom\n /**\n * @type {Element}\n */\n this.ccontainer = this.dom\n this.depth = 0\n vconsoles.add(this)\n }\n\n /**\n * @param {Array<string|Symbol|Object|number>} args\n * @param {boolean} collapsed\n */\n group (args, collapsed = false) {\n eventloop.enqueue(() => {\n const triangleDown = dom.element('span', [\n pair.create('hidden', collapsed),\n pair.create('style', 'color:grey;font-size:120%;')\n ], [dom.text('▼')])\n const triangleRight = dom.element('span', [\n pair.create('hidden', !collapsed),\n pair.create('style', 'color:grey;font-size:125%;')\n ], [dom.text('▶')])\n const content = dom.element(\n 'div',\n [pair.create(\n 'style',\n `${lineStyle};padding-left:${this.depth * 10}px`\n )],\n [triangleDown, triangleRight, dom.text(' ')].concat(\n _computeLineSpans(args)\n )\n )\n const nextContainer = dom.element('div', [\n pair.create('hidden', collapsed)\n ])\n const nextLine = dom.element('div', [], [content, nextContainer])\n dom.append(this.ccontainer, [nextLine])\n this.ccontainer = nextContainer\n this.depth++\n // when header is clicked, collapse/uncollapse container\n dom.addEventListener(content, 'click', (_event) => {\n nextContainer.toggleAttribute('hidden')\n triangleDown.toggleAttribute('hidden')\n triangleRight.toggleAttribute('hidden')\n })\n })\n }\n\n /**\n * @param {Array<string|Symbol|Object|number>} args\n */\n groupCollapsed (args) {\n this.group(args, true)\n }\n\n groupEnd () {\n eventloop.enqueue(() => {\n if (this.depth > 0) {\n this.depth--\n // @ts-ignore\n this.ccontainer = this.ccontainer.parentElement.parentElement\n }\n })\n }\n\n /**\n * @param {Array<string|Symbol|Object|number>} args\n */\n print (args) {\n eventloop.enqueue(() => {\n dom.append(this.ccontainer, [\n dom.element('div', [\n pair.create(\n 'style',\n `${lineStyle};padding-left:${this.depth * 10}px`\n )\n ], _computeLineSpans(args))\n ])\n })\n }\n\n /**\n * @param {Error} err\n */\n printError (err) {\n this.print([common.RED, common.BOLD, err.toString()])\n }\n\n /**\n * @param {string} url\n * @param {number} height\n */\n printImg (url, height) {\n eventloop.enqueue(() => {\n dom.append(this.ccontainer, [\n dom.element('img', [\n pair.create('src', url),\n pair.create('height', `${math.round(height * 1.5)}px`)\n ])\n ])\n })\n }\n\n /**\n * @param {Node} node\n */\n printDom (node) {\n eventloop.enqueue(() => {\n dom.append(this.ccontainer, [node])\n })\n }\n\n destroy () {\n eventloop.enqueue(() => {\n vconsoles.delete(this)\n })\n }\n}\n/* c8 ignore stop */\n\n/**\n * @param {Element} dom\n */\n/* c8 ignore next */\nexport const createVConsole = (dom) => new VConsole(dom)\n\n/**\n * @param {string} moduleName\n * @return {function(...any):void}\n */\nexport const createModuleLogger = (moduleName) => common.createModuleLogger(print, moduleName)\n","/**\n * Utility module to create and manipulate Iterators.\n *\n * @module iterator\n */\n\n/**\n * @template T,R\n * @param {Iterator<T>} iterator\n * @param {function(T):R} f\n * @return {IterableIterator<R>}\n */\nexport const mapIterator = (iterator, f) => ({\n [Symbol.iterator] () {\n return this\n },\n // @ts-ignore\n next () {\n const r = iterator.next()\n return { value: r.done ? undefined : f(r.value), done: r.done }\n }\n})\n\n/**\n * @template T\n * @param {function():IteratorResult<T>} next\n * @return {IterableIterator<T>}\n */\nexport const createIterator = next => ({\n /**\n * @return {IterableIterator<T>}\n */\n [Symbol.iterator] () {\n return this\n },\n // @ts-ignore\n next\n})\n\n/**\n * @template T\n * @param {Iterator<T>} iterator\n * @param {function(T):boolean} filter\n */\nexport const iteratorFilter = (iterator, filter) => createIterator(() => {\n let res\n do {\n res = iterator.next()\n } while (!res.done && !filter(res.value))\n return res\n})\n\n/**\n * @template T,M\n * @param {Iterator<T>} iterator\n * @param {function(T):M} fmap\n */\nexport const iteratorMap = (iterator, fmap) => createIterator(() => {\n const { done, value } = iterator.next()\n return { done, value: done ? undefined : fmap(value) }\n})\n","import { ObservableV2 } from 'lib0/observable';\nimport * as array from 'lib0/array';\nimport * as math from 'lib0/math';\nimport * as map from 'lib0/map';\nimport * as encoding from 'lib0/encoding';\nimport * as decoding from 'lib0/decoding';\nimport * as random from 'lib0/random';\nimport * as promise from 'lib0/promise';\nimport * as buffer from 'lib0/buffer';\nimport * as error from 'lib0/error';\nimport * as binary from 'lib0/binary';\nimport * as f from 'lib0/function';\nimport { callAll } from 'lib0/function';\nimport * as set from 'lib0/set';\nimport * as logging from 'lib0/logging';\nimport * as time from 'lib0/time';\nimport * as string from 'lib0/string';\nimport * as iterator from 'lib0/iterator';\nimport * as object from 'lib0/object';\nimport * as env from 'lib0/environment';\n\n/**\n * This is an abstract interface that all Connectors should implement to keep them interchangeable.\n *\n * @note This interface is experimental and it is not advised to actually inherit this class.\n * It just serves as typing information.\n *\n * @extends {ObservableV2<any>}\n */\nclass AbstractConnector extends ObservableV2 {\n /**\n * @param {Doc} ydoc\n * @param {any} awareness\n */\n constructor (ydoc, awareness) {\n super();\n this.doc = ydoc;\n this.awareness = awareness;\n }\n}\n\nclass DeleteItem {\n /**\n * @param {number} clock\n * @param {number} len\n */\n constructor (clock, len) {\n /**\n * @type {number}\n */\n this.clock = clock;\n /**\n * @type {number}\n */\n this.len = len;\n }\n}\n\n/**\n * We no longer maintain a DeleteStore. DeleteSet is a temporary object that is created when needed.\n * - When created in a transaction, it must only be accessed after sorting, and merging\n * - This DeleteSet is send to other clients\n * - We do not create a DeleteSet when we send a sync message. The DeleteSet message is created directly from StructStore\n * - We read a DeleteSet as part of a sync/update message. In this case the DeleteSet is already sorted and merged.\n */\nclass DeleteSet {\n constructor () {\n /**\n * @type {Map<number,Array<DeleteItem>>}\n */\n this.clients = new Map();\n }\n}\n\n/**\n * Iterate over all structs that the DeleteSet gc's.\n *\n * @param {Transaction} transaction\n * @param {DeleteSet} ds\n * @param {function(GC|Item):void} f\n *\n * @function\n */\nconst iterateDeletedStructs = (transaction, ds, f) =>\n ds.clients.forEach((deletes, clientid) => {\n const structs = /** @type {Array<GC|Item>} */ (transaction.doc.store.clients.get(clientid));\n if (structs != null) {\n const lastStruct = structs[structs.length - 1];\n const clockState = lastStruct.id.clock + lastStruct.length;\n for (let i = 0, del = deletes[i]; i < deletes.length && del.clock < clockState; del = deletes[++i]) {\n iterateStructs(transaction, structs, del.clock, del.len, f);\n }\n }\n });\n\n/**\n * @param {Array<DeleteItem>} dis\n * @param {number} clock\n * @return {number|null}\n *\n * @private\n * @function\n */\nconst findIndexDS = (dis, clock) => {\n let left = 0;\n let right = dis.length - 1;\n while (left <= right) {\n const midindex = math.floor((left + right) / 2);\n const mid = dis[midindex];\n const midclock = mid.clock;\n if (midclock <= clock) {\n if (clock < midclock + mid.len) {\n return midindex\n }\n left = midindex + 1;\n } else {\n right = midindex - 1;\n }\n }\n return null\n};\n\n/**\n * @param {DeleteSet} ds\n * @param {ID} id\n * @return {boolean}\n *\n * @private\n * @function\n */\nconst isDeleted = (ds, id) => {\n const dis = ds.clients.get(id.client);\n return dis !== undefined && findIndexDS(dis, id.clock) !== null\n};\n\n/**\n * @param {DeleteSet} ds\n *\n * @private\n * @function\n */\nconst sortAndMergeDeleteSet = ds => {\n ds.clients.forEach(dels => {\n dels.sort((a, b) => a.clock - b.clock);\n // merge items without filtering or splicing the array\n // i is the current pointer\n // j refers to the current insert position for the pointed item\n // try to merge dels[i] into dels[j-1] or set dels[j]=dels[i]\n let i, j;\n for (i = 1, j = 1; i < dels.length; i++) {\n const left = dels[j - 1];\n const right = dels[i];\n if (left.clock + left.len >= right.clock) {\n left.len = math.max(left.len, right.clock + right.len - left.clock);\n } else {\n if (j < i) {\n dels[j] = right;\n }\n j++;\n }\n }\n dels.length = j;\n });\n};\n\n/**\n * @param {Array<DeleteSet>} dss\n * @return {DeleteSet} A fresh DeleteSet\n */\nconst mergeDeleteSets = dss => {\n const merged = new DeleteSet();\n for (let dssI = 0; dssI < dss.length; dssI++) {\n dss[dssI].clients.forEach((delsLeft, client) => {\n if (!merged.clients.has(client)) {\n // Write all missing keys from current ds and all following.\n // If merged already contains `client` current ds has already been added.\n /**\n * @type {Array<DeleteItem>}\n */\n const dels = delsLeft.slice();\n for (let i = dssI + 1; i < dss.length; i++) {\n array.appendTo(dels, dss[i].clients.get(client) || []);\n }\n merged.clients.set(client, dels);\n }\n });\n }\n sortAndMergeDeleteSet(merged);\n return merged\n};\n\n/**\n * @param {DeleteSet} ds\n * @param {number} client\n * @param {number} clock\n * @param {number} length\n *\n * @private\n * @function\n */\nconst addToDeleteSet = (ds, client, clock, length) => {\n map.setIfUndefined(ds.clients, client, () => /** @type {Array<DeleteItem>} */ ([])).push(new DeleteItem(clock, length));\n};\n\nconst createDeleteSet = () => new DeleteSet();\n\n/**\n * @param {StructStore} ss\n * @return {DeleteSet} Merged and sorted DeleteSet\n *\n * @private\n * @function\n */\nconst createDeleteSetFromStructStore = ss => {\n const ds = createDeleteSet();\n ss.clients.forEach((structs, client) => {\n /**\n * @type {Array<DeleteItem>}\n */\n const dsitems = [];\n for (let i = 0; i < structs.length; i++) {\n const struct = structs[i];\n if (struct.deleted) {\n const clock = struct.id.clock;\n let len = struct.length;\n if (i + 1 < structs.length) {\n for (let next = structs[i + 1]; i + 1 < structs.length && next.deleted; next = structs[++i + 1]) {\n len += next.length;\n }\n }\n dsitems.push(new DeleteItem(clock, len));\n }\n }\n if (dsitems.length > 0) {\n ds.clients.set(client, dsitems);\n }\n });\n return ds\n};\n\n/**\n * @param {DSEncoderV1 | DSEncoderV2} encoder\n * @param {DeleteSet} ds\n *\n * @private\n * @function\n */\nconst writeDeleteSet = (encoder, ds) => {\n encoding.writeVarUint(encoder.restEncoder, ds.clients.size);\n\n // Ensure that the delete set is written in a deterministic order\n array.from(ds.clients.entries())\n .sort((a, b) => b[0] - a[0])\n .forEach(([client, dsitems]) => {\n encoder.resetDsCurVal();\n encoding.writeVarUint(encoder.restEncoder, client);\n const len = dsitems.length;\n encoding.writeVarUint(encoder.restEncoder, len);\n for (let i = 0; i < len; i++) {\n const item = dsitems[i];\n encoder.writeDsClock(item.clock);\n encoder.writeDsLen(item.len);\n }\n });\n};\n\n/**\n * @param {DSDecoderV1 | DSDecoderV2} decoder\n * @return {DeleteSet}\n *\n * @private\n * @function\n */\nconst readDeleteSet = decoder => {\n const ds = new DeleteSet();\n const numClients = decoding.readVarUint(decoder.restDecoder);\n for (let i = 0; i < numClients; i++) {\n decoder.resetDsCurVal();\n const client = decoding.readVarUint(decoder.restDecoder);\n const numberOfDeletes = decoding.readVarUint(decoder.restDecoder);\n if (numberOfDeletes > 0) {\n const dsField = map.setIfUndefined(ds.clients, client, () => /** @type {Array<DeleteItem>} */ ([]));\n for (let i = 0; i < numberOfDeletes; i++) {\n dsField.push(new DeleteItem(decoder.readDsClock(), decoder.readDsLen()));\n }\n }\n }\n return ds\n};\n\n/**\n * @todo YDecoder also contains references to String and other Decoders. Would make sense to exchange YDecoder.toUint8Array for YDecoder.DsToUint8Array()..\n */\n\n/**\n * @param {DSDecoderV1 | DSDecoderV2} decoder\n * @param {Transaction} transaction\n * @param {StructStore} store\n * @return {Uint8Array|null} Returns a v2 update containing all deletes that couldn't be applied yet; or null if all deletes were applied successfully.\n *\n * @private\n * @function\n */\nconst readAndApplyDeleteSet = (decoder, transaction, store) => {\n const unappliedDS = new DeleteSet();\n const numClients = decoding.readVarUint(decoder.restDecoder);\n for (let i = 0; i < numClients; i++) {\n decoder.resetDsCurVal();\n const client = decoding.readVarUint(decoder.restDecoder);\n const numberOfDeletes = decoding.readVarUint(decoder.restDecoder);\n const structs = store.clients.get(client) || [];\n const state = getState(store, client);\n for (let i = 0; i < numberOfDeletes; i++) {\n const clock = decoder.readDsClock();\n const clockEnd = clock + decoder.readDsLen();\n if (clock < state) {\n if (state < clockEnd) {\n addToDeleteSet(unappliedDS, client, state, clockEnd - state);\n }\n let index = findIndexSS(structs, clock);\n /**\n * We can ignore the case of GC and Delete structs, because we are going to skip them\n * @type {Item}\n */\n // @ts-ignore\n let struct = structs[index];\n // split the first item if necessary\n if (!struct.deleted && struct.id.clock < clock) {\n structs.splice(index + 1, 0, splitItem(transaction, struct, clock - struct.id.clock));\n index++; // increase we now want to use the next struct\n }\n while (index < structs.length) {\n // @ts-ignore\n struct = structs[index++];\n if (struct.id.clock < clockEnd) {\n if (!struct.deleted) {\n if (clockEnd < struct.id.clock + struct.length) {\n structs.splice(index, 0, splitItem(transaction, struct, clockEnd - struct.id.clock));\n }\n struct.delete(transaction);\n }\n } else {\n break\n }\n }\n } else {\n addToDeleteSet(unappliedDS, client, clock, clockEnd - clock);\n }\n }\n }\n if (unappliedDS.clients.size > 0) {\n const ds = new UpdateEncoderV2();\n encoding.writeVarUint(ds.restEncoder, 0); // encode 0 structs\n writeDeleteSet(ds, unappliedDS);\n return ds.toUint8Array()\n }\n return null\n};\n\n/**\n * @param {DeleteSet} ds1\n * @param {DeleteSet} ds2\n */\nconst equalDeleteSets = (ds1, ds2) => {\n if (ds1.clients.size !== ds2.clients.size) return false\n for (const [client, deleteItems1] of ds1.clients.entries()) {\n const deleteItems2 = /** @type {Array<import('../internals.js').DeleteItem>} */ (ds2.clients.get(client));\n if (deleteItems2 === undefined || deleteItems1.length !== deleteItems2.length) return false\n for (let i = 0; i < deleteItems1.length; i++) {\n const di1 = deleteItems1[i];\n const di2 = deleteItems2[i];\n if (di1.clock !== di2.clock || di1.len !== di2.len) {\n return false\n }\n }\n }\n return true\n};\n\n/**\n * @module Y\n */\n\n\nconst generateNewClientId = random.uint32;\n\n/**\n * @typedef {Object} DocOpts\n * @property {boolean} [DocOpts.gc=true] Disable garbage collection (default: gc=true)\n * @property {function(Item):boolean} [DocOpts.gcFilter] Will be called before an Item is garbage collected. Return false to keep the Item.\n * @property {string} [DocOpts.guid] Define a globally unique identifier for this document\n * @property {string | null} [DocOpts.collectionid] Associate this document with a collection. This only plays a role if your provider has a concept of collection.\n * @property {any} [DocOpts.meta] Any kind of meta information you want to associate with this document. If this is a subdocument, remote peers will store the meta information as well.\n * @property {boolean} [DocOpts.autoLoad] If a subdocument, automatically load document. If this is a subdocument, remote peers will load the document as well automatically.\n * @property {boolean} [DocOpts.shouldLoad] Whether the document should be synced by the provider now. This is toggled to true when you call ydoc.load()\n */\n\n/**\n * @typedef {Object} DocEvents\n * @property {function(Doc):void} DocEvents.destroy\n * @property {function(Doc):void} DocEvents.load\n * @property {function(boolean, Doc):void} DocEvents.sync\n * @property {function(Uint8Array, any, Doc, Transaction):void} DocEvents.update\n * @property {function(Uint8Array, any, Doc, Transaction):void} DocEvents.updateV2\n * @property {function(Doc):void} DocEvents.beforeAllTransactions\n * @property {function(Transaction, Doc):void} DocEvents.beforeTransaction\n * @property {function(Transaction, Doc):void} DocEvents.beforeObserverCalls\n * @property {function(Transaction, Doc):void} DocEvents.afterTransaction\n * @property {function(Transaction, Doc):void} DocEvents.afterTransactionCleanup\n * @property {function(Doc, Array<Transaction>):void} DocEvents.afterAllTransactions\n * @property {function({ loaded: Set<Doc>, added: Set<Doc>, removed: Set<Doc> }, Doc, Transaction):void} DocEvents.subdocs\n */\n\n/**\n * A Yjs instance handles the state of shared data.\n * @extends ObservableV2<DocEvents>\n */\nclass Doc extends ObservableV2 {\n /**\n * @param {DocOpts} opts configuration\n */\n constructor ({ guid = random.uuidv4(), collectionid = null, gc = true, gcFilter = () => true, meta = null, autoLoad = false, shouldLoad = true } = {}) {\n super();\n this.gc = gc;\n this.gcFilter = gcFilter;\n this.clientID = generateNewClientId();\n this.guid = guid;\n this.collectionid = collectionid;\n /**\n * @type {Map<string, AbstractType<YEvent<any>>>}\n */\n this.share = new Map();\n this.store = new StructStore();\n /**\n * @type {Transaction | null}\n */\n this._transaction = null;\n /**\n * @type {Array<Transaction>}\n */\n this._transactionCleanups = [];\n /**\n * @type {Set<Doc>}\n */\n this.subdocs = new Set();\n /**\n * If this document is a subdocument - a document integrated into another document - then _item is defined.\n * @type {Item?}\n */\n this._item = null;\n this.shouldLoad = shouldLoad;\n this.autoLoad = autoLoad;\n this.meta = meta;\n /**\n * This is set to true when the persistence provider loaded the document from the database or when the `sync` event fires.\n * Note that not all providers implement this feature. Provider authors are encouraged to fire the `load` event when the doc content is loaded from the database.\n *\n * @type {boolean}\n */\n this.isLoaded = false;\n /**\n * This is set to true when the connection provider has successfully synced with a backend.\n * Note that when using peer-to-peer providers this event may not provide very useful.\n * Also note that not all providers implement this feature. Provider authors are encouraged to fire\n * the `sync` event when the doc has been synced (with `true` as a parameter) or if connection is\n * lost (with false as a parameter).\n */\n this.isSynced = false;\n this.isDestroyed = false;\n /**\n * Promise that resolves once the document has been loaded from a persistence provider.\n */\n this.whenLoaded = promise.create(resolve => {\n this.on('load', () => {\n this.isLoaded = true;\n resolve(this);\n });\n });\n const provideSyncedPromise = () => promise.create(resolve => {\n /**\n * @param {boolean} isSynced\n */\n const eventHandler = (isSynced) => {\n if (isSynced === undefined || isSynced === true) {\n this.off('sync', eventHandler);\n resolve();\n }\n };\n this.on('sync', eventHandler);\n });\n this.on('sync', isSynced => {\n if (isSynced === false && this.isSynced) {\n this.whenSynced = provideSyncedPromise();\n }\n this.isSynced = isSynced === undefined || isSynced === true;\n if (this.isSynced && !this.isLoaded) {\n this.emit('load', [this]);\n }\n });\n /**\n * Promise that resolves once the document has been synced with a backend.\n * This promise is recreated when the connection is lost.\n * Note the documentation about the `isSynced` property.\n */\n this.whenSynced = provideSyncedPromise();\n }\n\n /**\n * Notify the parent document that you request to load data into this subdocument (if it is a subdocument).\n *\n * `load()` might be used in the future to request any provider to load the most current data.\n *\n * It is safe to call `load()` multiple times.\n */\n load () {\n const item = this._item;\n if (item !== null && !this.shouldLoad) {\n transact(/** @type {any} */ (item.parent).doc, transaction => {\n transaction.subdocsLoaded.add(this);\n }, null, true);\n }\n this.shouldLoad = true;\n }\n\n getSubdocs () {\n return this.subdocs\n }\n\n getSubdocGuids () {\n return new Set(array.from(this.subdocs).map(doc => doc.guid))\n }\n\n /**\n * Changes that happen inside of a transaction are bundled. This means that\n * the observer fires _after_ the transaction is finished and that all changes\n * that happened inside of the transaction are sent as one message to the\n * other peers.\n *\n * @template T\n * @param {function(Transaction):T} f The function that should be executed as a transaction\n * @param {any} [origin] Origin of who started the transaction. Will be stored on transaction.origin\n * @return T\n *\n * @public\n */\n transact (f, origin = null) {\n return transact(this, f, origin)\n }\n\n /**\n * Define a shared data type.\n *\n * Multiple calls of `ydoc.get(name, TypeConstructor)` yield the same result\n * and do not overwrite each other. I.e.\n * `ydoc.get(name, Y.Array) === ydoc.get(name, Y.Array)`\n *\n * After this method is called, the type is also available on `ydoc.share.get(name)`.\n *\n * *Best Practices:*\n * Define all types right after the Y.Doc instance is created and store them in a separate object.\n * Also use the typed methods `getText(name)`, `getArray(name)`, ..\n *\n * @template {typeof AbstractType<any>} Type\n * @example\n * const ydoc = new Y.Doc(..)\n * const appState = {\n * document: ydoc.getText('document')\n * comments: ydoc.getArray('comments')\n * }\n *\n * @param {string} name\n * @param {Type} TypeConstructor The constructor of the type definition. E.g. Y.Text, Y.Array, Y.Map, ...\n * @return {InstanceType<Type>} The created type. Constructed with TypeConstructor\n *\n * @public\n */\n get (name, TypeConstructor = /** @type {any} */ (AbstractType)) {\n const type = map.setIfUndefined(this.share, name, () => {\n // @ts-ignore\n const t = new TypeConstructor();\n t._integrate(this, null);\n return t\n });\n const Constr = type.constructor;\n if (TypeConstructor !== AbstractType && Constr !== TypeConstructor) {\n if (Constr === AbstractType) {\n // @ts-ignore\n const t = new TypeConstructor();\n t._map = type._map;\n type._map.forEach(/** @param {Item?} n */ n => {\n for (; n !== null; n = n.left) {\n // @ts-ignore\n n.parent = t;\n }\n });\n t._start = type._start;\n for (let n = t._start; n !== null; n = n.right) {\n n.parent = t;\n }\n t._length = type._length;\n this.share.set(name, t);\n t._integrate(this, null);\n return /** @type {InstanceType<Type>} */ (t)\n } else {\n throw new Error(`Type with the name ${name} has already been defined with a different constructor`)\n }\n }\n return /** @type {InstanceType<Type>} */ (type)\n }\n\n /**\n * @template T\n * @param {string} [name]\n * @return {YArray<T>}\n *\n * @public\n */\n getArray (name = '') {\n return /** @type {YArray<T>} */ (this.get(name, YArray))\n }\n\n /**\n * @param {string} [name]\n * @return {YText}\n *\n * @public\n */\n getText (name = '') {\n return this.get(name, YText)\n }\n\n /**\n * @template T\n * @param {string} [name]\n * @return {YMap<T>}\n *\n * @public\n */\n getMap (name = '') {\n return /** @type {YMap<T>} */ (this.get(name, YMap))\n }\n\n /**\n * @param {string} [name]\n * @return {YXmlElement}\n *\n * @public\n */\n getXmlElement (name = '') {\n return /** @type {YXmlElement<{[key:string]:string}>} */ (this.get(name, YXmlElement))\n }\n\n /**\n * @param {string} [name]\n * @return {YXmlFragment}\n *\n * @public\n */\n getXmlFragment (name = '') {\n return this.get(name, YXmlFragment)\n }\n\n /**\n * Converts the entire document into a js object, recursively traversing each yjs type\n * Doesn't log types that have not been defined (using ydoc.getType(..)).\n *\n * @deprecated Do not use this method and rather call toJSON directly on the shared types.\n *\n * @return {Object<string, any>}\n */\n toJSON () {\n /**\n * @type {Object<string, any>}\n */\n const doc = {};\n\n this.share.forEach((value, key) => {\n doc[key] = value.toJSON();\n });\n\n return doc\n }\n\n /**\n * Emit `destroy` event and unregister all event handlers.\n */\n destroy () {\n this.isDestroyed = true;\n array.from(this.subdocs).forEach(subdoc => subdoc.destroy());\n const item = this._item;\n if (item !== null) {\n this._item = null;\n const content = /** @type {ContentDoc} */ (item.content);\n content.doc = new Doc({ guid: this.guid, ...content.opts, shouldLoad: false });\n content.doc._item = item;\n transact(/** @type {any} */ (item).parent.doc, transaction => {\n const doc = content.doc;\n if (!item.deleted) {\n transaction.subdocsAdded.add(doc);\n }\n transaction.subdocsRemoved.add(this);\n }, null, true);\n }\n // @ts-ignore\n this.emit('destroyed', [true]); // DEPRECATED!\n this.emit('destroy', [this]);\n super.destroy();\n }\n}\n\nclass DSDecoderV1 {\n /**\n * @param {decoding.Decoder} decoder\n */\n constructor (decoder) {\n this.restDecoder = decoder;\n }\n\n resetDsCurVal () {\n // nop\n }\n\n /**\n * @return {number}\n */\n readDsClock () {\n return decoding.readVarUint(this.restDecoder)\n }\n\n /**\n * @return {number}\n */\n readDsLen () {\n return decoding.readVarUint(this.restDecoder)\n }\n}\n\nclass UpdateDecoderV1 extends DSDecoderV1 {\n /**\n * @return {ID}\n */\n readLeftID () {\n return createID(decoding.readVarUint(this.restDecoder), decoding.readVarUint(this.restDecoder))\n }\n\n /**\n * @return {ID}\n */\n readRightID () {\n return createID(decoding.readVarUint(this.restDecoder), decoding.readVarUint(this.restDecoder))\n }\n\n /**\n * Read the next client id.\n * Use this in favor of readID whenever possible to reduce the number of objects created.\n */\n readClient () {\n return decoding.readVarUint(this.restDecoder)\n }\n\n /**\n * @return {number} info An unsigned 8-bit integer\n */\n readInfo () {\n return decoding.readUint8(this.restDecoder)\n }\n\n /**\n * @return {string}\n */\n readString () {\n return decoding.readVarString(this.restDecoder)\n }\n\n /**\n * @return {boolean} isKey\n */\n readParentInfo () {\n return decoding.readVarUint(this.restDecoder) === 1\n }\n\n /**\n * @return {number} info An unsigned 8-bit integer\n */\n readTypeRef () {\n return decoding.readVarUint(this.restDecoder)\n }\n\n /**\n * Write len of a struct - well suited for Opt RLE encoder.\n *\n * @return {number} len\n */\n readLen () {\n return decoding.readVarUint(this.restDecoder)\n }\n\n /**\n * @return {any}\n */\n readAny () {\n return decoding.readAny(this.restDecoder)\n }\n\n /**\n * @return {Uint8Array}\n */\n readBuf () {\n return buffer.copyUint8Array(decoding.readVarUint8Array(this.restDecoder))\n }\n\n /**\n * Legacy implementation uses JSON parse. We use any-decoding in v2.\n *\n * @return {any}\n */\n readJSON () {\n return JSON.parse(decoding.readVarString(this.restDecoder))\n }\n\n /**\n * @return {string}\n */\n readKey () {\n return decoding.readVarString(this.restDecoder)\n }\n}\n\nclass DSDecoderV2 {\n /**\n * @param {decoding.Decoder} decoder\n */\n constructor (decoder) {\n /**\n * @private\n */\n this.dsCurrVal = 0;\n this.restDecoder = decoder;\n }\n\n resetDsCurVal () {\n this.dsCurrVal = 0;\n }\n\n /**\n * @return {number}\n */\n readDsClock () {\n this.dsCurrVal += decoding.readVarUint(this.restDecoder);\n return this.dsCurrVal\n }\n\n /**\n * @return {number}\n */\n readDsLen () {\n const diff = decoding.readVarUint(this.restDecoder) + 1;\n this.dsCurrVal += diff;\n return diff\n }\n}\n\nclass UpdateDecoderV2 extends DSDecoderV2 {\n /**\n * @param {decoding.Decoder} decoder\n */\n constructor (decoder) {\n super(decoder);\n /**\n * List of cached keys. If the keys[id] does not exist, we read a new key\n * from stringEncoder and push it to keys.\n *\n * @type {Array<string>}\n */\n this.keys = [];\n decoding.readVarUint(decoder); // read feature flag - currently unused\n this.keyClockDecoder = new decoding.IntDiffOptRleDecoder(decoding.readVarUint8Array(decoder));\n this.clientDecoder = new decoding.UintOptRleDecoder(decoding.readVarUint8Array(decoder));\n this.leftClockDecoder = new decoding.IntDiffOptRleDecoder(decoding.readVarUint8Array(decoder));\n this.rightClockDecoder = new decoding.IntDiffOptRleDecoder(decoding.readVarUint8Array(decoder));\n this.infoDecoder = new decoding.RleDecoder(decoding.readVarUint8Array(decoder), decoding.readUint8);\n this.stringDecoder = new decoding.StringDecoder(decoding.readVarUint8Array(decoder));\n this.parentInfoDecoder = new decoding.RleDecoder(decoding.readVarUint8Array(decoder), decoding.readUint8);\n this.typeRefDecoder = new decoding.UintOptRleDecoder(decoding.readVarUint8Array(decoder));\n this.lenDecoder = new decoding.UintOptRleDecoder(decoding.readVarUint8Array(decoder));\n }\n\n /**\n * @return {ID}\n */\n readLeftID () {\n return new ID(this.clientDecoder.read(), this.leftClockDecoder.read())\n }\n\n /**\n * @return {ID}\n */\n readRightID () {\n return new ID(this.clientDecoder.read(), this.rightClockDecoder.read())\n }\n\n /**\n * Read the next client id.\n * Use this in favor of readID whenever possible to reduce the number of objects created.\n */\n readClient () {\n return this.clientDecoder.read()\n }\n\n /**\n * @return {number} info An unsigned 8-bit integer\n */\n readInfo () {\n return /** @type {number} */ (this.infoDecoder.read())\n }\n\n /**\n * @return {string}\n */\n readString () {\n return this.stringDecoder.read()\n }\n\n /**\n * @return {boolean}\n */\n readParentInfo () {\n return this.parentInfoDecoder.read() === 1\n }\n\n /**\n * @return {number} An unsigned 8-bit integer\n */\n readTypeRef () {\n return this.typeRefDecoder.read()\n }\n\n /**\n * Write len of a struct - well suited for Opt RLE encoder.\n *\n * @return {number}\n */\n readLen () {\n return this.lenDecoder.read()\n }\n\n /**\n * @return {any}\n */\n readAny () {\n return decoding.readAny(this.restDecoder)\n }\n\n /**\n * @return {Uint8Array}\n */\n readBuf () {\n return decoding.readVarUint8Array(this.restDecoder)\n }\n\n /**\n * This is mainly here for legacy purposes.\n *\n * Initial we incoded objects using JSON. Now we use the much faster lib0/any-encoder. This method mainly exists for legacy purposes for the v1 encoder.\n *\n * @return {any}\n */\n readJSON () {\n return decoding.readAny(this.restDecoder)\n }\n\n /**\n * @return {string}\n */\n readKey () {\n const keyClock = this.keyClockDecoder.read();\n if (keyClock < this.keys.length) {\n return this.keys[keyClock]\n } else {\n const key = this.stringDecoder.read();\n this.keys.push(key);\n return key\n }\n }\n}\n\nclass DSEncoderV1 {\n constructor () {\n this.restEncoder = encoding.createEncoder();\n }\n\n toUint8Array () {\n return encoding.toUint8Array(this.restEncoder)\n }\n\n resetDsCurVal () {\n // nop\n }\n\n /**\n * @param {number} clock\n */\n writeDsClock (clock) {\n encoding.writeVarUint(this.restEncoder, clock);\n }\n\n /**\n * @param {number} len\n */\n writeDsLen (len) {\n encoding.writeVarUint(this.restEncoder, len);\n }\n}\n\nclass UpdateEncoderV1 extends DSEncoderV1 {\n /**\n * @param {ID} id\n */\n writeLeftID (id) {\n encoding.writeVarUint(this.restEncoder, id.client);\n encoding.writeVarUint(this.restEncoder, id.clock);\n }\n\n /**\n * @param {ID} id\n */\n writeRightID (id) {\n encoding.writeVarUint(this.restEncoder, id.client);\n encoding.writeVarUint(this.restEncoder, id.clock);\n }\n\n /**\n * Use writeClient and writeClock instead of writeID if possible.\n * @param {number} client\n */\n writeClient (client) {\n encoding.writeVarUint(this.restEncoder, client);\n }\n\n /**\n * @param {number} info An unsigned 8-bit integer\n */\n writeInfo (info) {\n encoding.writeUint8(this.restEncoder, info);\n }\n\n /**\n * @param {string} s\n */\n writeString (s) {\n encoding.writeVarString(this.restEncoder, s);\n }\n\n /**\n * @param {boolean} isYKey\n */\n writeParentInfo (isYKey) {\n encoding.writeVarUint(this.restEncoder, isYKey ? 1 : 0);\n }\n\n /**\n * @param {number} info An unsigned 8-bit integer\n */\n writeTypeRef (info) {\n encoding.writeVarUint(this.restEncoder, info);\n }\n\n /**\n * Write len of a struct - well suited for Opt RLE encoder.\n *\n * @param {number} len\n */\n writeLen (len) {\n encoding.writeVarUint(this.restEncoder, len);\n }\n\n /**\n * @param {any} any\n */\n writeAny (any) {\n encoding.writeAny(this.restEncoder, any);\n }\n\n /**\n * @param {Uint8Array} buf\n */\n writeBuf (buf) {\n encoding.writeVarUint8Array(this.restEncoder, buf);\n }\n\n /**\n * @param {any} embed\n */\n writeJSON (embed) {\n encoding.writeVarString(this.restEncoder, JSON.stringify(embed));\n }\n\n /**\n * @param {string} key\n */\n writeKey (key) {\n encoding.writeVarString(this.restEncoder, key);\n }\n}\n\nclass DSEncoderV2 {\n constructor () {\n this.restEncoder = encoding.createEncoder(); // encodes all the rest / non-optimized\n this.dsCurrVal = 0;\n }\n\n toUint8Array () {\n return encoding.toUint8Array(this.restEncoder)\n }\n\n resetDsCurVal () {\n this.dsCurrVal = 0;\n }\n\n /**\n * @param {number} clock\n */\n writeDsClock (clock) {\n const diff = clock - this.dsCurrVal;\n this.dsCurrVal = clock;\n encoding.writeVarUint(this.restEncoder, diff);\n }\n\n /**\n * @param {number} len\n */\n writeDsLen (len) {\n if (len === 0) {\n error.unexpectedCase();\n }\n encoding.writeVarUint(this.restEncoder, len - 1);\n this.dsCurrVal += len;\n }\n}\n\nclass UpdateEncoderV2 extends DSEncoderV2 {\n constructor () {\n super();\n /**\n * @type {Map<string,number>}\n */\n this.keyMap = new Map();\n /**\n * Refers to the next unique key-identifier to me used.\n * See writeKey method for more information.\n *\n * @type {number}\n */\n this.keyClock = 0;\n this.keyClockEncoder = new encoding.IntDiffOptRleEncoder();\n this.clientEncoder = new encoding.UintOptRleEncoder();\n this.leftClockEncoder = new encoding.IntDiffOptRleEncoder();\n this.rightClockEncoder = new encoding.IntDiffOptRleEncoder();\n this.infoEncoder = new encoding.RleEncoder(encoding.writeUint8);\n this.stringEncoder = new encoding.StringEncoder();\n this.parentInfoEncoder = new encoding.RleEncoder(encoding.writeUint8);\n this.typeRefEncoder = new encoding.UintOptRleEncoder();\n this.lenEncoder = new encoding.UintOptRleEncoder();\n }\n\n toUint8Array () {\n const encoder = encoding.createEncoder();\n encoding.writeVarUint(encoder, 0); // this is a feature flag that we might use in the future\n encoding.writeVarUint8Array(encoder, this.keyClockEncoder.toUint8Array());\n encoding.writeVarUint8Array(encoder, this.clientEncoder.toUint8Array());\n encoding.writeVarUint8Array(encoder, this.leftClockEncoder.toUint8Array());\n encoding.writeVarUint8Array(encoder, this.rightClockEncoder.toUint8Array());\n encoding.writeVarUint8Array(encoder, encoding.toUint8Array(this.infoEncoder));\n encoding.writeVarUint8Array(encoder, this.stringEncoder.toUint8Array());\n encoding.writeVarUint8Array(encoder, encoding.toUint8Array(this.parentInfoEncoder));\n encoding.writeVarUint8Array(encoder, this.typeRefEncoder.toUint8Array());\n encoding.writeVarUint8Array(encoder, this.lenEncoder.toUint8Array());\n // @note The rest encoder is appended! (note the missing var)\n encoding.writeUint8Array(encoder, encoding.toUint8Array(this.restEncoder));\n return encoding.toUint8Array(encoder)\n }\n\n /**\n * @param {ID} id\n */\n writeLeftID (id) {\n this.clientEncoder.write(id.client);\n this.leftClockEncoder.write(id.clock);\n }\n\n /**\n * @param {ID} id\n */\n writeRightID (id) {\n this.clientEncoder.write(id.client);\n this.rightClockEncoder.write(id.clock);\n }\n\n /**\n * @param {number} client\n */\n writeClient (client) {\n this.clientEncoder.write(client);\n }\n\n /**\n * @param {number} info An unsigned 8-bit integer\n */\n writeInfo (info) {\n this.infoEncoder.write(info);\n }\n\n /**\n * @param {string} s\n */\n writeString (s) {\n this.stringEncoder.write(s);\n }\n\n /**\n * @param {boolean} isYKey\n */\n writeParentInfo (isYKey) {\n this.parentInfoEncoder.write(isYKey ? 1 : 0);\n }\n\n /**\n * @param {number} info An unsigned 8-bit integer\n */\n writeTypeRef (info) {\n this.typeRefEncoder.write(info);\n }\n\n /**\n * Write len of a struct - well suited for Opt RLE encoder.\n *\n * @param {number} len\n */\n writeLen (len) {\n this.lenEncoder.write(len);\n }\n\n /**\n * @param {any} any\n */\n writeAny (any) {\n encoding.writeAny(this.restEncoder, any);\n }\n\n /**\n * @param {Uint8Array} buf\n */\n writeBuf (buf) {\n encoding.writeVarUint8Array(this.restEncoder, buf);\n }\n\n /**\n * This is mainly here for legacy purposes.\n *\n * Initial we incoded objects using JSON. Now we use the much faster lib0/any-encoder. This method mainly exists for legacy purposes for the v1 encoder.\n *\n * @param {any} embed\n */\n writeJSON (embed) {\n encoding.writeAny(this.restEncoder, embed);\n }\n\n /**\n * Property keys are often reused. For example, in y-prosemirror the key `bold` might\n * occur very often. For a 3d application, the key `position` might occur very often.\n *\n * We cache these keys in a Map and refer to them via a unique number.\n *\n * @param {string} key\n */\n writeKey (key) {\n const clock = this.keyMap.get(key);\n if (clock === undefined) {\n /**\n * @todo uncomment to introduce this feature finally\n *\n * Background. The ContentFormat object was always encoded using writeKey, but the decoder used to use readString.\n * Furthermore, I forgot to set the keyclock. So everything was working fine.\n *\n * However, this feature here is basically useless as it is not being used (it actually only consumes extra memory).\n *\n * I don't know yet how to reintroduce this feature..\n *\n * Older clients won't be able to read updates when we reintroduce this feature. So this should probably be done using a flag.\n *\n */\n // this.keyMap.set(key, this.keyClock)\n this.keyClockEncoder.write(this.keyClock++);\n this.stringEncoder.write(key);\n } else {\n this.keyClockEncoder.write(clock);\n }\n }\n}\n\n/**\n * @module encoding\n */\n/*\n * We use the first five bits in the info flag for determining the type of the struct.\n *\n * 0: GC\n * 1: Item with Deleted content\n * 2: Item with JSON content\n * 3: Item with Binary content\n * 4: Item with String content\n * 5: Item with Embed content (for richtext content)\n * 6: Item with Format content (a formatting marker for richtext content)\n * 7: Item with Type\n */\n\n\n/**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {Array<GC|Item>} structs All structs by `client`\n * @param {number} client\n * @param {number} clock write structs starting with `ID(client,clock)`\n *\n * @function\n */\nconst writeStructs = (encoder, structs, client, clock) => {\n // write first id\n clock = math.max(clock, structs[0].id.clock); // make sure the first id exists\n const startNewStructs = findIndexSS(structs, clock);\n // write # encoded structs\n encoding.writeVarUint(encoder.restEncoder, structs.length - startNewStructs);\n encoder.writeClient(client);\n encoding.writeVarUint(encoder.restEncoder, clock);\n const firstStruct = structs[startNewStructs];\n // write first struct with an offset\n firstStruct.write(encoder, clock - firstStruct.id.clock);\n for (let i = startNewStructs + 1; i < structs.length; i++) {\n structs[i].write(encoder, 0);\n }\n};\n\n/**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {StructStore} store\n * @param {Map<number,number>} _sm\n *\n * @private\n * @function\n */\nconst writeClientsStructs = (encoder, store, _sm) => {\n // we filter all valid _sm entries into sm\n const sm = new Map();\n _sm.forEach((clock, client) => {\n // only write if new structs are available\n if (getState(store, client) > clock) {\n sm.set(client, clock);\n }\n });\n getStateVector(store).forEach((_clock, client) => {\n if (!_sm.has(client)) {\n sm.set(client, 0);\n }\n });\n // write # states that were updated\n encoding.writeVarUint(encoder.restEncoder, sm.size);\n // Write items with higher client ids first\n // This heavily improves the conflict algorithm.\n array.from(sm.entries()).sort((a, b) => b[0] - a[0]).forEach(([client, clock]) => {\n writeStructs(encoder, /** @type {Array<GC|Item>} */ (store.clients.get(client)), client, clock);\n });\n};\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder The decoder object to read data from.\n * @param {Doc} doc\n * @return {Map<number, { i: number, refs: Array<Item | GC> }>}\n *\n * @private\n * @function\n */\nconst readClientsStructRefs = (decoder, doc) => {\n /**\n * @type {Map<number, { i: number, refs: Array<Item | GC> }>}\n */\n const clientRefs = map.create();\n const numOfStateUpdates = decoding.readVarUint(decoder.restDecoder);\n for (let i = 0; i < numOfStateUpdates; i++) {\n const numberOfStructs = decoding.readVarUint(decoder.restDecoder);\n /**\n * @type {Array<GC|Item>}\n */\n const refs = new Array(numberOfStructs);\n const client = decoder.readClient();\n let clock = decoding.readVarUint(decoder.restDecoder);\n // const start = performance.now()\n clientRefs.set(client, { i: 0, refs });\n for (let i = 0; i < numberOfStructs; i++) {\n const info = decoder.readInfo();\n switch (binary.BITS5 & info) {\n case 0: { // GC\n const len = decoder.readLen();\n refs[i] = new GC(createID(client, clock), len);\n clock += len;\n break\n }\n case 10: { // Skip Struct (nothing to apply)\n // @todo we could reduce the amount of checks by adding Skip struct to clientRefs so we know that something is missing.\n const len = decoding.readVarUint(decoder.restDecoder);\n refs[i] = new Skip(createID(client, clock), len);\n clock += len;\n break\n }\n default: { // Item with content\n /**\n * The optimized implementation doesn't use any variables because inlining variables is faster.\n * Below a non-optimized version is shown that implements the basic algorithm with\n * a few comments\n */\n const cantCopyParentInfo = (info & (binary.BIT7 | binary.BIT8)) === 0;\n // If parent = null and neither left nor right are defined, then we know that `parent` is child of `y`\n // and we read the next string as parentYKey.\n // It indicates how we store/retrieve parent from `y.share`\n // @type {string|null}\n const struct = new Item(\n createID(client, clock),\n null, // left\n (info & binary.BIT8) === binary.BIT8 ? decoder.readLeftID() : null, // origin\n null, // right\n (info & binary.BIT7) === binary.BIT7 ? decoder.readRightID() : null, // right origin\n cantCopyParentInfo ? (decoder.readParentInfo() ? doc.get(decoder.readString()) : decoder.readLeftID()) : null, // parent\n cantCopyParentInfo && (info & binary.BIT6) === binary.BIT6 ? decoder.readString() : null, // parentSub\n readItemContent(decoder, info) // item content\n );\n /* A non-optimized implementation of the above algorithm:\n\n // The item that was originally to the left of this item.\n const origin = (info & binary.BIT8) === binary.BIT8 ? decoder.readLeftID() : null\n // The item that was originally to the right of this item.\n const rightOrigin = (info & binary.BIT7) === binary.BIT7 ? decoder.readRightID() : null\n const cantCopyParentInfo = (info & (binary.BIT7 | binary.BIT8)) === 0\n const hasParentYKey = cantCopyParentInfo ? decoder.readParentInfo() : false\n // If parent = null and neither left nor right are defined, then we know that `parent` is child of `y`\n // and we read the next string as parentYKey.\n // It indicates how we store/retrieve parent from `y.share`\n // @type {string|null}\n const parentYKey = cantCopyParentInfo && hasParentYKey ? decoder.readString() : null\n\n const struct = new Item(\n createID(client, clock),\n null, // left\n origin, // origin\n null, // right\n rightOrigin, // right origin\n cantCopyParentInfo && !hasParentYKey ? decoder.readLeftID() : (parentYKey !== null ? doc.get(parentYKey) : null), // parent\n cantCopyParentInfo && (info & binary.BIT6) === binary.BIT6 ? decoder.readString() : null, // parentSub\n readItemContent(decoder, info) // item content\n )\n */\n refs[i] = struct;\n clock += struct.length;\n }\n }\n }\n // console.log('time to read: ', performance.now() - start) // @todo remove\n }\n return clientRefs\n};\n\n/**\n * Resume computing structs generated by struct readers.\n *\n * While there is something to do, we integrate structs in this order\n * 1. top element on stack, if stack is not empty\n * 2. next element from current struct reader (if empty, use next struct reader)\n *\n * If struct causally depends on another struct (ref.missing), we put next reader of\n * `ref.id.client` on top of stack.\n *\n * At some point we find a struct that has no causal dependencies,\n * then we start emptying the stack.\n *\n * It is not possible to have circles: i.e. struct1 (from client1) depends on struct2 (from client2)\n * depends on struct3 (from client1). Therefore the max stack size is equal to `structReaders.length`.\n *\n * This method is implemented in a way so that we can resume computation if this update\n * causally depends on another update.\n *\n * @param {Transaction} transaction\n * @param {StructStore} store\n * @param {Map<number, { i: number, refs: (GC | Item)[] }>} clientsStructRefs\n * @return { null | { update: Uint8Array, missing: Map<number,number> } }\n *\n * @private\n * @function\n */\nconst integrateStructs = (transaction, store, clientsStructRefs) => {\n /**\n * @type {Array<Item | GC>}\n */\n const stack = [];\n // sort them so that we take the higher id first, in case of conflicts the lower id will probably not conflict with the id from the higher user.\n let clientsStructRefsIds = array.from(clientsStructRefs.keys()).sort((a, b) => a - b);\n if (clientsStructRefsIds.length === 0) {\n return null\n }\n const getNextStructTarget = () => {\n if (clientsStructRefsIds.length === 0) {\n return null\n }\n let nextStructsTarget = /** @type {{i:number,refs:Array<GC|Item>}} */ (clientsStructRefs.get(clientsStructRefsIds[clientsStructRefsIds.length - 1]));\n while (nextStructsTarget.refs.length === nextStructsTarget.i) {\n clientsStructRefsIds.pop();\n if (clientsStructRefsIds.length > 0) {\n nextStructsTarget = /** @type {{i:number,refs:Array<GC|Item>}} */ (clientsStructRefs.get(clientsStructRefsIds[clientsStructRefsIds.length - 1]));\n } else {\n return null\n }\n }\n return nextStructsTarget\n };\n let curStructsTarget = getNextStructTarget();\n if (curStructsTarget === null) {\n return null\n }\n\n /**\n * @type {StructStore}\n */\n const restStructs = new StructStore();\n const missingSV = new Map();\n /**\n * @param {number} client\n * @param {number} clock\n */\n const updateMissingSv = (client, clock) => {\n const mclock = missingSV.get(client);\n if (mclock == null || mclock > clock) {\n missingSV.set(client, clock);\n }\n };\n /**\n * @type {GC|Item}\n */\n let stackHead = /** @type {any} */ (curStructsTarget).refs[/** @type {any} */ (curStructsTarget).i++];\n // caching the state because it is used very often\n const state = new Map();\n\n const addStackToRestSS = () => {\n for (const item of stack) {\n const client = item.id.client;\n const inapplicableItems = clientsStructRefs.get(client);\n if (inapplicableItems) {\n // decrement because we weren't able to apply previous operation\n inapplicableItems.i--;\n restStructs.clients.set(client, inapplicableItems.refs.slice(inapplicableItems.i));\n clientsStructRefs.delete(client);\n inapplicableItems.i = 0;\n inapplicableItems.refs = [];\n } else {\n // item was the last item on clientsStructRefs and the field was already cleared. Add item to restStructs and continue\n restStructs.clients.set(client, [item]);\n }\n // remove client from clientsStructRefsIds to prevent users from applying the same update again\n clientsStructRefsIds = clientsStructRefsIds.filter(c => c !== client);\n }\n stack.length = 0;\n };\n\n // iterate over all struct readers until we are done\n while (true) {\n if (stackHead.constructor !== Skip) {\n const localClock = map.setIfUndefined(state, stackHead.id.client, () => getState(store, stackHead.id.client));\n const offset = localClock - stackHead.id.clock;\n if (offset < 0) {\n // update from the same client is missing\n stack.push(stackHead);\n updateMissingSv(stackHead.id.client, stackHead.id.clock - 1);\n // hid a dead wall, add all items from stack to restSS\n addStackToRestSS();\n } else {\n const missing = stackHead.getMissing(transaction, store);\n if (missing !== null) {\n stack.push(stackHead);\n // get the struct reader that has the missing struct\n /**\n * @type {{ refs: Array<GC|Item>, i: number }}\n */\n const structRefs = clientsStructRefs.get(/** @type {number} */ (missing)) || { refs: [], i: 0 };\n if (structRefs.refs.length === structRefs.i) {\n // This update message causally depends on another update message that doesn't exist yet\n updateMissingSv(/** @type {number} */ (missing), getState(store, missing));\n addStackToRestSS();\n } else {\n stackHead = structRefs.refs[structRefs.i++];\n continue\n }\n } else if (offset === 0 || offset < stackHead.length) {\n // all fine, apply the stackhead\n stackHead.integrate(transaction, offset);\n state.set(stackHead.id.client, stackHead.id.clock + stackHead.length);\n }\n }\n }\n // iterate to next stackHead\n if (stack.length > 0) {\n stackHead = /** @type {GC|Item} */ (stack.pop());\n } else if (curStructsTarget !== null && curStructsTarget.i < curStructsTarget.refs.length) {\n stackHead = /** @type {GC|Item} */ (curStructsTarget.refs[curStructsTarget.i++]);\n } else {\n curStructsTarget = getNextStructTarget();\n if (curStructsTarget === null) {\n // we are done!\n break\n } else {\n stackHead = /** @type {GC|Item} */ (curStructsTarget.refs[curStructsTarget.i++]);\n }\n }\n }\n if (restStructs.clients.size > 0) {\n const encoder = new UpdateEncoderV2();\n writeClientsStructs(encoder, restStructs, new Map());\n // write empty deleteset\n // writeDeleteSet(encoder, new DeleteSet())\n encoding.writeVarUint(encoder.restEncoder, 0); // => no need for an extra function call, just write 0 deletes\n return { missing: missingSV, update: encoder.toUint8Array() }\n }\n return null\n};\n\n/**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {Transaction} transaction\n *\n * @private\n * @function\n */\nconst writeStructsFromTransaction = (encoder, transaction) => writeClientsStructs(encoder, transaction.doc.store, transaction.beforeState);\n\n/**\n * Read and apply a document update.\n *\n * This function has the same effect as `applyUpdate` but accepts a decoder.\n *\n * @param {decoding.Decoder} decoder\n * @param {Doc} ydoc\n * @param {any} [transactionOrigin] This will be stored on `transaction.origin` and `.on('update', (update, origin))`\n * @param {UpdateDecoderV1 | UpdateDecoderV2} [structDecoder]\n *\n * @function\n */\nconst readUpdateV2 = (decoder, ydoc, transactionOrigin, structDecoder = new UpdateDecoderV2(decoder)) =>\n transact(ydoc, transaction => {\n // force that transaction.local is set to non-local\n transaction.local = false;\n let retry = false;\n const doc = transaction.doc;\n const store = doc.store;\n // let start = performance.now()\n const ss = readClientsStructRefs(structDecoder, doc);\n // console.log('time to read structs: ', performance.now() - start) // @todo remove\n // start = performance.now()\n // console.log('time to merge: ', performance.now() - start) // @todo remove\n // start = performance.now()\n const restStructs = integrateStructs(transaction, store, ss);\n const pending = store.pendingStructs;\n if (pending) {\n // check if we can apply something\n for (const [client, clock] of pending.missing) {\n if (clock < getState(store, client)) {\n retry = true;\n break\n }\n }\n if (restStructs) {\n // merge restStructs into store.pending\n for (const [client, clock] of restStructs.missing) {\n const mclock = pending.missing.get(client);\n if (mclock == null || mclock > clock) {\n pending.missing.set(client, clock);\n }\n }\n pending.update = mergeUpdatesV2([pending.update, restStructs.update]);\n }\n } else {\n store.pendingStructs = restStructs;\n }\n // console.log('time to integrate: ', performance.now() - start) // @todo remove\n // start = performance.now()\n const dsRest = readAndApplyDeleteSet(structDecoder, transaction, store);\n if (store.pendingDs) {\n // @todo we could make a lower-bound state-vector check as we do above\n const pendingDSUpdate = new UpdateDecoderV2(decoding.createDecoder(store.pendingDs));\n decoding.readVarUint(pendingDSUpdate.restDecoder); // read 0 structs, because we only encode deletes in pendingdsupdate\n const dsRest2 = readAndApplyDeleteSet(pendingDSUpdate, transaction, store);\n if (dsRest && dsRest2) {\n // case 1: ds1 != null && ds2 != null\n store.pendingDs = mergeUpdatesV2([dsRest, dsRest2]);\n } else {\n // case 2: ds1 != null\n // case 3: ds2 != null\n // case 4: ds1 == null && ds2 == null\n store.pendingDs = dsRest || dsRest2;\n }\n } else {\n // Either dsRest == null && pendingDs == null OR dsRest != null\n store.pendingDs = dsRest;\n }\n // console.log('time to cleanup: ', performance.now() - start) // @todo remove\n // start = performance.now()\n\n // console.log('time to resume delete readers: ', performance.now() - start) // @todo remove\n // start = performance.now()\n if (retry) {\n const update = /** @type {{update: Uint8Array}} */ (store.pendingStructs).update;\n store.pendingStructs = null;\n applyUpdateV2(transaction.doc, update);\n }\n }, transactionOrigin, false);\n\n/**\n * Read and apply a document update.\n *\n * This function has the same effect as `applyUpdate` but accepts a decoder.\n *\n * @param {decoding.Decoder} decoder\n * @param {Doc} ydoc\n * @param {any} [transactionOrigin] This will be stored on `transaction.origin` and `.on('update', (update, origin))`\n *\n * @function\n */\nconst readUpdate = (decoder, ydoc, transactionOrigin) => readUpdateV2(decoder, ydoc, transactionOrigin, new UpdateDecoderV1(decoder));\n\n/**\n * Apply a document update created by, for example, `y.on('update', update => ..)` or `update = encodeStateAsUpdate()`.\n *\n * This function has the same effect as `readUpdate` but accepts an Uint8Array instead of a Decoder.\n *\n * @param {Doc} ydoc\n * @param {Uint8Array} update\n * @param {any} [transactionOrigin] This will be stored on `transaction.origin` and `.on('update', (update, origin))`\n * @param {typeof UpdateDecoderV1 | typeof UpdateDecoderV2} [YDecoder]\n *\n * @function\n */\nconst applyUpdateV2 = (ydoc, update, transactionOrigin, YDecoder = UpdateDecoderV2) => {\n const decoder = decoding.createDecoder(update);\n readUpdateV2(decoder, ydoc, transactionOrigin, new YDecoder(decoder));\n};\n\n/**\n * Apply a document update created by, for example, `y.on('update', update => ..)` or `update = encodeStateAsUpdate()`.\n *\n * This function has the same effect as `readUpdate` but accepts an Uint8Array instead of a Decoder.\n *\n * @param {Doc} ydoc\n * @param {Uint8Array} update\n * @param {any} [transactionOrigin] This will be stored on `transaction.origin` and `.on('update', (update, origin))`\n *\n * @function\n */\nconst applyUpdate = (ydoc, update, transactionOrigin) => applyUpdateV2(ydoc, update, transactionOrigin, UpdateDecoderV1);\n\n/**\n * Write all the document as a single update message. If you specify the state of the remote client (`targetStateVector`) it will\n * only write the operations that are missing.\n *\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {Doc} doc\n * @param {Map<number,number>} [targetStateVector] The state of the target that receives the update. Leave empty to write all known structs\n *\n * @function\n */\nconst writeStateAsUpdate = (encoder, doc, targetStateVector = new Map()) => {\n writeClientsStructs(encoder, doc.store, targetStateVector);\n writeDeleteSet(encoder, createDeleteSetFromStructStore(doc.store));\n};\n\n/**\n * Write all the document as a single update message that can be applied on the remote document. If you specify the state of the remote client (`targetState`) it will\n * only write the operations that are missing.\n *\n * Use `writeStateAsUpdate` instead if you are working with lib0/encoding.js#Encoder\n *\n * @param {Doc} doc\n * @param {Uint8Array} [encodedTargetStateVector] The state of the target that receives the update. Leave empty to write all known structs\n * @param {UpdateEncoderV1 | UpdateEncoderV2} [encoder]\n * @return {Uint8Array}\n *\n * @function\n */\nconst encodeStateAsUpdateV2 = (doc, encodedTargetStateVector = new Uint8Array([0]), encoder = new UpdateEncoderV2()) => {\n const targetStateVector = decodeStateVector(encodedTargetStateVector);\n writeStateAsUpdate(encoder, doc, targetStateVector);\n const updates = [encoder.toUint8Array()];\n // also add the pending updates (if there are any)\n if (doc.store.pendingDs) {\n updates.push(doc.store.pendingDs);\n }\n if (doc.store.pendingStructs) {\n updates.push(diffUpdateV2(doc.store.pendingStructs.update, encodedTargetStateVector));\n }\n if (updates.length > 1) {\n if (encoder.constructor === UpdateEncoderV1) {\n return mergeUpdates(updates.map((update, i) => i === 0 ? update : convertUpdateFormatV2ToV1(update)))\n } else if (encoder.constructor === UpdateEncoderV2) {\n return mergeUpdatesV2(updates)\n }\n }\n return updates[0]\n};\n\n/**\n * Write all the document as a single update message that can be applied on the remote document. If you specify the state of the remote client (`targetState`) it will\n * only write the operations that are missing.\n *\n * Use `writeStateAsUpdate` instead if you are working with lib0/encoding.js#Encoder\n *\n * @param {Doc} doc\n * @param {Uint8Array} [encodedTargetStateVector] The state of the target that receives the update. Leave empty to write all known structs\n * @return {Uint8Array}\n *\n * @function\n */\nconst encodeStateAsUpdate = (doc, encodedTargetStateVector) => encodeStateAsUpdateV2(doc, encodedTargetStateVector, new UpdateEncoderV1());\n\n/**\n * Read state vector from Decoder and return as Map\n *\n * @param {DSDecoderV1 | DSDecoderV2} decoder\n * @return {Map<number,number>} Maps `client` to the number next expected `clock` from that client.\n *\n * @function\n */\nconst readStateVector = decoder => {\n const ss = new Map();\n const ssLength = decoding.readVarUint(decoder.restDecoder);\n for (let i = 0; i < ssLength; i++) {\n const client = decoding.readVarUint(decoder.restDecoder);\n const clock = decoding.readVarUint(decoder.restDecoder);\n ss.set(client, clock);\n }\n return ss\n};\n\n/**\n * Read decodedState and return State as Map.\n *\n * @param {Uint8Array} decodedState\n * @return {Map<number,number>} Maps `client` to the number next expected `clock` from that client.\n *\n * @function\n */\n// export const decodeStateVectorV2 = decodedState => readStateVector(new DSDecoderV2(decoding.createDecoder(decodedState)))\n\n/**\n * Read decodedState and return State as Map.\n *\n * @param {Uint8Array} decodedState\n * @return {Map<number,number>} Maps `client` to the number next expected `clock` from that client.\n *\n * @function\n */\nconst decodeStateVector = decodedState => readStateVector(new DSDecoderV1(decoding.createDecoder(decodedState)));\n\n/**\n * @param {DSEncoderV1 | DSEncoderV2} encoder\n * @param {Map<number,number>} sv\n * @function\n */\nconst writeStateVector = (encoder, sv) => {\n encoding.writeVarUint(encoder.restEncoder, sv.size);\n array.from(sv.entries()).sort((a, b) => b[0] - a[0]).forEach(([client, clock]) => {\n encoding.writeVarUint(encoder.restEncoder, client); // @todo use a special client decoder that is based on mapping\n encoding.writeVarUint(encoder.restEncoder, clock);\n });\n return encoder\n};\n\n/**\n * @param {DSEncoderV1 | DSEncoderV2} encoder\n * @param {Doc} doc\n *\n * @function\n */\nconst writeDocumentStateVector = (encoder, doc) => writeStateVector(encoder, getStateVector(doc.store));\n\n/**\n * Encode State as Uint8Array.\n *\n * @param {Doc|Map<number,number>} doc\n * @param {DSEncoderV1 | DSEncoderV2} [encoder]\n * @return {Uint8Array}\n *\n * @function\n */\nconst encodeStateVectorV2 = (doc, encoder = new DSEncoderV2()) => {\n if (doc instanceof Map) {\n writeStateVector(encoder, doc);\n } else {\n writeDocumentStateVector(encoder, doc);\n }\n return encoder.toUint8Array()\n};\n\n/**\n * Encode State as Uint8Array.\n *\n * @param {Doc|Map<number,number>} doc\n * @return {Uint8Array}\n *\n * @function\n */\nconst encodeStateVector = doc => encodeStateVectorV2(doc, new DSEncoderV1());\n\n/**\n * General event handler implementation.\n *\n * @template ARG0, ARG1\n *\n * @private\n */\nclass EventHandler {\n constructor () {\n /**\n * @type {Array<function(ARG0, ARG1):void>}\n */\n this.l = [];\n }\n}\n\n/**\n * @template ARG0,ARG1\n * @returns {EventHandler<ARG0,ARG1>}\n *\n * @private\n * @function\n */\nconst createEventHandler = () => new EventHandler();\n\n/**\n * Adds an event listener that is called when\n * {@link EventHandler#callEventListeners} is called.\n *\n * @template ARG0,ARG1\n * @param {EventHandler<ARG0,ARG1>} eventHandler\n * @param {function(ARG0,ARG1):void} f The event handler.\n *\n * @private\n * @function\n */\nconst addEventHandlerListener = (eventHandler, f) =>\n eventHandler.l.push(f);\n\n/**\n * Removes an event listener.\n *\n * @template ARG0,ARG1\n * @param {EventHandler<ARG0,ARG1>} eventHandler\n * @param {function(ARG0,ARG1):void} f The event handler that was added with\n * {@link EventHandler#addEventListener}\n *\n * @private\n * @function\n */\nconst removeEventHandlerListener = (eventHandler, f) => {\n const l = eventHandler.l;\n const len = l.length;\n eventHandler.l = l.filter(g => f !== g);\n if (len === eventHandler.l.length) {\n console.error('[yjs] Tried to remove event handler that doesn\\'t exist.');\n }\n};\n\n/**\n * Call all event listeners that were added via\n * {@link EventHandler#addEventListener}.\n *\n * @template ARG0,ARG1\n * @param {EventHandler<ARG0,ARG1>} eventHandler\n * @param {ARG0} arg0\n * @param {ARG1} arg1\n *\n * @private\n * @function\n */\nconst callEventHandlerListeners = (eventHandler, arg0, arg1) =>\n f.callAll(eventHandler.l, [arg0, arg1]);\n\nclass ID {\n /**\n * @param {number} client client id\n * @param {number} clock unique per client id, continuous number\n */\n constructor (client, clock) {\n /**\n * Client id\n * @type {number}\n */\n this.client = client;\n /**\n * unique per client id, continuous number\n * @type {number}\n */\n this.clock = clock;\n }\n}\n\n/**\n * @param {ID | null} a\n * @param {ID | null} b\n * @return {boolean}\n *\n * @function\n */\nconst compareIDs = (a, b) => a === b || (a !== null && b !== null && a.client === b.client && a.clock === b.clock);\n\n/**\n * @param {number} client\n * @param {number} clock\n *\n * @private\n * @function\n */\nconst createID = (client, clock) => new ID(client, clock);\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {ID} id\n *\n * @private\n * @function\n */\nconst writeID = (encoder, id) => {\n encoding.writeVarUint(encoder, id.client);\n encoding.writeVarUint(encoder, id.clock);\n};\n\n/**\n * Read ID.\n * * If first varUint read is 0xFFFFFF a RootID is returned.\n * * Otherwise an ID is returned\n *\n * @param {decoding.Decoder} decoder\n * @return {ID}\n *\n * @private\n * @function\n */\nconst readID = decoder =>\n createID(decoding.readVarUint(decoder), decoding.readVarUint(decoder));\n\n/**\n * The top types are mapped from y.share.get(keyname) => type.\n * `type` does not store any information about the `keyname`.\n * This function finds the correct `keyname` for `type` and throws otherwise.\n *\n * @param {AbstractType<any>} type\n * @return {string}\n *\n * @private\n * @function\n */\nconst findRootTypeKey = type => {\n // @ts-ignore _y must be defined, otherwise unexpected case\n for (const [key, value] of type.doc.share.entries()) {\n if (value === type) {\n return key\n }\n }\n throw error.unexpectedCase()\n};\n\n/**\n * Check if `parent` is a parent of `child`.\n *\n * @param {AbstractType<any>} parent\n * @param {Item|null} child\n * @return {Boolean} Whether `parent` is a parent of `child`.\n *\n * @private\n * @function\n */\nconst isParentOf = (parent, child) => {\n while (child !== null) {\n if (child.parent === parent) {\n return true\n }\n child = /** @type {AbstractType<any>} */ (child.parent)._item;\n }\n return false\n};\n\n/**\n * Convenient helper to log type information.\n *\n * Do not use in productive systems as the output can be immense!\n *\n * @param {AbstractType<any>} type\n */\nconst logType = type => {\n const res = [];\n let n = type._start;\n while (n) {\n res.push(n);\n n = n.right;\n }\n console.log('Children: ', res);\n console.log('Children content: ', res.filter(m => !m.deleted).map(m => m.content));\n};\n\nclass PermanentUserData {\n /**\n * @param {Doc} doc\n * @param {YMap<any>} [storeType]\n */\n constructor (doc, storeType = doc.getMap('users')) {\n /**\n * @type {Map<string,DeleteSet>}\n */\n const dss = new Map();\n this.yusers = storeType;\n this.doc = doc;\n /**\n * Maps from clientid to userDescription\n *\n * @type {Map<number,string>}\n */\n this.clients = new Map();\n this.dss = dss;\n /**\n * @param {YMap<any>} user\n * @param {string} userDescription\n */\n const initUser = (user, userDescription) => {\n /**\n * @type {YArray<Uint8Array>}\n */\n const ds = user.get('ds');\n const ids = user.get('ids');\n const addClientId = /** @param {number} clientid */ clientid => this.clients.set(clientid, userDescription);\n ds.observe(/** @param {YArrayEvent<any>} event */ event => {\n event.changes.added.forEach(item => {\n item.content.getContent().forEach(encodedDs => {\n if (encodedDs instanceof Uint8Array) {\n this.dss.set(userDescription, mergeDeleteSets([this.dss.get(userDescription) || createDeleteSet(), readDeleteSet(new DSDecoderV1(decoding.createDecoder(encodedDs)))]));\n }\n });\n });\n });\n this.dss.set(userDescription, mergeDeleteSets(ds.map(encodedDs => readDeleteSet(new DSDecoderV1(decoding.createDecoder(encodedDs))))));\n ids.observe(/** @param {YArrayEvent<any>} event */ event =>\n event.changes.added.forEach(item => item.content.getContent().forEach(addClientId))\n );\n ids.forEach(addClientId);\n };\n // observe users\n storeType.observe(event => {\n event.keysChanged.forEach(userDescription =>\n initUser(storeType.get(userDescription), userDescription)\n );\n });\n // add initial data\n storeType.forEach(initUser);\n }\n\n /**\n * @param {Doc} doc\n * @param {number} clientid\n * @param {string} userDescription\n * @param {Object} conf\n * @param {function(Transaction, DeleteSet):boolean} [conf.filter]\n */\n setUserMapping (doc, clientid, userDescription, { filter = () => true } = {}) {\n const users = this.yusers;\n let user = users.get(userDescription);\n if (!user) {\n user = new YMap();\n user.set('ids', new YArray());\n user.set('ds', new YArray());\n users.set(userDescription, user);\n }\n user.get('ids').push([clientid]);\n users.observe(_event => {\n setTimeout(() => {\n const userOverwrite = users.get(userDescription);\n if (userOverwrite !== user) {\n // user was overwritten, port all data over to the next user object\n // @todo Experiment with Y.Sets here\n user = userOverwrite;\n // @todo iterate over old type\n this.clients.forEach((_userDescription, clientid) => {\n if (userDescription === _userDescription) {\n user.get('ids').push([clientid]);\n }\n });\n const encoder = new DSEncoderV1();\n const ds = this.dss.get(userDescription);\n if (ds) {\n writeDeleteSet(encoder, ds);\n user.get('ds').push([encoder.toUint8Array()]);\n }\n }\n }, 0);\n });\n doc.on('afterTransaction', /** @param {Transaction} transaction */ transaction => {\n setTimeout(() => {\n const yds = user.get('ds');\n const ds = transaction.deleteSet;\n if (transaction.local && ds.clients.size > 0 && filter(transaction, ds)) {\n const encoder = new DSEncoderV1();\n writeDeleteSet(encoder, ds);\n yds.push([encoder.toUint8Array()]);\n }\n });\n });\n }\n\n /**\n * @param {number} clientid\n * @return {any}\n */\n getUserByClientId (clientid) {\n return this.clients.get(clientid) || null\n }\n\n /**\n * @param {ID} id\n * @return {string | null}\n */\n getUserByDeletedId (id) {\n for (const [userDescription, ds] of this.dss.entries()) {\n if (isDeleted(ds, id)) {\n return userDescription\n }\n }\n return null\n }\n}\n\n/**\n * A relative position is based on the Yjs model and is not affected by document changes.\n * E.g. If you place a relative position before a certain character, it will always point to this character.\n * If you place a relative position at the end of a type, it will always point to the end of the type.\n *\n * A numeric position is often unsuited for user selections, because it does not change when content is inserted\n * before or after.\n *\n * ```Insert(0, 'x')('a|bc') = 'xa|bc'``` Where | is the relative position.\n *\n * One of the properties must be defined.\n *\n * @example\n * // Current cursor position is at position 10\n * const relativePosition = createRelativePositionFromIndex(yText, 10)\n * // modify yText\n * yText.insert(0, 'abc')\n * yText.delete(3, 10)\n * // Compute the cursor position\n * const absolutePosition = createAbsolutePositionFromRelativePosition(y, relativePosition)\n * absolutePosition.type === yText // => true\n * console.log('cursor location is ' + absolutePosition.index) // => cursor location is 3\n *\n */\nclass RelativePosition {\n /**\n * @param {ID|null} type\n * @param {string|null} tname\n * @param {ID|null} item\n * @param {number} assoc\n */\n constructor (type, tname, item, assoc = 0) {\n /**\n * @type {ID|null}\n */\n this.type = type;\n /**\n * @type {string|null}\n */\n this.tname = tname;\n /**\n * @type {ID | null}\n */\n this.item = item;\n /**\n * A relative position is associated to a specific character. By default\n * assoc >= 0, the relative position is associated to the character\n * after the meant position.\n * I.e. position 1 in 'ab' is associated to character 'b'.\n *\n * If assoc < 0, then the relative position is associated to the character\n * before the meant position.\n *\n * @type {number}\n */\n this.assoc = assoc;\n }\n}\n\n/**\n * @param {RelativePosition} rpos\n * @return {any}\n */\nconst relativePositionToJSON = rpos => {\n const json = {};\n if (rpos.type) {\n json.type = rpos.type;\n }\n if (rpos.tname) {\n json.tname = rpos.tname;\n }\n if (rpos.item) {\n json.item = rpos.item;\n }\n if (rpos.assoc != null) {\n json.assoc = rpos.assoc;\n }\n return json\n};\n\n/**\n * @param {any} json\n * @return {RelativePosition}\n *\n * @function\n */\nconst createRelativePositionFromJSON = json => new RelativePosition(json.type == null ? null : createID(json.type.client, json.type.clock), json.tname ?? null, json.item == null ? null : createID(json.item.client, json.item.clock), json.assoc == null ? 0 : json.assoc);\n\nclass AbsolutePosition {\n /**\n * @param {AbstractType<any>} type\n * @param {number} index\n * @param {number} [assoc]\n */\n constructor (type, index, assoc = 0) {\n /**\n * @type {AbstractType<any>}\n */\n this.type = type;\n /**\n * @type {number}\n */\n this.index = index;\n this.assoc = assoc;\n }\n}\n\n/**\n * @param {AbstractType<any>} type\n * @param {number} index\n * @param {number} [assoc]\n *\n * @function\n */\nconst createAbsolutePosition = (type, index, assoc = 0) => new AbsolutePosition(type, index, assoc);\n\n/**\n * @param {AbstractType<any>} type\n * @param {ID|null} item\n * @param {number} [assoc]\n *\n * @function\n */\nconst createRelativePosition = (type, item, assoc) => {\n let typeid = null;\n let tname = null;\n if (type._item === null) {\n tname = findRootTypeKey(type);\n } else {\n typeid = createID(type._item.id.client, type._item.id.clock);\n }\n return new RelativePosition(typeid, tname, item, assoc)\n};\n\n/**\n * Create a relativePosition based on a absolute position.\n *\n * @param {AbstractType<any>} type The base type (e.g. YText or YArray).\n * @param {number} index The absolute position.\n * @param {number} [assoc]\n * @return {RelativePosition}\n *\n * @function\n */\nconst createRelativePositionFromTypeIndex = (type, index, assoc = 0) => {\n let t = type._start;\n if (assoc < 0) {\n // associated to the left character or the beginning of a type, increment index if possible.\n if (index === 0) {\n return createRelativePosition(type, null, assoc)\n }\n index--;\n }\n while (t !== null) {\n if (!t.deleted && t.countable) {\n if (t.length > index) {\n // case 1: found position somewhere in the linked list\n return createRelativePosition(type, createID(t.id.client, t.id.clock + index), assoc)\n }\n index -= t.length;\n }\n if (t.right === null && assoc < 0) {\n // left-associated position, return last available id\n return createRelativePosition(type, t.lastId, assoc)\n }\n t = t.right;\n }\n return createRelativePosition(type, null, assoc)\n};\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {RelativePosition} rpos\n *\n * @function\n */\nconst writeRelativePosition = (encoder, rpos) => {\n const { type, tname, item, assoc } = rpos;\n if (item !== null) {\n encoding.writeVarUint(encoder, 0);\n writeID(encoder, item);\n } else if (tname !== null) {\n // case 2: found position at the end of the list and type is stored in y.share\n encoding.writeUint8(encoder, 1);\n encoding.writeVarString(encoder, tname);\n } else if (type !== null) {\n // case 3: found position at the end of the list and type is attached to an item\n encoding.writeUint8(encoder, 2);\n writeID(encoder, type);\n } else {\n throw error.unexpectedCase()\n }\n encoding.writeVarInt(encoder, assoc);\n return encoder\n};\n\n/**\n * @param {RelativePosition} rpos\n * @return {Uint8Array}\n */\nconst encodeRelativePosition = rpos => {\n const encoder = encoding.createEncoder();\n writeRelativePosition(encoder, rpos);\n return encoding.toUint8Array(encoder)\n};\n\n/**\n * @param {decoding.Decoder} decoder\n * @return {RelativePosition}\n *\n * @function\n */\nconst readRelativePosition = decoder => {\n let type = null;\n let tname = null;\n let itemID = null;\n switch (decoding.readVarUint(decoder)) {\n case 0:\n // case 1: found position somewhere in the linked list\n itemID = readID(decoder);\n break\n case 1:\n // case 2: found position at the end of the list and type is stored in y.share\n tname = decoding.readVarString(decoder);\n break\n case 2: {\n // case 3: found position at the end of the list and type is attached to an item\n type = readID(decoder);\n }\n }\n const assoc = decoding.hasContent(decoder) ? decoding.readVarInt(decoder) : 0;\n return new RelativePosition(type, tname, itemID, assoc)\n};\n\n/**\n * @param {Uint8Array} uint8Array\n * @return {RelativePosition}\n */\nconst decodeRelativePosition = uint8Array => readRelativePosition(decoding.createDecoder(uint8Array));\n\n/**\n * @param {StructStore} store\n * @param {ID} id\n */\nconst getItemWithOffset = (store, id) => {\n const item = getItem(store, id);\n const diff = id.clock - item.id.clock;\n return {\n item, diff\n }\n};\n\n/**\n * Transform a relative position to an absolute position.\n *\n * If you want to share the relative position with other users, you should set\n * `followUndoneDeletions` to false to get consistent results across all clients.\n *\n * When calculating the absolute position, we try to follow the \"undone deletions\". This yields\n * better results for the user who performed undo. However, only the user who performed the undo\n * will get the better results, the other users don't know which operations recreated a deleted\n * range of content. There is more information in this ticket: https://github.com/yjs/yjs/issues/638\n *\n * @param {RelativePosition} rpos\n * @param {Doc} doc\n * @param {boolean} followUndoneDeletions - whether to follow undone deletions - see https://github.com/yjs/yjs/issues/638\n * @return {AbsolutePosition|null}\n *\n * @function\n */\nconst createAbsolutePositionFromRelativePosition = (rpos, doc, followUndoneDeletions = true) => {\n const store = doc.store;\n const rightID = rpos.item;\n const typeID = rpos.type;\n const tname = rpos.tname;\n const assoc = rpos.assoc;\n let type = null;\n let index = 0;\n if (rightID !== null) {\n if (getState(store, rightID.client) <= rightID.clock) {\n return null\n }\n const res = followUndoneDeletions ? followRedone(store, rightID) : getItemWithOffset(store, rightID);\n const right = res.item;\n if (!(right instanceof Item)) {\n return null\n }\n type = /** @type {AbstractType<any>} */ (right.parent);\n if (type._item === null || !type._item.deleted) {\n index = (right.deleted || !right.countable) ? 0 : (res.diff + (assoc >= 0 ? 0 : 1)); // adjust position based on left association if necessary\n let n = right.left;\n while (n !== null) {\n if (!n.deleted && n.countable) {\n index += n.length;\n }\n n = n.left;\n }\n }\n } else {\n if (tname !== null) {\n type = doc.get(tname);\n } else if (typeID !== null) {\n if (getState(store, typeID.client) <= typeID.clock) {\n // type does not exist yet\n return null\n }\n const { item } = followUndoneDeletions ? followRedone(store, typeID) : { item: getItem(store, typeID) };\n if (item instanceof Item && item.content instanceof ContentType) {\n type = item.content.type;\n } else {\n // struct is garbage collected\n return null\n }\n } else {\n throw error.unexpectedCase()\n }\n if (assoc >= 0) {\n index = type._length;\n } else {\n index = 0;\n }\n }\n return createAbsolutePosition(type, index, rpos.assoc)\n};\n\n/**\n * @param {RelativePosition|null} a\n * @param {RelativePosition|null} b\n * @return {boolean}\n *\n * @function\n */\nconst compareRelativePositions = (a, b) => a === b || (\n a !== null && b !== null && a.tname === b.tname && compareIDs(a.item, b.item) && compareIDs(a.type, b.type) && a.assoc === b.assoc\n);\n\nclass Snapshot {\n /**\n * @param {DeleteSet} ds\n * @param {Map<number,number>} sv state map\n */\n constructor (ds, sv) {\n /**\n * @type {DeleteSet}\n */\n this.ds = ds;\n /**\n * State Map\n * @type {Map<number,number>}\n */\n this.sv = sv;\n }\n}\n\n/**\n * @param {Snapshot} snap1\n * @param {Snapshot} snap2\n * @return {boolean}\n */\nconst equalSnapshots = (snap1, snap2) => {\n const ds1 = snap1.ds.clients;\n const ds2 = snap2.ds.clients;\n const sv1 = snap1.sv;\n const sv2 = snap2.sv;\n if (sv1.size !== sv2.size || ds1.size !== ds2.size) {\n return false\n }\n for (const [key, value] of sv1.entries()) {\n if (sv2.get(key) !== value) {\n return false\n }\n }\n for (const [client, dsitems1] of ds1.entries()) {\n const dsitems2 = ds2.get(client) || [];\n if (dsitems1.length !== dsitems2.length) {\n return false\n }\n for (let i = 0; i < dsitems1.length; i++) {\n const dsitem1 = dsitems1[i];\n const dsitem2 = dsitems2[i];\n if (dsitem1.clock !== dsitem2.clock || dsitem1.len !== dsitem2.len) {\n return false\n }\n }\n }\n return true\n};\n\n/**\n * @param {Snapshot} snapshot\n * @param {DSEncoderV1 | DSEncoderV2} [encoder]\n * @return {Uint8Array}\n */\nconst encodeSnapshotV2 = (snapshot, encoder = new DSEncoderV2()) => {\n writeDeleteSet(encoder, snapshot.ds);\n writeStateVector(encoder, snapshot.sv);\n return encoder.toUint8Array()\n};\n\n/**\n * @param {Snapshot} snapshot\n * @return {Uint8Array}\n */\nconst encodeSnapshot = snapshot => encodeSnapshotV2(snapshot, new DSEncoderV1());\n\n/**\n * @param {Uint8Array} buf\n * @param {DSDecoderV1 | DSDecoderV2} [decoder]\n * @return {Snapshot}\n */\nconst decodeSnapshotV2 = (buf, decoder = new DSDecoderV2(decoding.createDecoder(buf))) => {\n return new Snapshot(readDeleteSet(decoder), readStateVector(decoder))\n};\n\n/**\n * @param {Uint8Array} buf\n * @return {Snapshot}\n */\nconst decodeSnapshot = buf => decodeSnapshotV2(buf, new DSDecoderV1(decoding.createDecoder(buf)));\n\n/**\n * @param {DeleteSet} ds\n * @param {Map<number,number>} sm\n * @return {Snapshot}\n */\nconst createSnapshot = (ds, sm) => new Snapshot(ds, sm);\n\nconst emptySnapshot = createSnapshot(createDeleteSet(), new Map());\n\n/**\n * @param {Doc} doc\n * @return {Snapshot}\n */\nconst snapshot = doc => createSnapshot(createDeleteSetFromStructStore(doc.store), getStateVector(doc.store));\n\n/**\n * @param {Item} item\n * @param {Snapshot|undefined} snapshot\n *\n * @protected\n * @function\n */\nconst isVisible = (item, snapshot) => snapshot === undefined\n ? !item.deleted\n : snapshot.sv.has(item.id.client) && (snapshot.sv.get(item.id.client) || 0) > item.id.clock && !isDeleted(snapshot.ds, item.id);\n\n/**\n * @param {Transaction} transaction\n * @param {Snapshot} snapshot\n */\nconst splitSnapshotAffectedStructs = (transaction, snapshot) => {\n const meta = map.setIfUndefined(transaction.meta, splitSnapshotAffectedStructs, set.create);\n const store = transaction.doc.store;\n // check if we already split for this snapshot\n if (!meta.has(snapshot)) {\n snapshot.sv.forEach((clock, client) => {\n if (clock < getState(store, client)) {\n getItemCleanStart(transaction, createID(client, clock));\n }\n });\n iterateDeletedStructs(transaction, snapshot.ds, _item => {});\n meta.add(snapshot);\n }\n};\n\n/**\n * @example\n * const ydoc = new Y.Doc({ gc: false })\n * ydoc.getText().insert(0, 'world!')\n * const snapshot = Y.snapshot(ydoc)\n * ydoc.getText().insert(0, 'hello ')\n * const restored = Y.createDocFromSnapshot(ydoc, snapshot)\n * assert(restored.getText().toString() === 'world!')\n *\n * @param {Doc} originDoc\n * @param {Snapshot} snapshot\n * @param {Doc} [newDoc] Optionally, you may define the Yjs document that receives the data from originDoc\n * @return {Doc}\n */\nconst createDocFromSnapshot = (originDoc, snapshot, newDoc = new Doc()) => {\n if (originDoc.gc) {\n // we should not try to restore a GC-ed document, because some of the restored items might have their content deleted\n throw new Error('Garbage-collection must be disabled in `originDoc`!')\n }\n const { sv, ds } = snapshot;\n\n const encoder = new UpdateEncoderV2();\n originDoc.transact(transaction => {\n let size = 0;\n sv.forEach(clock => {\n if (clock > 0) {\n size++;\n }\n });\n encoding.writeVarUint(encoder.restEncoder, size);\n // splitting the structs before writing them to the encoder\n for (const [client, clock] of sv) {\n if (clock === 0) {\n continue\n }\n if (clock < getState(originDoc.store, client)) {\n getItemCleanStart(transaction, createID(client, clock));\n }\n const structs = originDoc.store.clients.get(client) || [];\n const lastStructIndex = findIndexSS(structs, clock - 1);\n // write # encoded structs\n encoding.writeVarUint(encoder.restEncoder, lastStructIndex + 1);\n encoder.writeClient(client);\n // first clock written is 0\n encoding.writeVarUint(encoder.restEncoder, 0);\n for (let i = 0; i <= lastStructIndex; i++) {\n structs[i].write(encoder, 0);\n }\n }\n writeDeleteSet(encoder, ds);\n });\n\n applyUpdateV2(newDoc, encoder.toUint8Array(), 'snapshot');\n return newDoc\n};\n\n/**\n * @param {Snapshot} snapshot\n * @param {Uint8Array} update\n * @param {typeof UpdateDecoderV2 | typeof UpdateDecoderV1} [YDecoder]\n */\nconst snapshotContainsUpdateV2 = (snapshot, update, YDecoder = UpdateDecoderV2) => {\n const updateDecoder = new YDecoder(decoding.createDecoder(update));\n const lazyDecoder = new LazyStructReader(updateDecoder, false);\n for (let curr = lazyDecoder.curr; curr !== null; curr = lazyDecoder.next()) {\n if ((snapshot.sv.get(curr.id.client) || 0) < curr.id.clock + curr.length) {\n return false\n }\n }\n const mergedDS = mergeDeleteSets([snapshot.ds, readDeleteSet(updateDecoder)]);\n return equalDeleteSets(snapshot.ds, mergedDS)\n};\n\n/**\n * @param {Snapshot} snapshot\n * @param {Uint8Array} update\n */\nconst snapshotContainsUpdate = (snapshot, update) => snapshotContainsUpdateV2(snapshot, update, UpdateDecoderV1);\n\nclass StructStore {\n constructor () {\n /**\n * @type {Map<number,Array<GC|Item>>}\n */\n this.clients = new Map();\n /**\n * @type {null | { missing: Map<number, number>, update: Uint8Array }}\n */\n this.pendingStructs = null;\n /**\n * @type {null | Uint8Array}\n */\n this.pendingDs = null;\n }\n}\n\n/**\n * Return the states as a Map<client,clock>.\n * Note that clock refers to the next expected clock id.\n *\n * @param {StructStore} store\n * @return {Map<number,number>}\n *\n * @public\n * @function\n */\nconst getStateVector = store => {\n const sm = new Map();\n store.clients.forEach((structs, client) => {\n const struct = structs[structs.length - 1];\n sm.set(client, struct.id.clock + struct.length);\n });\n return sm\n};\n\n/**\n * @param {StructStore} store\n * @param {number} client\n * @return {number}\n *\n * @public\n * @function\n */\nconst getState = (store, client) => {\n const structs = store.clients.get(client);\n if (structs === undefined) {\n return 0\n }\n const lastStruct = structs[structs.length - 1];\n return lastStruct.id.clock + lastStruct.length\n};\n\n/**\n * @param {StructStore} store\n * @param {GC|Item} struct\n *\n * @private\n * @function\n */\nconst addStruct = (store, struct) => {\n let structs = store.clients.get(struct.id.client);\n if (structs === undefined) {\n structs = [];\n store.clients.set(struct.id.client, structs);\n } else {\n const lastStruct = structs[structs.length - 1];\n if (lastStruct.id.clock + lastStruct.length !== struct.id.clock) {\n throw error.unexpectedCase()\n }\n }\n structs.push(struct);\n};\n\n/**\n * Perform a binary search on a sorted array\n * @param {Array<Item|GC>} structs\n * @param {number} clock\n * @return {number}\n *\n * @private\n * @function\n */\nconst findIndexSS = (structs, clock) => {\n let left = 0;\n let right = structs.length - 1;\n let mid = structs[right];\n let midclock = mid.id.clock;\n if (midclock === clock) {\n return right\n }\n // @todo does it even make sense to pivot the search?\n // If a good split misses, it might actually increase the time to find the correct item.\n // Currently, the only advantage is that search with pivoting might find the item on the first try.\n let midindex = math.floor((clock / (midclock + mid.length - 1)) * right); // pivoting the search\n while (left <= right) {\n mid = structs[midindex];\n midclock = mid.id.clock;\n if (midclock <= clock) {\n if (clock < midclock + mid.length) {\n return midindex\n }\n left = midindex + 1;\n } else {\n right = midindex - 1;\n }\n midindex = math.floor((left + right) / 2);\n }\n // Always check state before looking for a struct in StructStore\n // Therefore the case of not finding a struct is unexpected\n throw error.unexpectedCase()\n};\n\n/**\n * Expects that id is actually in store. This function throws or is an infinite loop otherwise.\n *\n * @param {StructStore} store\n * @param {ID} id\n * @return {GC|Item}\n *\n * @private\n * @function\n */\nconst find = (store, id) => {\n /**\n * @type {Array<GC|Item>}\n */\n // @ts-ignore\n const structs = store.clients.get(id.client);\n return structs[findIndexSS(structs, id.clock)]\n};\n\n/**\n * Expects that id is actually in store. This function throws or is an infinite loop otherwise.\n * @private\n * @function\n */\nconst getItem = /** @type {function(StructStore,ID):Item} */ (find);\n\n/**\n * @param {Transaction} transaction\n * @param {Array<Item|GC>} structs\n * @param {number} clock\n */\nconst findIndexCleanStart = (transaction, structs, clock) => {\n const index = findIndexSS(structs, clock);\n const struct = structs[index];\n if (struct.id.clock < clock && struct instanceof Item) {\n structs.splice(index + 1, 0, splitItem(transaction, struct, clock - struct.id.clock));\n return index + 1\n }\n return index\n};\n\n/**\n * Expects that id is actually in store. This function throws or is an infinite loop otherwise.\n *\n * @param {Transaction} transaction\n * @param {ID} id\n * @return {Item}\n *\n * @private\n * @function\n */\nconst getItemCleanStart = (transaction, id) => {\n const structs = /** @type {Array<Item>} */ (transaction.doc.store.clients.get(id.client));\n return structs[findIndexCleanStart(transaction, structs, id.clock)]\n};\n\n/**\n * Expects that id is actually in store. This function throws or is an infinite loop otherwise.\n *\n * @param {Transaction} transaction\n * @param {StructStore} store\n * @param {ID} id\n * @return {Item}\n *\n * @private\n * @function\n */\nconst getItemCleanEnd = (transaction, store, id) => {\n /**\n * @type {Array<Item>}\n */\n // @ts-ignore\n const structs = store.clients.get(id.client);\n const index = findIndexSS(structs, id.clock);\n const struct = structs[index];\n if (id.clock !== struct.id.clock + struct.length - 1 && struct.constructor !== GC) {\n structs.splice(index + 1, 0, splitItem(transaction, struct, id.clock - struct.id.clock + 1));\n }\n return struct\n};\n\n/**\n * Replace `item` with `newitem` in store\n * @param {StructStore} store\n * @param {GC|Item} struct\n * @param {GC|Item} newStruct\n *\n * @private\n * @function\n */\nconst replaceStruct = (store, struct, newStruct) => {\n const structs = /** @type {Array<GC|Item>} */ (store.clients.get(struct.id.client));\n structs[findIndexSS(structs, struct.id.clock)] = newStruct;\n};\n\n/**\n * Iterate over a range of structs\n *\n * @param {Transaction} transaction\n * @param {Array<Item|GC>} structs\n * @param {number} clockStart Inclusive start\n * @param {number} len\n * @param {function(GC|Item):void} f\n *\n * @function\n */\nconst iterateStructs = (transaction, structs, clockStart, len, f) => {\n if (len === 0) {\n return\n }\n const clockEnd = clockStart + len;\n let index = findIndexCleanStart(transaction, structs, clockStart);\n let struct;\n do {\n struct = structs[index++];\n if (clockEnd < struct.id.clock + struct.length) {\n findIndexCleanStart(transaction, structs, clockEnd);\n }\n f(struct);\n } while (index < structs.length && structs[index].id.clock < clockEnd)\n};\n\n/**\n * A transaction is created for every change on the Yjs model. It is possible\n * to bundle changes on the Yjs model in a single transaction to\n * minimize the number on messages sent and the number of observer calls.\n * If possible the user of this library should bundle as many changes as\n * possible. Here is an example to illustrate the advantages of bundling:\n *\n * @example\n * const ydoc = new Y.Doc()\n * const map = ydoc.getMap('map')\n * // Log content when change is triggered\n * map.observe(() => {\n * console.log('change triggered')\n * })\n * // Each change on the map type triggers a log message:\n * map.set('a', 0) // => \"change triggered\"\n * map.set('b', 0) // => \"change triggered\"\n * // When put in a transaction, it will trigger the log after the transaction:\n * ydoc.transact(() => {\n * map.set('a', 1)\n * map.set('b', 1)\n * }) // => \"change triggered\"\n *\n * @public\n */\nclass Transaction {\n /**\n * @param {Doc} doc\n * @param {any} origin\n * @param {boolean} local\n */\n constructor (doc, origin, local) {\n /**\n * The Yjs instance.\n * @type {Doc}\n */\n this.doc = doc;\n /**\n * Describes the set of deleted items by ids\n * @type {DeleteSet}\n */\n this.deleteSet = new DeleteSet();\n /**\n * Holds the state before the transaction started.\n * @type {Map<Number,Number>}\n */\n this.beforeState = getStateVector(doc.store);\n /**\n * Holds the state after the transaction.\n * @type {Map<Number,Number>}\n */\n this.afterState = new Map();\n /**\n * All types that were directly modified (property added or child\n * inserted/deleted). New types are not included in this Set.\n * Maps from type to parentSubs (`item.parentSub = null` for YArray)\n * @type {Map<AbstractType<YEvent<any>>,Set<String|null>>}\n */\n this.changed = new Map();\n /**\n * Stores the events for the types that observe also child elements.\n * It is mainly used by `observeDeep`.\n * @type {Map<AbstractType<YEvent<any>>,Array<YEvent<any>>>}\n */\n this.changedParentTypes = new Map();\n /**\n * @type {Array<AbstractStruct>}\n */\n this._mergeStructs = [];\n /**\n * @type {any}\n */\n this.origin = origin;\n /**\n * Stores meta information on the transaction\n * @type {Map<any,any>}\n */\n this.meta = new Map();\n /**\n * Whether this change originates from this doc.\n * @type {boolean}\n */\n this.local = local;\n /**\n * @type {Set<Doc>}\n */\n this.subdocsAdded = new Set();\n /**\n * @type {Set<Doc>}\n */\n this.subdocsRemoved = new Set();\n /**\n * @type {Set<Doc>}\n */\n this.subdocsLoaded = new Set();\n /**\n * @type {boolean}\n */\n this._needFormattingCleanup = false;\n }\n}\n\n/**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {Transaction} transaction\n * @return {boolean} Whether data was written.\n */\nconst writeUpdateMessageFromTransaction = (encoder, transaction) => {\n if (transaction.deleteSet.clients.size === 0 && !map.any(transaction.afterState, (clock, client) => transaction.beforeState.get(client) !== clock)) {\n return false\n }\n sortAndMergeDeleteSet(transaction.deleteSet);\n writeStructsFromTransaction(encoder, transaction);\n writeDeleteSet(encoder, transaction.deleteSet);\n return true\n};\n\n/**\n * If `type.parent` was added in current transaction, `type` technically\n * did not change, it was just added and we should not fire events for `type`.\n *\n * @param {Transaction} transaction\n * @param {AbstractType<YEvent<any>>} type\n * @param {string|null} parentSub\n */\nconst addChangedTypeToTransaction = (transaction, type, parentSub) => {\n const item = type._item;\n if (item === null || (item.id.clock < (transaction.beforeState.get(item.id.client) || 0) && !item.deleted)) {\n map.setIfUndefined(transaction.changed, type, set.create).add(parentSub);\n }\n};\n\n/**\n * @param {Array<AbstractStruct>} structs\n * @param {number} pos\n * @return {number} # of merged structs\n */\nconst tryToMergeWithLefts = (structs, pos) => {\n let right = structs[pos];\n let left = structs[pos - 1];\n let i = pos;\n for (; i > 0; right = left, left = structs[--i - 1]) {\n if (left.deleted === right.deleted && left.constructor === right.constructor) {\n if (left.mergeWith(right)) {\n if (right instanceof Item && right.parentSub !== null && /** @type {AbstractType<any>} */ (right.parent)._map.get(right.parentSub) === right) {\n /** @type {AbstractType<any>} */ (right.parent)._map.set(right.parentSub, /** @type {Item} */ (left));\n }\n continue\n }\n }\n break\n }\n const merged = pos - i;\n if (merged) {\n // remove all merged structs from the array\n structs.splice(pos + 1 - merged, merged);\n }\n return merged\n};\n\n/**\n * @param {DeleteSet} ds\n * @param {StructStore} store\n * @param {function(Item):boolean} gcFilter\n */\nconst tryGcDeleteSet = (ds, store, gcFilter) => {\n for (const [client, deleteItems] of ds.clients.entries()) {\n const structs = /** @type {Array<GC|Item>} */ (store.clients.get(client));\n for (let di = deleteItems.length - 1; di >= 0; di--) {\n const deleteItem = deleteItems[di];\n const endDeleteItemClock = deleteItem.clock + deleteItem.len;\n for (\n let si = findIndexSS(structs, deleteItem.clock), struct = structs[si];\n si < structs.length && struct.id.clock < endDeleteItemClock;\n struct = structs[++si]\n ) {\n const struct = structs[si];\n if (deleteItem.clock + deleteItem.len <= struct.id.clock) {\n break\n }\n if (struct instanceof Item && struct.deleted && !struct.keep && gcFilter(struct)) {\n struct.gc(store, false);\n }\n }\n }\n }\n};\n\n/**\n * @param {DeleteSet} ds\n * @param {StructStore} store\n */\nconst tryMergeDeleteSet = (ds, store) => {\n // try to merge deleted / gc'd items\n // merge from right to left for better efficiency and so we don't miss any merge targets\n ds.clients.forEach((deleteItems, client) => {\n const structs = /** @type {Array<GC|Item>} */ (store.clients.get(client));\n for (let di = deleteItems.length - 1; di >= 0; di--) {\n const deleteItem = deleteItems[di];\n // start with merging the item next to the last deleted item\n const mostRightIndexToCheck = math.min(structs.length - 1, 1 + findIndexSS(structs, deleteItem.clock + deleteItem.len - 1));\n for (\n let si = mostRightIndexToCheck, struct = structs[si];\n si > 0 && struct.id.clock >= deleteItem.clock;\n struct = structs[si]\n ) {\n si -= 1 + tryToMergeWithLefts(structs, si);\n }\n }\n });\n};\n\n/**\n * @param {DeleteSet} ds\n * @param {StructStore} store\n * @param {function(Item):boolean} gcFilter\n */\nconst tryGc = (ds, store, gcFilter) => {\n tryGcDeleteSet(ds, store, gcFilter);\n tryMergeDeleteSet(ds, store);\n};\n\n/**\n * @param {Array<Transaction>} transactionCleanups\n * @param {number} i\n */\nconst cleanupTransactions = (transactionCleanups, i) => {\n if (i < transactionCleanups.length) {\n const transaction = transactionCleanups[i];\n const doc = transaction.doc;\n const store = doc.store;\n const ds = transaction.deleteSet;\n const mergeStructs = transaction._mergeStructs;\n try {\n sortAndMergeDeleteSet(ds);\n transaction.afterState = getStateVector(transaction.doc.store);\n doc.emit('beforeObserverCalls', [transaction, doc]);\n /**\n * An array of event callbacks.\n *\n * Each callback is called even if the other ones throw errors.\n *\n * @type {Array<function():void>}\n */\n const fs = [];\n // observe events on changed types\n transaction.changed.forEach((subs, itemtype) =>\n fs.push(() => {\n if (itemtype._item === null || !itemtype._item.deleted) {\n itemtype._callObserver(transaction, subs);\n }\n })\n );\n fs.push(() => {\n // deep observe events\n transaction.changedParentTypes.forEach((events, type) => {\n // We need to think about the possibility that the user transforms the\n // Y.Doc in the event.\n if (type._dEH.l.length > 0 && (type._item === null || !type._item.deleted)) {\n events = events\n .filter(event =>\n event.target._item === null || !event.target._item.deleted\n );\n events\n .forEach(event => {\n event.currentTarget = type;\n // path is relative to the current target\n event._path = null;\n });\n // sort events by path length so that top-level events are fired first.\n events\n .sort((event1, event2) => event1.path.length - event2.path.length);\n // We don't need to check for events.length\n // because we know it has at least one element\n callEventHandlerListeners(type._dEH, events, transaction);\n }\n });\n });\n fs.push(() => doc.emit('afterTransaction', [transaction, doc]));\n callAll(fs, []);\n if (transaction._needFormattingCleanup) {\n cleanupYTextAfterTransaction(transaction);\n }\n } finally {\n // Replace deleted items with ItemDeleted / GC.\n // This is where content is actually remove from the Yjs Doc.\n if (doc.gc) {\n tryGcDeleteSet(ds, store, doc.gcFilter);\n }\n tryMergeDeleteSet(ds, store);\n\n // on all affected store.clients props, try to merge\n transaction.afterState.forEach((clock, client) => {\n const beforeClock = transaction.beforeState.get(client) || 0;\n if (beforeClock !== clock) {\n const structs = /** @type {Array<GC|Item>} */ (store.clients.get(client));\n // we iterate from right to left so we can safely remove entries\n const firstChangePos = math.max(findIndexSS(structs, beforeClock), 1);\n for (let i = structs.length - 1; i >= firstChangePos;) {\n i -= 1 + tryToMergeWithLefts(structs, i);\n }\n }\n });\n // try to merge mergeStructs\n // @todo: it makes more sense to transform mergeStructs to a DS, sort it, and merge from right to left\n // but at the moment DS does not handle duplicates\n for (let i = mergeStructs.length - 1; i >= 0; i--) {\n const { client, clock } = mergeStructs[i].id;\n const structs = /** @type {Array<GC|Item>} */ (store.clients.get(client));\n const replacedStructPos = findIndexSS(structs, clock);\n if (replacedStructPos + 1 < structs.length) {\n if (tryToMergeWithLefts(structs, replacedStructPos + 1) > 1) {\n continue // no need to perform next check, both are already merged\n }\n }\n if (replacedStructPos > 0) {\n tryToMergeWithLefts(structs, replacedStructPos);\n }\n }\n if (!transaction.local && transaction.afterState.get(doc.clientID) !== transaction.beforeState.get(doc.clientID)) {\n logging.print(logging.ORANGE, logging.BOLD, '[yjs] ', logging.UNBOLD, logging.RED, 'Changed the client-id because another client seems to be using it.');\n doc.clientID = generateNewClientId();\n }\n // @todo Merge all the transactions into one and provide send the data as a single update message\n doc.emit('afterTransactionCleanup', [transaction, doc]);\n if (doc._observers.has('update')) {\n const encoder = new UpdateEncoderV1();\n const hasContent = writeUpdateMessageFromTransaction(encoder, transaction);\n if (hasContent) {\n doc.emit('update', [encoder.toUint8Array(), transaction.origin, doc, transaction]);\n }\n }\n if (doc._observers.has('updateV2')) {\n const encoder = new UpdateEncoderV2();\n const hasContent = writeUpdateMessageFromTransaction(encoder, transaction);\n if (hasContent) {\n doc.emit('updateV2', [encoder.toUint8Array(), transaction.origin, doc, transaction]);\n }\n }\n const { subdocsAdded, subdocsLoaded, subdocsRemoved } = transaction;\n if (subdocsAdded.size > 0 || subdocsRemoved.size > 0 || subdocsLoaded.size > 0) {\n subdocsAdded.forEach(subdoc => {\n subdoc.clientID = doc.clientID;\n if (subdoc.collectionid == null) {\n subdoc.collectionid = doc.collectionid;\n }\n doc.subdocs.add(subdoc);\n });\n subdocsRemoved.forEach(subdoc => doc.subdocs.delete(subdoc));\n doc.emit('subdocs', [{ loaded: subdocsLoaded, added: subdocsAdded, removed: subdocsRemoved }, doc, transaction]);\n subdocsRemoved.forEach(subdoc => subdoc.destroy());\n }\n\n if (transactionCleanups.length <= i + 1) {\n doc._transactionCleanups = [];\n doc.emit('afterAllTransactions', [doc, transactionCleanups]);\n } else {\n cleanupTransactions(transactionCleanups, i + 1);\n }\n }\n }\n};\n\n/**\n * Implements the functionality of `y.transact(()=>{..})`\n *\n * @template T\n * @param {Doc} doc\n * @param {function(Transaction):T} f\n * @param {any} [origin=true]\n * @return {T}\n *\n * @function\n */\nconst transact = (doc, f, origin = null, local = true) => {\n const transactionCleanups = doc._transactionCleanups;\n let initialCall = false;\n /**\n * @type {any}\n */\n let result = null;\n if (doc._transaction === null) {\n initialCall = true;\n doc._transaction = new Transaction(doc, origin, local);\n transactionCleanups.push(doc._transaction);\n if (transactionCleanups.length === 1) {\n doc.emit('beforeAllTransactions', [doc]);\n }\n doc.emit('beforeTransaction', [doc._transaction, doc]);\n }\n try {\n result = f(doc._transaction);\n } finally {\n if (initialCall) {\n const finishCleanup = doc._transaction === transactionCleanups[0];\n doc._transaction = null;\n if (finishCleanup) {\n // The first transaction ended, now process observer calls.\n // Observer call may create new transactions for which we need to call the observers and do cleanup.\n // We don't want to nest these calls, so we execute these calls one after\n // another.\n // Also we need to ensure that all cleanups are called, even if the\n // observes throw errors.\n // This file is full of hacky try {} finally {} blocks to ensure that an\n // event can throw errors and also that the cleanup is called.\n cleanupTransactions(transactionCleanups, 0);\n }\n }\n }\n return result\n};\n\nclass StackItem {\n /**\n * @param {DeleteSet} deletions\n * @param {DeleteSet} insertions\n */\n constructor (deletions, insertions) {\n this.insertions = insertions;\n this.deletions = deletions;\n /**\n * Use this to save and restore metadata like selection range\n */\n this.meta = new Map();\n }\n}\n/**\n * @param {Transaction} tr\n * @param {UndoManager} um\n * @param {StackItem} stackItem\n */\nconst clearUndoManagerStackItem = (tr, um, stackItem) => {\n iterateDeletedStructs(tr, stackItem.deletions, item => {\n if (item instanceof Item && um.scope.some(type => type === tr.doc || isParentOf(/** @type {AbstractType<any>} */ (type), item))) {\n keepItem(item, false);\n }\n });\n};\n\n/**\n * @param {UndoManager} undoManager\n * @param {Array<StackItem>} stack\n * @param {'undo'|'redo'} eventType\n * @return {StackItem?}\n */\nconst popStackItem = (undoManager, stack, eventType) => {\n /**\n * Keep a reference to the transaction so we can fire the event with the changedParentTypes\n * @type {any}\n */\n let _tr = null;\n const doc = undoManager.doc;\n const scope = undoManager.scope;\n transact(doc, transaction => {\n while (stack.length > 0 && undoManager.currStackItem === null) {\n const store = doc.store;\n const stackItem = /** @type {StackItem} */ (stack.pop());\n /**\n * @type {Set<Item>}\n */\n const itemsToRedo = new Set();\n /**\n * @type {Array<Item>}\n */\n const itemsToDelete = [];\n let performedChange = false;\n iterateDeletedStructs(transaction, stackItem.insertions, struct => {\n if (struct instanceof Item) {\n if (struct.redone !== null) {\n let { item, diff } = followRedone(store, struct.id);\n if (diff > 0) {\n item = getItemCleanStart(transaction, createID(item.id.client, item.id.clock + diff));\n }\n struct = item;\n }\n if (!struct.deleted && scope.some(type => type === transaction.doc || isParentOf(/** @type {AbstractType<any>} */ (type), /** @type {Item} */ (struct)))) {\n itemsToDelete.push(struct);\n }\n }\n });\n iterateDeletedStructs(transaction, stackItem.deletions, struct => {\n if (\n struct instanceof Item &&\n scope.some(type => type === transaction.doc || isParentOf(/** @type {AbstractType<any>} */ (type), struct)) &&\n // Never redo structs in stackItem.insertions because they were created and deleted in the same capture interval.\n !isDeleted(stackItem.insertions, struct.id)\n ) {\n itemsToRedo.add(struct);\n }\n });\n itemsToRedo.forEach(struct => {\n performedChange = redoItem(transaction, struct, itemsToRedo, stackItem.insertions, undoManager.ignoreRemoteMapChanges, undoManager) !== null || performedChange;\n });\n // We want to delete in reverse order so that children are deleted before\n // parents, so we have more information available when items are filtered.\n for (let i = itemsToDelete.length - 1; i >= 0; i--) {\n const item = itemsToDelete[i];\n if (undoManager.deleteFilter(item)) {\n item.delete(transaction);\n performedChange = true;\n }\n }\n undoManager.currStackItem = performedChange ? stackItem : null;\n }\n transaction.changed.forEach((subProps, type) => {\n // destroy search marker if necessary\n if (subProps.has(null) && type._searchMarker) {\n type._searchMarker.length = 0;\n }\n });\n _tr = transaction;\n }, undoManager);\n const res = undoManager.currStackItem;\n if (res != null) {\n const changedParentTypes = _tr.changedParentTypes;\n undoManager.emit('stack-item-popped', [{ stackItem: res, type: eventType, changedParentTypes, origin: undoManager }, undoManager]);\n undoManager.currStackItem = null;\n }\n return res\n};\n\n/**\n * @typedef {Object} UndoManagerOptions\n * @property {number} [UndoManagerOptions.captureTimeout=500]\n * @property {function(Transaction):boolean} [UndoManagerOptions.captureTransaction] Do not capture changes of a Transaction if result false.\n * @property {function(Item):boolean} [UndoManagerOptions.deleteFilter=()=>true] Sometimes\n * it is necessary to filter what an Undo/Redo operation can delete. If this\n * filter returns false, the type/item won't be deleted even it is in the\n * undo/redo scope.\n * @property {Set<any>} [UndoManagerOptions.trackedOrigins=new Set([null])]\n * @property {boolean} [ignoreRemoteMapChanges] Experimental. By default, the UndoManager will never overwrite remote changes. Enable this property to enable overwriting remote changes on key-value changes (Y.Map, properties on Y.Xml, etc..).\n * @property {Doc} [doc] The document that this UndoManager operates on. Only needed if typeScope is empty.\n */\n\n/**\n * @typedef {Object} StackItemEvent\n * @property {StackItem} StackItemEvent.stackItem\n * @property {any} StackItemEvent.origin\n * @property {'undo'|'redo'} StackItemEvent.type\n * @property {Map<AbstractType<YEvent<any>>,Array<YEvent<any>>>} StackItemEvent.changedParentTypes\n */\n\n/**\n * Fires 'stack-item-added' event when a stack item was added to either the undo- or\n * the redo-stack. You may store additional stack information via the\n * metadata property on `event.stackItem.meta` (it is a `Map` of metadata properties).\n * Fires 'stack-item-popped' event when a stack item was popped from either the\n * undo- or the redo-stack. You may restore the saved stack information from `event.stackItem.meta`.\n *\n * @extends {ObservableV2<{'stack-item-added':function(StackItemEvent, UndoManager):void, 'stack-item-popped': function(StackItemEvent, UndoManager):void, 'stack-cleared': function({ undoStackCleared: boolean, redoStackCleared: boolean }):void, 'stack-item-updated': function(StackItemEvent, UndoManager):void }>}\n */\nclass UndoManager extends ObservableV2 {\n /**\n * @param {Doc|AbstractType<any>|Array<AbstractType<any>>} typeScope Limits the scope of the UndoManager. If this is set to a ydoc instance, all changes on that ydoc will be undone. If set to a specific type, only changes on that type or its children will be undone. Also accepts an array of types.\n * @param {UndoManagerOptions} options\n */\n constructor (typeScope, {\n captureTimeout = 500,\n captureTransaction = _tr => true,\n deleteFilter = () => true,\n trackedOrigins = new Set([null]),\n ignoreRemoteMapChanges = false,\n doc = /** @type {Doc} */ (array.isArray(typeScope) ? typeScope[0].doc : typeScope instanceof Doc ? typeScope : typeScope.doc)\n } = {}) {\n super();\n /**\n * @type {Array<AbstractType<any> | Doc>}\n */\n this.scope = [];\n this.doc = doc;\n this.addToScope(typeScope);\n this.deleteFilter = deleteFilter;\n trackedOrigins.add(this);\n this.trackedOrigins = trackedOrigins;\n this.captureTransaction = captureTransaction;\n /**\n * @type {Array<StackItem>}\n */\n this.undoStack = [];\n /**\n * @type {Array<StackItem>}\n */\n this.redoStack = [];\n /**\n * Whether the client is currently undoing (calling UndoManager.undo)\n *\n * @type {boolean}\n */\n this.undoing = false;\n this.redoing = false;\n /**\n * The currently popped stack item if UndoManager.undoing or UndoManager.redoing\n *\n * @type {StackItem|null}\n */\n this.currStackItem = null;\n this.lastChange = 0;\n this.ignoreRemoteMapChanges = ignoreRemoteMapChanges;\n this.captureTimeout = captureTimeout;\n /**\n * @param {Transaction} transaction\n */\n this.afterTransactionHandler = transaction => {\n // Only track certain transactions\n if (\n !this.captureTransaction(transaction) ||\n !this.scope.some(type => transaction.changedParentTypes.has(/** @type {AbstractType<any>} */ (type)) || type === this.doc) ||\n (!this.trackedOrigins.has(transaction.origin) && (!transaction.origin || !this.trackedOrigins.has(transaction.origin.constructor)))\n ) {\n return\n }\n const undoing = this.undoing;\n const redoing = this.redoing;\n const stack = undoing ? this.redoStack : this.undoStack;\n if (undoing) {\n this.stopCapturing(); // next undo should not be appended to last stack item\n } else if (!redoing) {\n // neither undoing nor redoing: delete redoStack\n this.clear(false, true);\n }\n const insertions = new DeleteSet();\n transaction.afterState.forEach((endClock, client) => {\n const startClock = transaction.beforeState.get(client) || 0;\n const len = endClock - startClock;\n if (len > 0) {\n addToDeleteSet(insertions, client, startClock, len);\n }\n });\n const now = time.getUnixTime();\n let didAdd = false;\n if (this.lastChange > 0 && now - this.lastChange < this.captureTimeout && stack.length > 0 && !undoing && !redoing) {\n // append change to last stack op\n const lastOp = stack[stack.length - 1];\n lastOp.deletions = mergeDeleteSets([lastOp.deletions, transaction.deleteSet]);\n lastOp.insertions = mergeDeleteSets([lastOp.insertions, insertions]);\n } else {\n // create a new stack op\n stack.push(new StackItem(transaction.deleteSet, insertions));\n didAdd = true;\n }\n if (!undoing && !redoing) {\n this.lastChange = now;\n }\n // make sure that deleted structs are not gc'd\n iterateDeletedStructs(transaction, transaction.deleteSet, /** @param {Item|GC} item */ item => {\n if (item instanceof Item && this.scope.some(type => type === transaction.doc || isParentOf(/** @type {AbstractType<any>} */ (type), item))) {\n keepItem(item, true);\n }\n });\n /**\n * @type {[StackItemEvent, UndoManager]}\n */\n const changeEvent = [{ stackItem: stack[stack.length - 1], origin: transaction.origin, type: undoing ? 'redo' : 'undo', changedParentTypes: transaction.changedParentTypes }, this];\n if (didAdd) {\n this.emit('stack-item-added', changeEvent);\n } else {\n this.emit('stack-item-updated', changeEvent);\n }\n };\n this.doc.on('afterTransaction', this.afterTransactionHandler);\n this.doc.on('destroy', () => {\n this.destroy();\n });\n }\n\n /**\n * Extend the scope.\n *\n * @param {Array<AbstractType<any> | Doc> | AbstractType<any> | Doc} ytypes\n */\n addToScope (ytypes) {\n const tmpSet = new Set(this.scope);\n ytypes = array.isArray(ytypes) ? ytypes : [ytypes];\n ytypes.forEach(ytype => {\n if (!tmpSet.has(ytype)) {\n tmpSet.add(ytype);\n if (ytype instanceof AbstractType ? ytype.doc !== this.doc : ytype !== this.doc) logging.warn('[yjs#509] Not same Y.Doc'); // use MultiDocUndoManager instead. also see https://github.com/yjs/yjs/issues/509\n this.scope.push(ytype);\n }\n });\n }\n\n /**\n * @param {any} origin\n */\n addTrackedOrigin (origin) {\n this.trackedOrigins.add(origin);\n }\n\n /**\n * @param {any} origin\n */\n removeTrackedOrigin (origin) {\n this.trackedOrigins.delete(origin);\n }\n\n clear (clearUndoStack = true, clearRedoStack = true) {\n if ((clearUndoStack && this.canUndo()) || (clearRedoStack && this.canRedo())) {\n this.doc.transact(tr => {\n if (clearUndoStack) {\n this.undoStack.forEach(item => clearUndoManagerStackItem(tr, this, item));\n this.undoStack = [];\n }\n if (clearRedoStack) {\n this.redoStack.forEach(item => clearUndoManagerStackItem(tr, this, item));\n this.redoStack = [];\n }\n this.emit('stack-cleared', [{ undoStackCleared: clearUndoStack, redoStackCleared: clearRedoStack }]);\n });\n }\n }\n\n /**\n * UndoManager merges Undo-StackItem if they are created within time-gap\n * smaller than `options.captureTimeout`. Call `um.stopCapturing()` so that the next\n * StackItem won't be merged.\n *\n *\n * @example\n * // without stopCapturing\n * ytext.insert(0, 'a')\n * ytext.insert(1, 'b')\n * um.undo()\n * ytext.toString() // => '' (note that 'ab' was removed)\n * // with stopCapturing\n * ytext.insert(0, 'a')\n * um.stopCapturing()\n * ytext.insert(0, 'b')\n * um.undo()\n * ytext.toString() // => 'a' (note that only 'b' was removed)\n *\n */\n stopCapturing () {\n this.lastChange = 0;\n }\n\n /**\n * Undo last changes on type.\n *\n * @return {StackItem?} Returns StackItem if a change was applied\n */\n undo () {\n this.undoing = true;\n let res;\n try {\n res = popStackItem(this, this.undoStack, 'undo');\n } finally {\n this.undoing = false;\n }\n return res\n }\n\n /**\n * Redo last undo operation.\n *\n * @return {StackItem?} Returns StackItem if a change was applied\n */\n redo () {\n this.redoing = true;\n let res;\n try {\n res = popStackItem(this, this.redoStack, 'redo');\n } finally {\n this.redoing = false;\n }\n return res\n }\n\n /**\n * Are undo steps available?\n *\n * @return {boolean} `true` if undo is possible\n */\n canUndo () {\n return this.undoStack.length > 0\n }\n\n /**\n * Are redo steps available?\n *\n * @return {boolean} `true` if redo is possible\n */\n canRedo () {\n return this.redoStack.length > 0\n }\n\n destroy () {\n this.trackedOrigins.delete(this);\n this.doc.off('afterTransaction', this.afterTransactionHandler);\n super.destroy();\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n */\nfunction * lazyStructReaderGenerator (decoder) {\n const numOfStateUpdates = decoding.readVarUint(decoder.restDecoder);\n for (let i = 0; i < numOfStateUpdates; i++) {\n const numberOfStructs = decoding.readVarUint(decoder.restDecoder);\n const client = decoder.readClient();\n let clock = decoding.readVarUint(decoder.restDecoder);\n for (let i = 0; i < numberOfStructs; i++) {\n const info = decoder.readInfo();\n // @todo use switch instead of ifs\n if (info === 10) {\n const len = decoding.readVarUint(decoder.restDecoder);\n yield new Skip(createID(client, clock), len);\n clock += len;\n } else if ((binary.BITS5 & info) !== 0) {\n const cantCopyParentInfo = (info & (binary.BIT7 | binary.BIT8)) === 0;\n // If parent = null and neither left nor right are defined, then we know that `parent` is child of `y`\n // and we read the next string as parentYKey.\n // It indicates how we store/retrieve parent from `y.share`\n // @type {string|null}\n const struct = new Item(\n createID(client, clock),\n null, // left\n (info & binary.BIT8) === binary.BIT8 ? decoder.readLeftID() : null, // origin\n null, // right\n (info & binary.BIT7) === binary.BIT7 ? decoder.readRightID() : null, // right origin\n // @ts-ignore Force writing a string here.\n cantCopyParentInfo ? (decoder.readParentInfo() ? decoder.readString() : decoder.readLeftID()) : null, // parent\n cantCopyParentInfo && (info & binary.BIT6) === binary.BIT6 ? decoder.readString() : null, // parentSub\n readItemContent(decoder, info) // item content\n );\n yield struct;\n clock += struct.length;\n } else {\n const len = decoder.readLen();\n yield new GC(createID(client, clock), len);\n clock += len;\n }\n }\n }\n}\n\nclass LazyStructReader {\n /**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @param {boolean} filterSkips\n */\n constructor (decoder, filterSkips) {\n this.gen = lazyStructReaderGenerator(decoder);\n /**\n * @type {null | Item | Skip | GC}\n */\n this.curr = null;\n this.done = false;\n this.filterSkips = filterSkips;\n this.next();\n }\n\n /**\n * @return {Item | GC | Skip |null}\n */\n next () {\n // ignore \"Skip\" structs\n do {\n this.curr = this.gen.next().value || null;\n } while (this.filterSkips && this.curr !== null && this.curr.constructor === Skip)\n return this.curr\n }\n}\n\n/**\n * @param {Uint8Array} update\n *\n */\nconst logUpdate = update => logUpdateV2(update, UpdateDecoderV1);\n\n/**\n * @param {Uint8Array} update\n * @param {typeof UpdateDecoderV2 | typeof UpdateDecoderV1} [YDecoder]\n *\n */\nconst logUpdateV2 = (update, YDecoder = UpdateDecoderV2) => {\n const structs = [];\n const updateDecoder = new YDecoder(decoding.createDecoder(update));\n const lazyDecoder = new LazyStructReader(updateDecoder, false);\n for (let curr = lazyDecoder.curr; curr !== null; curr = lazyDecoder.next()) {\n structs.push(curr);\n }\n logging.print('Structs: ', structs);\n const ds = readDeleteSet(updateDecoder);\n logging.print('DeleteSet: ', ds);\n};\n\n/**\n * @param {Uint8Array} update\n *\n */\nconst decodeUpdate = (update) => decodeUpdateV2(update, UpdateDecoderV1);\n\n/**\n * @param {Uint8Array} update\n * @param {typeof UpdateDecoderV2 | typeof UpdateDecoderV1} [YDecoder]\n *\n */\nconst decodeUpdateV2 = (update, YDecoder = UpdateDecoderV2) => {\n const structs = [];\n const updateDecoder = new YDecoder(decoding.createDecoder(update));\n const lazyDecoder = new LazyStructReader(updateDecoder, false);\n for (let curr = lazyDecoder.curr; curr !== null; curr = lazyDecoder.next()) {\n structs.push(curr);\n }\n return {\n structs,\n ds: readDeleteSet(updateDecoder)\n }\n};\n\nclass LazyStructWriter {\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n */\n constructor (encoder) {\n this.currClient = 0;\n this.startClock = 0;\n this.written = 0;\n this.encoder = encoder;\n /**\n * We want to write operations lazily, but also we need to know beforehand how many operations we want to write for each client.\n *\n * This kind of meta-information (#clients, #structs-per-client-written) is written to the restEncoder.\n *\n * We fragment the restEncoder and store a slice of it per-client until we know how many clients there are.\n * When we flush (toUint8Array) we write the restEncoder using the fragments and the meta-information.\n *\n * @type {Array<{ written: number, restEncoder: Uint8Array }>}\n */\n this.clientStructs = [];\n }\n}\n\n/**\n * @param {Array<Uint8Array>} updates\n * @return {Uint8Array}\n */\nconst mergeUpdates = updates => mergeUpdatesV2(updates, UpdateDecoderV1, UpdateEncoderV1);\n\n/**\n * @param {Uint8Array} update\n * @param {typeof DSEncoderV1 | typeof DSEncoderV2} YEncoder\n * @param {typeof UpdateDecoderV1 | typeof UpdateDecoderV2} YDecoder\n * @return {Uint8Array}\n */\nconst encodeStateVectorFromUpdateV2 = (update, YEncoder = DSEncoderV2, YDecoder = UpdateDecoderV2) => {\n const encoder = new YEncoder();\n const updateDecoder = new LazyStructReader(new YDecoder(decoding.createDecoder(update)), false);\n let curr = updateDecoder.curr;\n if (curr !== null) {\n let size = 0;\n let currClient = curr.id.client;\n let stopCounting = curr.id.clock !== 0; // must start at 0\n let currClock = stopCounting ? 0 : curr.id.clock + curr.length;\n for (; curr !== null; curr = updateDecoder.next()) {\n if (currClient !== curr.id.client) {\n if (currClock !== 0) {\n size++;\n // We found a new client\n // write what we have to the encoder\n encoding.writeVarUint(encoder.restEncoder, currClient);\n encoding.writeVarUint(encoder.restEncoder, currClock);\n }\n currClient = curr.id.client;\n currClock = 0;\n stopCounting = curr.id.clock !== 0;\n }\n // we ignore skips\n if (curr.constructor === Skip) {\n stopCounting = true;\n }\n if (!stopCounting) {\n currClock = curr.id.clock + curr.length;\n }\n }\n // write what we have\n if (currClock !== 0) {\n size++;\n encoding.writeVarUint(encoder.restEncoder, currClient);\n encoding.writeVarUint(encoder.restEncoder, currClock);\n }\n // prepend the size of the state vector\n const enc = encoding.createEncoder();\n encoding.writeVarUint(enc, size);\n encoding.writeBinaryEncoder(enc, encoder.restEncoder);\n encoder.restEncoder = enc;\n return encoder.toUint8Array()\n } else {\n encoding.writeVarUint(encoder.restEncoder, 0);\n return encoder.toUint8Array()\n }\n};\n\n/**\n * @param {Uint8Array} update\n * @return {Uint8Array}\n */\nconst encodeStateVectorFromUpdate = update => encodeStateVectorFromUpdateV2(update, DSEncoderV1, UpdateDecoderV1);\n\n/**\n * @param {Uint8Array} update\n * @param {typeof UpdateDecoderV1 | typeof UpdateDecoderV2} YDecoder\n * @return {{ from: Map<number,number>, to: Map<number,number> }}\n */\nconst parseUpdateMetaV2 = (update, YDecoder = UpdateDecoderV2) => {\n /**\n * @type {Map<number, number>}\n */\n const from = new Map();\n /**\n * @type {Map<number, number>}\n */\n const to = new Map();\n const updateDecoder = new LazyStructReader(new YDecoder(decoding.createDecoder(update)), false);\n let curr = updateDecoder.curr;\n if (curr !== null) {\n let currClient = curr.id.client;\n let currClock = curr.id.clock;\n // write the beginning to `from`\n from.set(currClient, currClock);\n for (; curr !== null; curr = updateDecoder.next()) {\n if (currClient !== curr.id.client) {\n // We found a new client\n // write the end to `to`\n to.set(currClient, currClock);\n // write the beginning to `from`\n from.set(curr.id.client, curr.id.clock);\n // update currClient\n currClient = curr.id.client;\n }\n currClock = curr.id.clock + curr.length;\n }\n // write the end to `to`\n to.set(currClient, currClock);\n }\n return { from, to }\n};\n\n/**\n * @param {Uint8Array} update\n * @return {{ from: Map<number,number>, to: Map<number,number> }}\n */\nconst parseUpdateMeta = update => parseUpdateMetaV2(update, UpdateDecoderV1);\n\n/**\n * This method is intended to slice any kind of struct and retrieve the right part.\n * It does not handle side-effects, so it should only be used by the lazy-encoder.\n *\n * @param {Item | GC | Skip} left\n * @param {number} diff\n * @return {Item | GC}\n */\nconst sliceStruct = (left, diff) => {\n if (left.constructor === GC) {\n const { client, clock } = left.id;\n return new GC(createID(client, clock + diff), left.length - diff)\n } else if (left.constructor === Skip) {\n const { client, clock } = left.id;\n return new Skip(createID(client, clock + diff), left.length - diff)\n } else {\n const leftItem = /** @type {Item} */ (left);\n const { client, clock } = leftItem.id;\n return new Item(\n createID(client, clock + diff),\n null,\n createID(client, clock + diff - 1),\n null,\n leftItem.rightOrigin,\n leftItem.parent,\n leftItem.parentSub,\n leftItem.content.splice(diff)\n )\n }\n};\n\n/**\n *\n * This function works similarly to `readUpdateV2`.\n *\n * @param {Array<Uint8Array>} updates\n * @param {typeof UpdateDecoderV1 | typeof UpdateDecoderV2} [YDecoder]\n * @param {typeof UpdateEncoderV1 | typeof UpdateEncoderV2} [YEncoder]\n * @return {Uint8Array}\n */\nconst mergeUpdatesV2 = (updates, YDecoder = UpdateDecoderV2, YEncoder = UpdateEncoderV2) => {\n if (updates.length === 1) {\n return updates[0]\n }\n const updateDecoders = updates.map(update => new YDecoder(decoding.createDecoder(update)));\n let lazyStructDecoders = updateDecoders.map(decoder => new LazyStructReader(decoder, true));\n\n /**\n * @todo we don't need offset because we always slice before\n * @type {null | { struct: Item | GC | Skip, offset: number }}\n */\n let currWrite = null;\n\n const updateEncoder = new YEncoder();\n // write structs lazily\n const lazyStructEncoder = new LazyStructWriter(updateEncoder);\n\n // Note: We need to ensure that all lazyStructDecoders are fully consumed\n // Note: Should merge document updates whenever possible - even from different updates\n // Note: Should handle that some operations cannot be applied yet ()\n\n while (true) {\n // Write higher clients first ⇒ sort by clientID & clock and remove decoders without content\n lazyStructDecoders = lazyStructDecoders.filter(dec => dec.curr !== null);\n lazyStructDecoders.sort(\n /** @type {function(any,any):number} */ (dec1, dec2) => {\n if (dec1.curr.id.client === dec2.curr.id.client) {\n const clockDiff = dec1.curr.id.clock - dec2.curr.id.clock;\n if (clockDiff === 0) {\n // @todo remove references to skip since the structDecoders must filter Skips.\n return dec1.curr.constructor === dec2.curr.constructor\n ? 0\n : dec1.curr.constructor === Skip ? 1 : -1 // we are filtering skips anyway.\n } else {\n return clockDiff\n }\n } else {\n return dec2.curr.id.client - dec1.curr.id.client\n }\n }\n );\n if (lazyStructDecoders.length === 0) {\n break\n }\n const currDecoder = lazyStructDecoders[0];\n // write from currDecoder until the next operation is from another client or if filler-struct\n // then we need to reorder the decoders and find the next operation to write\n const firstClient = /** @type {Item | GC} */ (currDecoder.curr).id.client;\n\n if (currWrite !== null) {\n let curr = /** @type {Item | GC | null} */ (currDecoder.curr);\n let iterated = false;\n\n // iterate until we find something that we haven't written already\n // remember: first the high client-ids are written\n while (curr !== null && curr.id.clock + curr.length <= currWrite.struct.id.clock + currWrite.struct.length && curr.id.client >= currWrite.struct.id.client) {\n curr = currDecoder.next();\n iterated = true;\n }\n if (\n curr === null || // current decoder is empty\n curr.id.client !== firstClient || // check whether there is another decoder that has has updates from `firstClient`\n (iterated && curr.id.clock > currWrite.struct.id.clock + currWrite.struct.length) // the above while loop was used and we are potentially missing updates\n ) {\n continue\n }\n\n if (firstClient !== currWrite.struct.id.client) {\n writeStructToLazyStructWriter(lazyStructEncoder, currWrite.struct, currWrite.offset);\n currWrite = { struct: curr, offset: 0 };\n currDecoder.next();\n } else {\n if (currWrite.struct.id.clock + currWrite.struct.length < curr.id.clock) {\n // @todo write currStruct & set currStruct = Skip(clock = currStruct.id.clock + currStruct.length, length = curr.id.clock - self.clock)\n if (currWrite.struct.constructor === Skip) {\n // extend existing skip\n currWrite.struct.length = curr.id.clock + curr.length - currWrite.struct.id.clock;\n } else {\n writeStructToLazyStructWriter(lazyStructEncoder, currWrite.struct, currWrite.offset);\n const diff = curr.id.clock - currWrite.struct.id.clock - currWrite.struct.length;\n /**\n * @type {Skip}\n */\n const struct = new Skip(createID(firstClient, currWrite.struct.id.clock + currWrite.struct.length), diff);\n currWrite = { struct, offset: 0 };\n }\n } else { // if (currWrite.struct.id.clock + currWrite.struct.length >= curr.id.clock) {\n const diff = currWrite.struct.id.clock + currWrite.struct.length - curr.id.clock;\n if (diff > 0) {\n if (currWrite.struct.constructor === Skip) {\n // prefer to slice Skip because the other struct might contain more information\n currWrite.struct.length -= diff;\n } else {\n curr = sliceStruct(curr, diff);\n }\n }\n if (!currWrite.struct.mergeWith(/** @type {any} */ (curr))) {\n writeStructToLazyStructWriter(lazyStructEncoder, currWrite.struct, currWrite.offset);\n currWrite = { struct: curr, offset: 0 };\n currDecoder.next();\n }\n }\n }\n } else {\n currWrite = { struct: /** @type {Item | GC} */ (currDecoder.curr), offset: 0 };\n currDecoder.next();\n }\n for (\n let next = currDecoder.curr;\n next !== null && next.id.client === firstClient && next.id.clock === currWrite.struct.id.clock + currWrite.struct.length && next.constructor !== Skip;\n next = currDecoder.next()\n ) {\n writeStructToLazyStructWriter(lazyStructEncoder, currWrite.struct, currWrite.offset);\n currWrite = { struct: next, offset: 0 };\n }\n }\n if (currWrite !== null) {\n writeStructToLazyStructWriter(lazyStructEncoder, currWrite.struct, currWrite.offset);\n currWrite = null;\n }\n finishLazyStructWriting(lazyStructEncoder);\n\n const dss = updateDecoders.map(decoder => readDeleteSet(decoder));\n const ds = mergeDeleteSets(dss);\n writeDeleteSet(updateEncoder, ds);\n return updateEncoder.toUint8Array()\n};\n\n/**\n * @param {Uint8Array} update\n * @param {Uint8Array} sv\n * @param {typeof UpdateDecoderV1 | typeof UpdateDecoderV2} [YDecoder]\n * @param {typeof UpdateEncoderV1 | typeof UpdateEncoderV2} [YEncoder]\n */\nconst diffUpdateV2 = (update, sv, YDecoder = UpdateDecoderV2, YEncoder = UpdateEncoderV2) => {\n const state = decodeStateVector(sv);\n const encoder = new YEncoder();\n const lazyStructWriter = new LazyStructWriter(encoder);\n const decoder = new YDecoder(decoding.createDecoder(update));\n const reader = new LazyStructReader(decoder, false);\n while (reader.curr) {\n const curr = reader.curr;\n const currClient = curr.id.client;\n const svClock = state.get(currClient) || 0;\n if (reader.curr.constructor === Skip) {\n // the first written struct shouldn't be a skip\n reader.next();\n continue\n }\n if (curr.id.clock + curr.length > svClock) {\n writeStructToLazyStructWriter(lazyStructWriter, curr, math.max(svClock - curr.id.clock, 0));\n reader.next();\n while (reader.curr && reader.curr.id.client === currClient) {\n writeStructToLazyStructWriter(lazyStructWriter, reader.curr, 0);\n reader.next();\n }\n } else {\n // read until something new comes up\n while (reader.curr && reader.curr.id.client === currClient && reader.curr.id.clock + reader.curr.length <= svClock) {\n reader.next();\n }\n }\n }\n finishLazyStructWriting(lazyStructWriter);\n // write ds\n const ds = readDeleteSet(decoder);\n writeDeleteSet(encoder, ds);\n return encoder.toUint8Array()\n};\n\n/**\n * @param {Uint8Array} update\n * @param {Uint8Array} sv\n */\nconst diffUpdate = (update, sv) => diffUpdateV2(update, sv, UpdateDecoderV1, UpdateEncoderV1);\n\n/**\n * @param {LazyStructWriter} lazyWriter\n */\nconst flushLazyStructWriter = lazyWriter => {\n if (lazyWriter.written > 0) {\n lazyWriter.clientStructs.push({ written: lazyWriter.written, restEncoder: encoding.toUint8Array(lazyWriter.encoder.restEncoder) });\n lazyWriter.encoder.restEncoder = encoding.createEncoder();\n lazyWriter.written = 0;\n }\n};\n\n/**\n * @param {LazyStructWriter} lazyWriter\n * @param {Item | GC} struct\n * @param {number} offset\n */\nconst writeStructToLazyStructWriter = (lazyWriter, struct, offset) => {\n // flush curr if we start another client\n if (lazyWriter.written > 0 && lazyWriter.currClient !== struct.id.client) {\n flushLazyStructWriter(lazyWriter);\n }\n if (lazyWriter.written === 0) {\n lazyWriter.currClient = struct.id.client;\n // write next client\n lazyWriter.encoder.writeClient(struct.id.client);\n // write startClock\n encoding.writeVarUint(lazyWriter.encoder.restEncoder, struct.id.clock + offset);\n }\n struct.write(lazyWriter.encoder, offset);\n lazyWriter.written++;\n};\n/**\n * Call this function when we collected all parts and want to\n * put all the parts together. After calling this method,\n * you can continue using the UpdateEncoder.\n *\n * @param {LazyStructWriter} lazyWriter\n */\nconst finishLazyStructWriting = (lazyWriter) => {\n flushLazyStructWriter(lazyWriter);\n\n // this is a fresh encoder because we called flushCurr\n const restEncoder = lazyWriter.encoder.restEncoder;\n\n /**\n * Now we put all the fragments together.\n * This works similarly to `writeClientsStructs`\n */\n\n // write # states that were updated - i.e. the clients\n encoding.writeVarUint(restEncoder, lazyWriter.clientStructs.length);\n\n for (let i = 0; i < lazyWriter.clientStructs.length; i++) {\n const partStructs = lazyWriter.clientStructs[i];\n /**\n * Works similarly to `writeStructs`\n */\n // write # encoded structs\n encoding.writeVarUint(restEncoder, partStructs.written);\n // write the rest of the fragment\n encoding.writeUint8Array(restEncoder, partStructs.restEncoder);\n }\n};\n\n/**\n * @param {Uint8Array} update\n * @param {function(Item|GC|Skip):Item|GC|Skip} blockTransformer\n * @param {typeof UpdateDecoderV2 | typeof UpdateDecoderV1} YDecoder\n * @param {typeof UpdateEncoderV2 | typeof UpdateEncoderV1 } YEncoder\n */\nconst convertUpdateFormat = (update, blockTransformer, YDecoder, YEncoder) => {\n const updateDecoder = new YDecoder(decoding.createDecoder(update));\n const lazyDecoder = new LazyStructReader(updateDecoder, false);\n const updateEncoder = new YEncoder();\n const lazyWriter = new LazyStructWriter(updateEncoder);\n for (let curr = lazyDecoder.curr; curr !== null; curr = lazyDecoder.next()) {\n writeStructToLazyStructWriter(lazyWriter, blockTransformer(curr), 0);\n }\n finishLazyStructWriting(lazyWriter);\n const ds = readDeleteSet(updateDecoder);\n writeDeleteSet(updateEncoder, ds);\n return updateEncoder.toUint8Array()\n};\n\n/**\n * @typedef {Object} ObfuscatorOptions\n * @property {boolean} [ObfuscatorOptions.formatting=true]\n * @property {boolean} [ObfuscatorOptions.subdocs=true]\n * @property {boolean} [ObfuscatorOptions.yxml=true] Whether to obfuscate nodeName / hookName\n */\n\n/**\n * @param {ObfuscatorOptions} obfuscator\n */\nconst createObfuscator = ({ formatting = true, subdocs = true, yxml = true } = {}) => {\n let i = 0;\n const mapKeyCache = map.create();\n const nodeNameCache = map.create();\n const formattingKeyCache = map.create();\n const formattingValueCache = map.create();\n formattingValueCache.set(null, null); // end of a formatting range should always be the end of a formatting range\n /**\n * @param {Item|GC|Skip} block\n * @return {Item|GC|Skip}\n */\n return block => {\n switch (block.constructor) {\n case GC:\n case Skip:\n return block\n case Item: {\n const item = /** @type {Item} */ (block);\n const content = item.content;\n switch (content.constructor) {\n case ContentDeleted:\n break\n case ContentType: {\n if (yxml) {\n const type = /** @type {ContentType} */ (content).type;\n if (type instanceof YXmlElement) {\n type.nodeName = map.setIfUndefined(nodeNameCache, type.nodeName, () => 'node-' + i);\n }\n if (type instanceof YXmlHook) {\n type.hookName = map.setIfUndefined(nodeNameCache, type.hookName, () => 'hook-' + i);\n }\n }\n break\n }\n case ContentAny: {\n const c = /** @type {ContentAny} */ (content);\n c.arr = c.arr.map(() => i);\n break\n }\n case ContentBinary: {\n const c = /** @type {ContentBinary} */ (content);\n c.content = new Uint8Array([i]);\n break\n }\n case ContentDoc: {\n const c = /** @type {ContentDoc} */ (content);\n if (subdocs) {\n c.opts = {};\n c.doc.guid = i + '';\n }\n break\n }\n case ContentEmbed: {\n const c = /** @type {ContentEmbed} */ (content);\n c.embed = {};\n break\n }\n case ContentFormat: {\n const c = /** @type {ContentFormat} */ (content);\n if (formatting) {\n c.key = map.setIfUndefined(formattingKeyCache, c.key, () => i + '');\n c.value = map.setIfUndefined(formattingValueCache, c.value, () => ({ i }));\n }\n break\n }\n case ContentJSON: {\n const c = /** @type {ContentJSON} */ (content);\n c.arr = c.arr.map(() => i);\n break\n }\n case ContentString: {\n const c = /** @type {ContentString} */ (content);\n c.str = string.repeat((i % 10) + '', c.str.length);\n break\n }\n default:\n // unknown content type\n error.unexpectedCase();\n }\n if (item.parentSub) {\n item.parentSub = map.setIfUndefined(mapKeyCache, item.parentSub, () => i + '');\n }\n i++;\n return block\n }\n default:\n // unknown block-type\n error.unexpectedCase();\n }\n }\n};\n\n/**\n * This function obfuscates the content of a Yjs update. This is useful to share\n * buggy Yjs documents while significantly limiting the possibility that a\n * developer can on the user. Note that it might still be possible to deduce\n * some information by analyzing the \"structure\" of the document or by analyzing\n * the typing behavior using the CRDT-related metadata that is still kept fully\n * intact.\n *\n * @param {Uint8Array} update\n * @param {ObfuscatorOptions} [opts]\n */\nconst obfuscateUpdate = (update, opts) => convertUpdateFormat(update, createObfuscator(opts), UpdateDecoderV1, UpdateEncoderV1);\n\n/**\n * @param {Uint8Array} update\n * @param {ObfuscatorOptions} [opts]\n */\nconst obfuscateUpdateV2 = (update, opts) => convertUpdateFormat(update, createObfuscator(opts), UpdateDecoderV2, UpdateEncoderV2);\n\n/**\n * @param {Uint8Array} update\n */\nconst convertUpdateFormatV1ToV2 = update => convertUpdateFormat(update, f.id, UpdateDecoderV1, UpdateEncoderV2);\n\n/**\n * @param {Uint8Array} update\n */\nconst convertUpdateFormatV2ToV1 = update => convertUpdateFormat(update, f.id, UpdateDecoderV2, UpdateEncoderV1);\n\nconst errorComputeChanges = 'You must not compute changes after the event-handler fired.';\n\n/**\n * @template {AbstractType<any>} T\n * YEvent describes the changes on a YType.\n */\nclass YEvent {\n /**\n * @param {T} target The changed type.\n * @param {Transaction} transaction\n */\n constructor (target, transaction) {\n /**\n * The type on which this event was created on.\n * @type {T}\n */\n this.target = target;\n /**\n * The current target on which the observe callback is called.\n * @type {AbstractType<any>}\n */\n this.currentTarget = target;\n /**\n * The transaction that triggered this event.\n * @type {Transaction}\n */\n this.transaction = transaction;\n /**\n * @type {Object|null}\n */\n this._changes = null;\n /**\n * @type {null | Map<string, { action: 'add' | 'update' | 'delete', oldValue: any, newValue: any }>}\n */\n this._keys = null;\n /**\n * @type {null | Array<{ insert?: string | Array<any> | object | AbstractType<any>, retain?: number, delete?: number, attributes?: Object<string, any> }>}\n */\n this._delta = null;\n /**\n * @type {Array<string|number>|null}\n */\n this._path = null;\n }\n\n /**\n * Computes the path from `y` to the changed type.\n *\n * @todo v14 should standardize on path: Array<{parent, index}> because that is easier to work with.\n *\n * The following property holds:\n * @example\n * let type = y\n * event.path.forEach(dir => {\n * type = type.get(dir)\n * })\n * type === event.target // => true\n */\n get path () {\n return this._path || (this._path = getPathTo(this.currentTarget, this.target))\n }\n\n /**\n * Check if a struct is deleted by this event.\n *\n * In contrast to change.deleted, this method also returns true if the struct was added and then deleted.\n *\n * @param {AbstractStruct} struct\n * @return {boolean}\n */\n deletes (struct) {\n return isDeleted(this.transaction.deleteSet, struct.id)\n }\n\n /**\n * @type {Map<string, { action: 'add' | 'update' | 'delete', oldValue: any, newValue: any }>}\n */\n get keys () {\n if (this._keys === null) {\n if (this.transaction.doc._transactionCleanups.length === 0) {\n throw error.create(errorComputeChanges)\n }\n const keys = new Map();\n const target = this.target;\n const changed = /** @type Set<string|null> */ (this.transaction.changed.get(target));\n changed.forEach(key => {\n if (key !== null) {\n const item = /** @type {Item} */ (target._map.get(key));\n /**\n * @type {'delete' | 'add' | 'update'}\n */\n let action;\n let oldValue;\n if (this.adds(item)) {\n let prev = item.left;\n while (prev !== null && this.adds(prev)) {\n prev = prev.left;\n }\n if (this.deletes(item)) {\n if (prev !== null && this.deletes(prev)) {\n action = 'delete';\n oldValue = array.last(prev.content.getContent());\n } else {\n return\n }\n } else {\n if (prev !== null && this.deletes(prev)) {\n action = 'update';\n oldValue = array.last(prev.content.getContent());\n } else {\n action = 'add';\n oldValue = undefined;\n }\n }\n } else {\n if (this.deletes(item)) {\n action = 'delete';\n oldValue = array.last(/** @type {Item} */ item.content.getContent());\n } else {\n return // nop\n }\n }\n keys.set(key, { action, oldValue });\n }\n });\n this._keys = keys;\n }\n return this._keys\n }\n\n /**\n * This is a computed property. Note that this can only be safely computed during the\n * event call. Computing this property after other changes happened might result in\n * unexpected behavior (incorrect computation of deltas). A safe way to collect changes\n * is to store the `changes` or the `delta` object. Avoid storing the `transaction` object.\n *\n * @type {Array<{insert?: string | Array<any> | object | AbstractType<any>, retain?: number, delete?: number, attributes?: Object<string, any>}>}\n */\n get delta () {\n return this.changes.delta\n }\n\n /**\n * Check if a struct is added by this event.\n *\n * In contrast to change.deleted, this method also returns true if the struct was added and then deleted.\n *\n * @param {AbstractStruct} struct\n * @return {boolean}\n */\n adds (struct) {\n return struct.id.clock >= (this.transaction.beforeState.get(struct.id.client) || 0)\n }\n\n /**\n * This is a computed property. Note that this can only be safely computed during the\n * event call. Computing this property after other changes happened might result in\n * unexpected behavior (incorrect computation of deltas). A safe way to collect changes\n * is to store the `changes` or the `delta` object. Avoid storing the `transaction` object.\n *\n * @type {{added:Set<Item>,deleted:Set<Item>,keys:Map<string,{action:'add'|'update'|'delete',oldValue:any}>,delta:Array<{insert?:Array<any>|string, delete?:number, retain?:number}>}}\n */\n get changes () {\n let changes = this._changes;\n if (changes === null) {\n if (this.transaction.doc._transactionCleanups.length === 0) {\n throw error.create(errorComputeChanges)\n }\n const target = this.target;\n const added = set.create();\n const deleted = set.create();\n /**\n * @type {Array<{insert:Array<any>}|{delete:number}|{retain:number}>}\n */\n const delta = [];\n changes = {\n added,\n deleted,\n delta,\n keys: this.keys\n };\n const changed = /** @type Set<string|null> */ (this.transaction.changed.get(target));\n if (changed.has(null)) {\n /**\n * @type {any}\n */\n let lastOp = null;\n const packOp = () => {\n if (lastOp) {\n delta.push(lastOp);\n }\n };\n for (let item = target._start; item !== null; item = item.right) {\n if (item.deleted) {\n if (this.deletes(item) && !this.adds(item)) {\n if (lastOp === null || lastOp.delete === undefined) {\n packOp();\n lastOp = { delete: 0 };\n }\n lastOp.delete += item.length;\n deleted.add(item);\n } // else nop\n } else {\n if (this.adds(item)) {\n if (lastOp === null || lastOp.insert === undefined) {\n packOp();\n lastOp = { insert: [] };\n }\n lastOp.insert = lastOp.insert.concat(item.content.getContent());\n added.add(item);\n } else {\n if (lastOp === null || lastOp.retain === undefined) {\n packOp();\n lastOp = { retain: 0 };\n }\n lastOp.retain += item.length;\n }\n }\n }\n if (lastOp !== null && lastOp.retain === undefined) {\n packOp();\n }\n }\n this._changes = changes;\n }\n return /** @type {any} */ (changes)\n }\n}\n\n/**\n * Compute the path from this type to the specified target.\n *\n * @example\n * // `child` should be accessible via `type.get(path[0]).get(path[1])..`\n * const path = type.getPathTo(child)\n * // assuming `type instanceof YArray`\n * console.log(path) // might look like => [2, 'key1']\n * child === type.get(path[0]).get(path[1])\n *\n * @param {AbstractType<any>} parent\n * @param {AbstractType<any>} child target\n * @return {Array<string|number>} Path to the target\n *\n * @private\n * @function\n */\nconst getPathTo = (parent, child) => {\n const path = [];\n while (child._item !== null && child !== parent) {\n if (child._item.parentSub !== null) {\n // parent is map-ish\n path.unshift(child._item.parentSub);\n } else {\n // parent is array-ish\n let i = 0;\n let c = /** @type {AbstractType<any>} */ (child._item.parent)._start;\n while (c !== child._item && c !== null) {\n if (!c.deleted && c.countable) {\n i += c.length;\n }\n c = c.right;\n }\n path.unshift(i);\n }\n child = /** @type {AbstractType<any>} */ (child._item.parent);\n }\n return path\n};\n\n/**\n * https://docs.yjs.dev/getting-started/working-with-shared-types#caveats\n */\nconst warnPrematureAccess = () => { logging.warn('Invalid access: Add Yjs type to a document before reading data.'); };\n\nconst maxSearchMarker = 80;\n\n/**\n * A unique timestamp that identifies each marker.\n *\n * Time is relative,.. this is more like an ever-increasing clock.\n *\n * @type {number}\n */\nlet globalSearchMarkerTimestamp = 0;\n\nclass ArraySearchMarker {\n /**\n * @param {Item} p\n * @param {number} index\n */\n constructor (p, index) {\n p.marker = true;\n this.p = p;\n this.index = index;\n this.timestamp = globalSearchMarkerTimestamp++;\n }\n}\n\n/**\n * @param {ArraySearchMarker} marker\n */\nconst refreshMarkerTimestamp = marker => { marker.timestamp = globalSearchMarkerTimestamp++; };\n\n/**\n * This is rather complex so this function is the only thing that should overwrite a marker\n *\n * @param {ArraySearchMarker} marker\n * @param {Item} p\n * @param {number} index\n */\nconst overwriteMarker = (marker, p, index) => {\n marker.p.marker = false;\n marker.p = p;\n p.marker = true;\n marker.index = index;\n marker.timestamp = globalSearchMarkerTimestamp++;\n};\n\n/**\n * @param {Array<ArraySearchMarker>} searchMarker\n * @param {Item} p\n * @param {number} index\n */\nconst markPosition = (searchMarker, p, index) => {\n if (searchMarker.length >= maxSearchMarker) {\n // override oldest marker (we don't want to create more objects)\n const marker = searchMarker.reduce((a, b) => a.timestamp < b.timestamp ? a : b);\n overwriteMarker(marker, p, index);\n return marker\n } else {\n // create new marker\n const pm = new ArraySearchMarker(p, index);\n searchMarker.push(pm);\n return pm\n }\n};\n\n/**\n * Search marker help us to find positions in the associative array faster.\n *\n * They speed up the process of finding a position without much bookkeeping.\n *\n * A maximum of `maxSearchMarker` objects are created.\n *\n * This function always returns a refreshed marker (updated timestamp)\n *\n * @param {AbstractType<any>} yarray\n * @param {number} index\n */\nconst findMarker = (yarray, index) => {\n if (yarray._start === null || index === 0 || yarray._searchMarker === null) {\n return null\n }\n const marker = yarray._searchMarker.length === 0 ? null : yarray._searchMarker.reduce((a, b) => math.abs(index - a.index) < math.abs(index - b.index) ? a : b);\n let p = yarray._start;\n let pindex = 0;\n if (marker !== null) {\n p = marker.p;\n pindex = marker.index;\n refreshMarkerTimestamp(marker); // we used it, we might need to use it again\n }\n // iterate to right if possible\n while (p.right !== null && pindex < index) {\n if (!p.deleted && p.countable) {\n if (index < pindex + p.length) {\n break\n }\n pindex += p.length;\n }\n p = p.right;\n }\n // iterate to left if necessary (might be that pindex > index)\n while (p.left !== null && pindex > index) {\n p = p.left;\n if (!p.deleted && p.countable) {\n pindex -= p.length;\n }\n }\n // we want to make sure that p can't be merged with left, because that would screw up everything\n // in that cas just return what we have (it is most likely the best marker anyway)\n // iterate to left until p can't be merged with left\n while (p.left !== null && p.left.id.client === p.id.client && p.left.id.clock + p.left.length === p.id.clock) {\n p = p.left;\n if (!p.deleted && p.countable) {\n pindex -= p.length;\n }\n }\n\n // @todo remove!\n // assure position\n // {\n // let start = yarray._start\n // let pos = 0\n // while (start !== p) {\n // if (!start.deleted && start.countable) {\n // pos += start.length\n // }\n // start = /** @type {Item} */ (start.right)\n // }\n // if (pos !== pindex) {\n // debugger\n // throw new Error('Gotcha position fail!')\n // }\n // }\n // if (marker) {\n // if (window.lengths == null) {\n // window.lengths = []\n // window.getLengths = () => window.lengths.sort((a, b) => a - b)\n // }\n // window.lengths.push(marker.index - pindex)\n // console.log('distance', marker.index - pindex, 'len', p && p.parent.length)\n // }\n if (marker !== null && math.abs(marker.index - pindex) < /** @type {YText|YArray<any>} */ (p.parent).length / maxSearchMarker) {\n // adjust existing marker\n overwriteMarker(marker, p, pindex);\n return marker\n } else {\n // create new marker\n return markPosition(yarray._searchMarker, p, pindex)\n }\n};\n\n/**\n * Update markers when a change happened.\n *\n * This should be called before doing a deletion!\n *\n * @param {Array<ArraySearchMarker>} searchMarker\n * @param {number} index\n * @param {number} len If insertion, len is positive. If deletion, len is negative.\n */\nconst updateMarkerChanges = (searchMarker, index, len) => {\n for (let i = searchMarker.length - 1; i >= 0; i--) {\n const m = searchMarker[i];\n if (len > 0) {\n /**\n * @type {Item|null}\n */\n let p = m.p;\n p.marker = false;\n // Ideally we just want to do a simple position comparison, but this will only work if\n // search markers don't point to deleted items for formats.\n // Iterate marker to prev undeleted countable position so we know what to do when updating a position\n while (p && (p.deleted || !p.countable)) {\n p = p.left;\n if (p && !p.deleted && p.countable) {\n // adjust position. the loop should break now\n m.index -= p.length;\n }\n }\n if (p === null || p.marker === true) {\n // remove search marker if updated position is null or if position is already marked\n searchMarker.splice(i, 1);\n continue\n }\n m.p = p;\n p.marker = true;\n }\n if (index < m.index || (len > 0 && index === m.index)) { // a simple index <= m.index check would actually suffice\n m.index = math.max(index, m.index + len);\n }\n }\n};\n\n/**\n * Accumulate all (list) children of a type and return them as an Array.\n *\n * @param {AbstractType<any>} t\n * @return {Array<Item>}\n */\nconst getTypeChildren = t => {\n t.doc ?? warnPrematureAccess();\n let s = t._start;\n const arr = [];\n while (s) {\n arr.push(s);\n s = s.right;\n }\n return arr\n};\n\n/**\n * Call event listeners with an event. This will also add an event to all\n * parents (for `.observeDeep` handlers).\n *\n * @template EventType\n * @param {AbstractType<EventType>} type\n * @param {Transaction} transaction\n * @param {EventType} event\n */\nconst callTypeObservers = (type, transaction, event) => {\n const changedType = type;\n const changedParentTypes = transaction.changedParentTypes;\n while (true) {\n // @ts-ignore\n map.setIfUndefined(changedParentTypes, type, () => []).push(event);\n if (type._item === null) {\n break\n }\n type = /** @type {AbstractType<any>} */ (type._item.parent);\n }\n callEventHandlerListeners(changedType._eH, event, transaction);\n};\n\n/**\n * @template EventType\n * Abstract Yjs Type class\n */\nclass AbstractType {\n constructor () {\n /**\n * @type {Item|null}\n */\n this._item = null;\n /**\n * @type {Map<string,Item>}\n */\n this._map = new Map();\n /**\n * @type {Item|null}\n */\n this._start = null;\n /**\n * @type {Doc|null}\n */\n this.doc = null;\n this._length = 0;\n /**\n * Event handlers\n * @type {EventHandler<EventType,Transaction>}\n */\n this._eH = createEventHandler();\n /**\n * Deep event handlers\n * @type {EventHandler<Array<YEvent<any>>,Transaction>}\n */\n this._dEH = createEventHandler();\n /**\n * @type {null | Array<ArraySearchMarker>}\n */\n this._searchMarker = null;\n }\n\n /**\n * @return {AbstractType<any>|null}\n */\n get parent () {\n return this._item ? /** @type {AbstractType<any>} */ (this._item.parent) : null\n }\n\n /**\n * Integrate this type into the Yjs instance.\n *\n * * Save this struct in the os\n * * This type is sent to other client\n * * Observer functions are fired\n *\n * @param {Doc} y The Yjs instance\n * @param {Item|null} item\n */\n _integrate (y, item) {\n this.doc = y;\n this._item = item;\n }\n\n /**\n * @return {AbstractType<EventType>}\n */\n _copy () {\n throw error.methodUnimplemented()\n }\n\n /**\n * Makes a copy of this data type that can be included somewhere else.\n *\n * Note that the content is only readable _after_ it has been included somewhere in the Ydoc.\n *\n * @return {AbstractType<EventType>}\n */\n clone () {\n throw error.methodUnimplemented()\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} _encoder\n */\n _write (_encoder) { }\n\n /**\n * The first non-deleted item\n */\n get _first () {\n let n = this._start;\n while (n !== null && n.deleted) {\n n = n.right;\n }\n return n\n }\n\n /**\n * Creates YEvent and calls all type observers.\n * Must be implemented by each type.\n *\n * @param {Transaction} transaction\n * @param {Set<null|string>} _parentSubs Keys changed on this type. `null` if list was modified.\n */\n _callObserver (transaction, _parentSubs) {\n if (!transaction.local && this._searchMarker) {\n this._searchMarker.length = 0;\n }\n }\n\n /**\n * Observe all events that are created on this type.\n *\n * @param {function(EventType, Transaction):void} f Observer function\n */\n observe (f) {\n addEventHandlerListener(this._eH, f);\n }\n\n /**\n * Observe all events that are created by this type and its children.\n *\n * @param {function(Array<YEvent<any>>,Transaction):void} f Observer function\n */\n observeDeep (f) {\n addEventHandlerListener(this._dEH, f);\n }\n\n /**\n * Unregister an observer function.\n *\n * @param {function(EventType,Transaction):void} f Observer function\n */\n unobserve (f) {\n removeEventHandlerListener(this._eH, f);\n }\n\n /**\n * Unregister an observer function.\n *\n * @param {function(Array<YEvent<any>>,Transaction):void} f Observer function\n */\n unobserveDeep (f) {\n removeEventHandlerListener(this._dEH, f);\n }\n\n /**\n * @abstract\n * @return {any}\n */\n toJSON () {}\n}\n\n/**\n * @param {AbstractType<any>} type\n * @param {number} start\n * @param {number} end\n * @return {Array<any>}\n *\n * @private\n * @function\n */\nconst typeListSlice = (type, start, end) => {\n type.doc ?? warnPrematureAccess();\n if (start < 0) {\n start = type._length + start;\n }\n if (end < 0) {\n end = type._length + end;\n }\n let len = end - start;\n const cs = [];\n let n = type._start;\n while (n !== null && len > 0) {\n if (n.countable && !n.deleted) {\n const c = n.content.getContent();\n if (c.length <= start) {\n start -= c.length;\n } else {\n for (let i = start; i < c.length && len > 0; i++) {\n cs.push(c[i]);\n len--;\n }\n start = 0;\n }\n }\n n = n.right;\n }\n return cs\n};\n\n/**\n * @param {AbstractType<any>} type\n * @return {Array<any>}\n *\n * @private\n * @function\n */\nconst typeListToArray = type => {\n type.doc ?? warnPrematureAccess();\n const cs = [];\n let n = type._start;\n while (n !== null) {\n if (n.countable && !n.deleted) {\n const c = n.content.getContent();\n for (let i = 0; i < c.length; i++) {\n cs.push(c[i]);\n }\n }\n n = n.right;\n }\n return cs\n};\n\n/**\n * @param {AbstractType<any>} type\n * @param {Snapshot} snapshot\n * @return {Array<any>}\n *\n * @private\n * @function\n */\nconst typeListToArraySnapshot = (type, snapshot) => {\n const cs = [];\n let n = type._start;\n while (n !== null) {\n if (n.countable && isVisible(n, snapshot)) {\n const c = n.content.getContent();\n for (let i = 0; i < c.length; i++) {\n cs.push(c[i]);\n }\n }\n n = n.right;\n }\n return cs\n};\n\n/**\n * Executes a provided function on once on every element of this YArray.\n *\n * @param {AbstractType<any>} type\n * @param {function(any,number,any):void} f A function to execute on every element of this YArray.\n *\n * @private\n * @function\n */\nconst typeListForEach = (type, f) => {\n let index = 0;\n let n = type._start;\n type.doc ?? warnPrematureAccess();\n while (n !== null) {\n if (n.countable && !n.deleted) {\n const c = n.content.getContent();\n for (let i = 0; i < c.length; i++) {\n f(c[i], index++, type);\n }\n }\n n = n.right;\n }\n};\n\n/**\n * @template C,R\n * @param {AbstractType<any>} type\n * @param {function(C,number,AbstractType<any>):R} f\n * @return {Array<R>}\n *\n * @private\n * @function\n */\nconst typeListMap = (type, f) => {\n /**\n * @type {Array<any>}\n */\n const result = [];\n typeListForEach(type, (c, i) => {\n result.push(f(c, i, type));\n });\n return result\n};\n\n/**\n * @param {AbstractType<any>} type\n * @return {IterableIterator<any>}\n *\n * @private\n * @function\n */\nconst typeListCreateIterator = type => {\n let n = type._start;\n /**\n * @type {Array<any>|null}\n */\n let currentContent = null;\n let currentContentIndex = 0;\n return {\n [Symbol.iterator] () {\n return this\n },\n next: () => {\n // find some content\n if (currentContent === null) {\n while (n !== null && n.deleted) {\n n = n.right;\n }\n // check if we reached the end, no need to check currentContent, because it does not exist\n if (n === null) {\n return {\n done: true,\n value: undefined\n }\n }\n // we found n, so we can set currentContent\n currentContent = n.content.getContent();\n currentContentIndex = 0;\n n = n.right; // we used the content of n, now iterate to next\n }\n const value = currentContent[currentContentIndex++];\n // check if we need to empty currentContent\n if (currentContent.length <= currentContentIndex) {\n currentContent = null;\n }\n return {\n done: false,\n value\n }\n }\n }\n};\n\n/**\n * @param {AbstractType<any>} type\n * @param {number} index\n * @return {any}\n *\n * @private\n * @function\n */\nconst typeListGet = (type, index) => {\n type.doc ?? warnPrematureAccess();\n const marker = findMarker(type, index);\n let n = type._start;\n if (marker !== null) {\n n = marker.p;\n index -= marker.index;\n }\n for (; n !== null; n = n.right) {\n if (!n.deleted && n.countable) {\n if (index < n.length) {\n return n.content.getContent()[index]\n }\n index -= n.length;\n }\n }\n};\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {Item?} referenceItem\n * @param {Array<Object<string,any>|Array<any>|boolean|number|null|string|Uint8Array>} content\n *\n * @private\n * @function\n */\nconst typeListInsertGenericsAfter = (transaction, parent, referenceItem, content) => {\n let left = referenceItem;\n const doc = transaction.doc;\n const ownClientId = doc.clientID;\n const store = doc.store;\n const right = referenceItem === null ? parent._start : referenceItem.right;\n /**\n * @type {Array<Object|Array<any>|number|null>}\n */\n let jsonContent = [];\n const packJsonContent = () => {\n if (jsonContent.length > 0) {\n left = new Item(createID(ownClientId, getState(store, ownClientId)), left, left && left.lastId, right, right && right.id, parent, null, new ContentAny(jsonContent));\n left.integrate(transaction, 0);\n jsonContent = [];\n }\n };\n content.forEach(c => {\n if (c === null) {\n jsonContent.push(c);\n } else {\n switch (c.constructor) {\n case Number:\n case Object:\n case Boolean:\n case Array:\n case String:\n jsonContent.push(c);\n break\n default:\n packJsonContent();\n switch (c.constructor) {\n case Uint8Array:\n case ArrayBuffer:\n left = new Item(createID(ownClientId, getState(store, ownClientId)), left, left && left.lastId, right, right && right.id, parent, null, new ContentBinary(new Uint8Array(/** @type {Uint8Array} */ (c))));\n left.integrate(transaction, 0);\n break\n case Doc:\n left = new Item(createID(ownClientId, getState(store, ownClientId)), left, left && left.lastId, right, right && right.id, parent, null, new ContentDoc(/** @type {Doc} */ (c)));\n left.integrate(transaction, 0);\n break\n default:\n if (c instanceof AbstractType) {\n left = new Item(createID(ownClientId, getState(store, ownClientId)), left, left && left.lastId, right, right && right.id, parent, null, new ContentType(c));\n left.integrate(transaction, 0);\n } else {\n throw new Error('Unexpected content type in insert operation')\n }\n }\n }\n }\n });\n packJsonContent();\n};\n\nconst lengthExceeded = () => error.create('Length exceeded!');\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {number} index\n * @param {Array<Object<string,any>|Array<any>|number|null|string|Uint8Array>} content\n *\n * @private\n * @function\n */\nconst typeListInsertGenerics = (transaction, parent, index, content) => {\n if (index > parent._length) {\n throw lengthExceeded()\n }\n if (index === 0) {\n if (parent._searchMarker) {\n updateMarkerChanges(parent._searchMarker, index, content.length);\n }\n return typeListInsertGenericsAfter(transaction, parent, null, content)\n }\n const startIndex = index;\n const marker = findMarker(parent, index);\n let n = parent._start;\n if (marker !== null) {\n n = marker.p;\n index -= marker.index;\n // we need to iterate one to the left so that the algorithm works\n if (index === 0) {\n // @todo refactor this as it actually doesn't consider formats\n n = n.prev; // important! get the left undeleted item so that we can actually decrease index\n index += (n && n.countable && !n.deleted) ? n.length : 0;\n }\n }\n for (; n !== null; n = n.right) {\n if (!n.deleted && n.countable) {\n if (index <= n.length) {\n if (index < n.length) {\n // insert in-between\n getItemCleanStart(transaction, createID(n.id.client, n.id.clock + index));\n }\n break\n }\n index -= n.length;\n }\n }\n if (parent._searchMarker) {\n updateMarkerChanges(parent._searchMarker, startIndex, content.length);\n }\n return typeListInsertGenericsAfter(transaction, parent, n, content)\n};\n\n/**\n * Pushing content is special as we generally want to push after the last item. So we don't have to update\n * the search marker.\n *\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {Array<Object<string,any>|Array<any>|number|null|string|Uint8Array>} content\n *\n * @private\n * @function\n */\nconst typeListPushGenerics = (transaction, parent, content) => {\n // Use the marker with the highest index and iterate to the right.\n const marker = (parent._searchMarker || []).reduce((maxMarker, currMarker) => currMarker.index > maxMarker.index ? currMarker : maxMarker, { index: 0, p: parent._start });\n let n = marker.p;\n if (n) {\n while (n.right) {\n n = n.right;\n }\n }\n return typeListInsertGenericsAfter(transaction, parent, n, content)\n};\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {number} index\n * @param {number} length\n *\n * @private\n * @function\n */\nconst typeListDelete = (transaction, parent, index, length) => {\n if (length === 0) { return }\n const startIndex = index;\n const startLength = length;\n const marker = findMarker(parent, index);\n let n = parent._start;\n if (marker !== null) {\n n = marker.p;\n index -= marker.index;\n }\n // compute the first item to be deleted\n for (; n !== null && index > 0; n = n.right) {\n if (!n.deleted && n.countable) {\n if (index < n.length) {\n getItemCleanStart(transaction, createID(n.id.client, n.id.clock + index));\n }\n index -= n.length;\n }\n }\n // delete all items until done\n while (length > 0 && n !== null) {\n if (!n.deleted) {\n if (length < n.length) {\n getItemCleanStart(transaction, createID(n.id.client, n.id.clock + length));\n }\n n.delete(transaction);\n length -= n.length;\n }\n n = n.right;\n }\n if (length > 0) {\n throw lengthExceeded()\n }\n if (parent._searchMarker) {\n updateMarkerChanges(parent._searchMarker, startIndex, -startLength + length /* in case we remove the above exception */);\n }\n};\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {string} key\n *\n * @private\n * @function\n */\nconst typeMapDelete = (transaction, parent, key) => {\n const c = parent._map.get(key);\n if (c !== undefined) {\n c.delete(transaction);\n }\n};\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {string} key\n * @param {Object|number|null|Array<any>|string|Uint8Array|AbstractType<any>} value\n *\n * @private\n * @function\n */\nconst typeMapSet = (transaction, parent, key, value) => {\n const left = parent._map.get(key) || null;\n const doc = transaction.doc;\n const ownClientId = doc.clientID;\n let content;\n if (value == null) {\n content = new ContentAny([value]);\n } else {\n switch (value.constructor) {\n case Number:\n case Object:\n case Boolean:\n case Array:\n case String:\n case Date:\n case BigInt:\n content = new ContentAny([value]);\n break\n case Uint8Array:\n content = new ContentBinary(/** @type {Uint8Array} */ (value));\n break\n case Doc:\n content = new ContentDoc(/** @type {Doc} */ (value));\n break\n default:\n if (value instanceof AbstractType) {\n content = new ContentType(value);\n } else {\n throw new Error('Unexpected content type')\n }\n }\n }\n new Item(createID(ownClientId, getState(doc.store, ownClientId)), left, left && left.lastId, null, null, parent, key, content).integrate(transaction, 0);\n};\n\n/**\n * @param {AbstractType<any>} parent\n * @param {string} key\n * @return {Object<string,any>|number|null|Array<any>|string|Uint8Array|AbstractType<any>|undefined}\n *\n * @private\n * @function\n */\nconst typeMapGet = (parent, key) => {\n parent.doc ?? warnPrematureAccess();\n const val = parent._map.get(key);\n return val !== undefined && !val.deleted ? val.content.getContent()[val.length - 1] : undefined\n};\n\n/**\n * @param {AbstractType<any>} parent\n * @return {Object<string,Object<string,any>|number|null|Array<any>|string|Uint8Array|AbstractType<any>|undefined>}\n *\n * @private\n * @function\n */\nconst typeMapGetAll = (parent) => {\n /**\n * @type {Object<string,any>}\n */\n const res = {};\n parent.doc ?? warnPrematureAccess();\n parent._map.forEach((value, key) => {\n if (!value.deleted) {\n res[key] = value.content.getContent()[value.length - 1];\n }\n });\n return res\n};\n\n/**\n * @param {AbstractType<any>} parent\n * @param {string} key\n * @return {boolean}\n *\n * @private\n * @function\n */\nconst typeMapHas = (parent, key) => {\n parent.doc ?? warnPrematureAccess();\n const val = parent._map.get(key);\n return val !== undefined && !val.deleted\n};\n\n/**\n * @param {AbstractType<any>} parent\n * @param {string} key\n * @param {Snapshot} snapshot\n * @return {Object<string,any>|number|null|Array<any>|string|Uint8Array|AbstractType<any>|undefined}\n *\n * @private\n * @function\n */\nconst typeMapGetSnapshot = (parent, key, snapshot) => {\n let v = parent._map.get(key) || null;\n while (v !== null && (!snapshot.sv.has(v.id.client) || v.id.clock >= (snapshot.sv.get(v.id.client) || 0))) {\n v = v.left;\n }\n return v !== null && isVisible(v, snapshot) ? v.content.getContent()[v.length - 1] : undefined\n};\n\n/**\n * @param {AbstractType<any>} parent\n * @param {Snapshot} snapshot\n * @return {Object<string,Object<string,any>|number|null|Array<any>|string|Uint8Array|AbstractType<any>|undefined>}\n *\n * @private\n * @function\n */\nconst typeMapGetAllSnapshot = (parent, snapshot) => {\n /**\n * @type {Object<string,any>}\n */\n const res = {};\n parent._map.forEach((value, key) => {\n /**\n * @type {Item|null}\n */\n let v = value;\n while (v !== null && (!snapshot.sv.has(v.id.client) || v.id.clock >= (snapshot.sv.get(v.id.client) || 0))) {\n v = v.left;\n }\n if (v !== null && isVisible(v, snapshot)) {\n res[key] = v.content.getContent()[v.length - 1];\n }\n });\n return res\n};\n\n/**\n * @param {AbstractType<any> & { _map: Map<string, Item> }} type\n * @return {IterableIterator<Array<any>>}\n *\n * @private\n * @function\n */\nconst createMapIterator = type => {\n type.doc ?? warnPrematureAccess();\n return iterator.iteratorFilter(type._map.entries(), /** @param {any} entry */ entry => !entry[1].deleted)\n};\n\n/**\n * @module YArray\n */\n\n\n/**\n * Event that describes the changes on a YArray\n * @template T\n * @extends YEvent<YArray<T>>\n */\nclass YArrayEvent extends YEvent {}\n\n/**\n * A shared Array implementation.\n * @template T\n * @extends AbstractType<YArrayEvent<T>>\n * @implements {Iterable<T>}\n */\nclass YArray extends AbstractType {\n constructor () {\n super();\n /**\n * @type {Array<any>?}\n * @private\n */\n this._prelimContent = [];\n /**\n * @type {Array<ArraySearchMarker>}\n */\n this._searchMarker = [];\n }\n\n /**\n * Construct a new YArray containing the specified items.\n * @template {Object<string,any>|Array<any>|number|null|string|Uint8Array} T\n * @param {Array<T>} items\n * @return {YArray<T>}\n */\n static from (items) {\n /**\n * @type {YArray<T>}\n */\n const a = new YArray();\n a.push(items);\n return a\n }\n\n /**\n * Integrate this type into the Yjs instance.\n *\n * * Save this struct in the os\n * * This type is sent to other client\n * * Observer functions are fired\n *\n * @param {Doc} y The Yjs instance\n * @param {Item} item\n */\n _integrate (y, item) {\n super._integrate(y, item);\n this.insert(0, /** @type {Array<any>} */ (this._prelimContent));\n this._prelimContent = null;\n }\n\n /**\n * @return {YArray<T>}\n */\n _copy () {\n return new YArray()\n }\n\n /**\n * Makes a copy of this data type that can be included somewhere else.\n *\n * Note that the content is only readable _after_ it has been included somewhere in the Ydoc.\n *\n * @return {YArray<T>}\n */\n clone () {\n /**\n * @type {YArray<T>}\n */\n const arr = new YArray();\n arr.insert(0, this.toArray().map(el =>\n el instanceof AbstractType ? /** @type {typeof el} */ (el.clone()) : el\n ));\n return arr\n }\n\n get length () {\n this.doc ?? warnPrematureAccess();\n return this._length\n }\n\n /**\n * Creates YArrayEvent and calls observers.\n *\n * @param {Transaction} transaction\n * @param {Set<null|string>} parentSubs Keys changed on this type. `null` if list was modified.\n */\n _callObserver (transaction, parentSubs) {\n super._callObserver(transaction, parentSubs);\n callTypeObservers(this, transaction, new YArrayEvent(this, transaction));\n }\n\n /**\n * Inserts new content at an index.\n *\n * Important: This function expects an array of content. Not just a content\n * object. The reason for this \"weirdness\" is that inserting several elements\n * is very efficient when it is done as a single operation.\n *\n * @example\n * // Insert character 'a' at position 0\n * yarray.insert(0, ['a'])\n * // Insert numbers 1, 2 at position 1\n * yarray.insert(1, [1, 2])\n *\n * @param {number} index The index to insert content at.\n * @param {Array<T>} content The array of content\n */\n insert (index, content) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeListInsertGenerics(transaction, this, index, /** @type {any} */ (content));\n });\n } else {\n /** @type {Array<any>} */ (this._prelimContent).splice(index, 0, ...content);\n }\n }\n\n /**\n * Appends content to this YArray.\n *\n * @param {Array<T>} content Array of content to append.\n *\n * @todo Use the following implementation in all types.\n */\n push (content) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeListPushGenerics(transaction, this, /** @type {any} */ (content));\n });\n } else {\n /** @type {Array<any>} */ (this._prelimContent).push(...content);\n }\n }\n\n /**\n * Prepends content to this YArray.\n *\n * @param {Array<T>} content Array of content to prepend.\n */\n unshift (content) {\n this.insert(0, content);\n }\n\n /**\n * Deletes elements starting from an index.\n *\n * @param {number} index Index at which to start deleting elements\n * @param {number} length The number of elements to remove. Defaults to 1.\n */\n delete (index, length = 1) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeListDelete(transaction, this, index, length);\n });\n } else {\n /** @type {Array<any>} */ (this._prelimContent).splice(index, length);\n }\n }\n\n /**\n * Returns the i-th element from a YArray.\n *\n * @param {number} index The index of the element to return from the YArray\n * @return {T}\n */\n get (index) {\n return typeListGet(this, index)\n }\n\n /**\n * Transforms this YArray to a JavaScript Array.\n *\n * @return {Array<T>}\n */\n toArray () {\n return typeListToArray(this)\n }\n\n /**\n * Returns a portion of this YArray into a JavaScript Array selected\n * from start to end (end not included).\n *\n * @param {number} [start]\n * @param {number} [end]\n * @return {Array<T>}\n */\n slice (start = 0, end = this.length) {\n return typeListSlice(this, start, end)\n }\n\n /**\n * Transforms this Shared Type to a JSON object.\n *\n * @return {Array<any>}\n */\n toJSON () {\n return this.map(c => c instanceof AbstractType ? c.toJSON() : c)\n }\n\n /**\n * Returns an Array with the result of calling a provided function on every\n * element of this YArray.\n *\n * @template M\n * @param {function(T,number,YArray<T>):M} f Function that produces an element of the new Array\n * @return {Array<M>} A new array with each element being the result of the\n * callback function\n */\n map (f) {\n return typeListMap(this, /** @type {any} */ (f))\n }\n\n /**\n * Executes a provided function once on every element of this YArray.\n *\n * @param {function(T,number,YArray<T>):void} f A function to execute on every element of this YArray.\n */\n forEach (f) {\n typeListForEach(this, f);\n }\n\n /**\n * @return {IterableIterator<T>}\n */\n [Symbol.iterator] () {\n return typeListCreateIterator(this)\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n */\n _write (encoder) {\n encoder.writeTypeRef(YArrayRefID);\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} _decoder\n *\n * @private\n * @function\n */\nconst readYArray = _decoder => new YArray();\n\n/**\n * @module YMap\n */\n\n\n/**\n * @template T\n * @extends YEvent<YMap<T>>\n * Event that describes the changes on a YMap.\n */\nclass YMapEvent extends YEvent {\n /**\n * @param {YMap<T>} ymap The YArray that changed.\n * @param {Transaction} transaction\n * @param {Set<any>} subs The keys that changed.\n */\n constructor (ymap, transaction, subs) {\n super(ymap, transaction);\n this.keysChanged = subs;\n }\n}\n\n/**\n * @template MapType\n * A shared Map implementation.\n *\n * @extends AbstractType<YMapEvent<MapType>>\n * @implements {Iterable<[string, MapType]>}\n */\nclass YMap extends AbstractType {\n /**\n *\n * @param {Iterable<readonly [string, any]>=} entries - an optional iterable to initialize the YMap\n */\n constructor (entries) {\n super();\n /**\n * @type {Map<string,any>?}\n * @private\n */\n this._prelimContent = null;\n\n if (entries === undefined) {\n this._prelimContent = new Map();\n } else {\n this._prelimContent = new Map(entries);\n }\n }\n\n /**\n * Integrate this type into the Yjs instance.\n *\n * * Save this struct in the os\n * * This type is sent to other client\n * * Observer functions are fired\n *\n * @param {Doc} y The Yjs instance\n * @param {Item} item\n */\n _integrate (y, item) {\n super._integrate(y, item)\n ;/** @type {Map<string, any>} */ (this._prelimContent).forEach((value, key) => {\n this.set(key, value);\n });\n this._prelimContent = null;\n }\n\n /**\n * @return {YMap<MapType>}\n */\n _copy () {\n return new YMap()\n }\n\n /**\n * Makes a copy of this data type that can be included somewhere else.\n *\n * Note that the content is only readable _after_ it has been included somewhere in the Ydoc.\n *\n * @return {YMap<MapType>}\n */\n clone () {\n /**\n * @type {YMap<MapType>}\n */\n const map = new YMap();\n this.forEach((value, key) => {\n map.set(key, value instanceof AbstractType ? /** @type {typeof value} */ (value.clone()) : value);\n });\n return map\n }\n\n /**\n * Creates YMapEvent and calls observers.\n *\n * @param {Transaction} transaction\n * @param {Set<null|string>} parentSubs Keys changed on this type. `null` if list was modified.\n */\n _callObserver (transaction, parentSubs) {\n callTypeObservers(this, transaction, new YMapEvent(this, transaction, parentSubs));\n }\n\n /**\n * Transforms this Shared Type to a JSON object.\n *\n * @return {Object<string,any>}\n */\n toJSON () {\n this.doc ?? warnPrematureAccess();\n /**\n * @type {Object<string,MapType>}\n */\n const map = {};\n this._map.forEach((item, key) => {\n if (!item.deleted) {\n const v = item.content.getContent()[item.length - 1];\n map[key] = v instanceof AbstractType ? v.toJSON() : v;\n }\n });\n return map\n }\n\n /**\n * Returns the size of the YMap (count of key/value pairs)\n *\n * @return {number}\n */\n get size () {\n return [...createMapIterator(this)].length\n }\n\n /**\n * Returns the keys for each element in the YMap Type.\n *\n * @return {IterableIterator<string>}\n */\n keys () {\n return iterator.iteratorMap(createMapIterator(this), /** @param {any} v */ v => v[0])\n }\n\n /**\n * Returns the values for each element in the YMap Type.\n *\n * @return {IterableIterator<MapType>}\n */\n values () {\n return iterator.iteratorMap(createMapIterator(this), /** @param {any} v */ v => v[1].content.getContent()[v[1].length - 1])\n }\n\n /**\n * Returns an Iterator of [key, value] pairs\n *\n * @return {IterableIterator<[string, MapType]>}\n */\n entries () {\n return iterator.iteratorMap(createMapIterator(this), /** @param {any} v */ v => /** @type {any} */ ([v[0], v[1].content.getContent()[v[1].length - 1]]))\n }\n\n /**\n * Executes a provided function on once on every key-value pair.\n *\n * @param {function(MapType,string,YMap<MapType>):void} f A function to execute on every element of this YArray.\n */\n forEach (f) {\n this.doc ?? warnPrematureAccess();\n this._map.forEach((item, key) => {\n if (!item.deleted) {\n f(item.content.getContent()[item.length - 1], key, this);\n }\n });\n }\n\n /**\n * Returns an Iterator of [key, value] pairs\n *\n * @return {IterableIterator<[string, MapType]>}\n */\n [Symbol.iterator] () {\n return this.entries()\n }\n\n /**\n * Remove a specified element from this YMap.\n *\n * @param {string} key The key of the element to remove.\n */\n delete (key) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeMapDelete(transaction, this, key);\n });\n } else {\n /** @type {Map<string, any>} */ (this._prelimContent).delete(key);\n }\n }\n\n /**\n * Adds or updates an element with a specified key and value.\n * @template {MapType} VAL\n *\n * @param {string} key The key of the element to add to this YMap\n * @param {VAL} value The value of the element to add\n * @return {VAL}\n */\n set (key, value) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeMapSet(transaction, this, key, /** @type {any} */ (value));\n });\n } else {\n /** @type {Map<string, any>} */ (this._prelimContent).set(key, value);\n }\n return value\n }\n\n /**\n * Returns a specified element from this YMap.\n *\n * @param {string} key\n * @return {MapType|undefined}\n */\n get (key) {\n return /** @type {any} */ (typeMapGet(this, key))\n }\n\n /**\n * Returns a boolean indicating whether the specified key exists or not.\n *\n * @param {string} key The key to test.\n * @return {boolean}\n */\n has (key) {\n return typeMapHas(this, key)\n }\n\n /**\n * Removes all elements from this YMap.\n */\n clear () {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n this.forEach(function (_value, key, map) {\n typeMapDelete(transaction, map, key);\n });\n });\n } else {\n /** @type {Map<string, any>} */ (this._prelimContent).clear();\n }\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n */\n _write (encoder) {\n encoder.writeTypeRef(YMapRefID);\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} _decoder\n *\n * @private\n * @function\n */\nconst readYMap = _decoder => new YMap();\n\n/**\n * @module YText\n */\n\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nconst equalAttrs = (a, b) => a === b || (typeof a === 'object' && typeof b === 'object' && a && b && object.equalFlat(a, b));\n\nclass ItemTextListPosition {\n /**\n * @param {Item|null} left\n * @param {Item|null} right\n * @param {number} index\n * @param {Map<string,any>} currentAttributes\n */\n constructor (left, right, index, currentAttributes) {\n this.left = left;\n this.right = right;\n this.index = index;\n this.currentAttributes = currentAttributes;\n }\n\n /**\n * Only call this if you know that this.right is defined\n */\n forward () {\n if (this.right === null) {\n error.unexpectedCase();\n }\n switch (this.right.content.constructor) {\n case ContentFormat:\n if (!this.right.deleted) {\n updateCurrentAttributes(this.currentAttributes, /** @type {ContentFormat} */ (this.right.content));\n }\n break\n default:\n if (!this.right.deleted) {\n this.index += this.right.length;\n }\n break\n }\n this.left = this.right;\n this.right = this.right.right;\n }\n}\n\n/**\n * @param {Transaction} transaction\n * @param {ItemTextListPosition} pos\n * @param {number} count steps to move forward\n * @return {ItemTextListPosition}\n *\n * @private\n * @function\n */\nconst findNextPosition = (transaction, pos, count) => {\n while (pos.right !== null && count > 0) {\n switch (pos.right.content.constructor) {\n case ContentFormat:\n if (!pos.right.deleted) {\n updateCurrentAttributes(pos.currentAttributes, /** @type {ContentFormat} */ (pos.right.content));\n }\n break\n default:\n if (!pos.right.deleted) {\n if (count < pos.right.length) {\n // split right\n getItemCleanStart(transaction, createID(pos.right.id.client, pos.right.id.clock + count));\n }\n pos.index += pos.right.length;\n count -= pos.right.length;\n }\n break\n }\n pos.left = pos.right;\n pos.right = pos.right.right;\n // pos.forward() - we don't forward because that would halve the performance because we already do the checks above\n }\n return pos\n};\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {number} index\n * @param {boolean} useSearchMarker\n * @return {ItemTextListPosition}\n *\n * @private\n * @function\n */\nconst findPosition = (transaction, parent, index, useSearchMarker) => {\n const currentAttributes = new Map();\n const marker = useSearchMarker ? findMarker(parent, index) : null;\n if (marker) {\n const pos = new ItemTextListPosition(marker.p.left, marker.p, marker.index, currentAttributes);\n return findNextPosition(transaction, pos, index - marker.index)\n } else {\n const pos = new ItemTextListPosition(null, parent._start, 0, currentAttributes);\n return findNextPosition(transaction, pos, index)\n }\n};\n\n/**\n * Negate applied formats\n *\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {ItemTextListPosition} currPos\n * @param {Map<string,any>} negatedAttributes\n *\n * @private\n * @function\n */\nconst insertNegatedAttributes = (transaction, parent, currPos, negatedAttributes) => {\n // check if we really need to remove attributes\n while (\n currPos.right !== null && (\n currPos.right.deleted === true || (\n currPos.right.content.constructor === ContentFormat &&\n equalAttrs(negatedAttributes.get(/** @type {ContentFormat} */ (currPos.right.content).key), /** @type {ContentFormat} */ (currPos.right.content).value)\n )\n )\n ) {\n if (!currPos.right.deleted) {\n negatedAttributes.delete(/** @type {ContentFormat} */ (currPos.right.content).key);\n }\n currPos.forward();\n }\n const doc = transaction.doc;\n const ownClientId = doc.clientID;\n negatedAttributes.forEach((val, key) => {\n const left = currPos.left;\n const right = currPos.right;\n const nextFormat = new Item(createID(ownClientId, getState(doc.store, ownClientId)), left, left && left.lastId, right, right && right.id, parent, null, new ContentFormat(key, val));\n nextFormat.integrate(transaction, 0);\n currPos.right = nextFormat;\n currPos.forward();\n });\n};\n\n/**\n * @param {Map<string,any>} currentAttributes\n * @param {ContentFormat} format\n *\n * @private\n * @function\n */\nconst updateCurrentAttributes = (currentAttributes, format) => {\n const { key, value } = format;\n if (value === null) {\n currentAttributes.delete(key);\n } else {\n currentAttributes.set(key, value);\n }\n};\n\n/**\n * @param {ItemTextListPosition} currPos\n * @param {Object<string,any>} attributes\n *\n * @private\n * @function\n */\nconst minimizeAttributeChanges = (currPos, attributes) => {\n // go right while attributes[right.key] === right.value (or right is deleted)\n while (true) {\n if (currPos.right === null) {\n break\n } else if (currPos.right.deleted || (currPos.right.content.constructor === ContentFormat && equalAttrs(attributes[(/** @type {ContentFormat} */ (currPos.right.content)).key] ?? null, /** @type {ContentFormat} */ (currPos.right.content).value))) ; else {\n break\n }\n currPos.forward();\n }\n};\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {ItemTextListPosition} currPos\n * @param {Object<string,any>} attributes\n * @return {Map<string,any>}\n *\n * @private\n * @function\n **/\nconst insertAttributes = (transaction, parent, currPos, attributes) => {\n const doc = transaction.doc;\n const ownClientId = doc.clientID;\n const negatedAttributes = new Map();\n // insert format-start items\n for (const key in attributes) {\n const val = attributes[key];\n const currentVal = currPos.currentAttributes.get(key) ?? null;\n if (!equalAttrs(currentVal, val)) {\n // save negated attribute (set null if currentVal undefined)\n negatedAttributes.set(key, currentVal);\n const { left, right } = currPos;\n currPos.right = new Item(createID(ownClientId, getState(doc.store, ownClientId)), left, left && left.lastId, right, right && right.id, parent, null, new ContentFormat(key, val));\n currPos.right.integrate(transaction, 0);\n currPos.forward();\n }\n }\n return negatedAttributes\n};\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {ItemTextListPosition} currPos\n * @param {string|object|AbstractType<any>} text\n * @param {Object<string,any>} attributes\n *\n * @private\n * @function\n **/\nconst insertText = (transaction, parent, currPos, text, attributes) => {\n currPos.currentAttributes.forEach((_val, key) => {\n if (attributes[key] === undefined) {\n attributes[key] = null;\n }\n });\n const doc = transaction.doc;\n const ownClientId = doc.clientID;\n minimizeAttributeChanges(currPos, attributes);\n const negatedAttributes = insertAttributes(transaction, parent, currPos, attributes);\n // insert content\n const content = text.constructor === String ? new ContentString(/** @type {string} */ (text)) : (text instanceof AbstractType ? new ContentType(text) : new ContentEmbed(text));\n let { left, right, index } = currPos;\n if (parent._searchMarker) {\n updateMarkerChanges(parent._searchMarker, currPos.index, content.getLength());\n }\n right = new Item(createID(ownClientId, getState(doc.store, ownClientId)), left, left && left.lastId, right, right && right.id, parent, null, content);\n right.integrate(transaction, 0);\n currPos.right = right;\n currPos.index = index;\n currPos.forward();\n insertNegatedAttributes(transaction, parent, currPos, negatedAttributes);\n};\n\n/**\n * @param {Transaction} transaction\n * @param {AbstractType<any>} parent\n * @param {ItemTextListPosition} currPos\n * @param {number} length\n * @param {Object<string,any>} attributes\n *\n * @private\n * @function\n */\nconst formatText = (transaction, parent, currPos, length, attributes) => {\n const doc = transaction.doc;\n const ownClientId = doc.clientID;\n minimizeAttributeChanges(currPos, attributes);\n const negatedAttributes = insertAttributes(transaction, parent, currPos, attributes);\n // iterate until first non-format or null is found\n // delete all formats with attributes[format.key] != null\n // also check the attributes after the first non-format as we do not want to insert redundant negated attributes there\n // eslint-disable-next-line no-labels\n iterationLoop: while (\n currPos.right !== null &&\n (length > 0 ||\n (\n negatedAttributes.size > 0 &&\n (currPos.right.deleted || currPos.right.content.constructor === ContentFormat)\n )\n )\n ) {\n if (!currPos.right.deleted) {\n switch (currPos.right.content.constructor) {\n case ContentFormat: {\n const { key, value } = /** @type {ContentFormat} */ (currPos.right.content);\n const attr = attributes[key];\n if (attr !== undefined) {\n if (equalAttrs(attr, value)) {\n negatedAttributes.delete(key);\n } else {\n if (length === 0) {\n // no need to further extend negatedAttributes\n // eslint-disable-next-line no-labels\n break iterationLoop\n }\n negatedAttributes.set(key, value);\n }\n currPos.right.delete(transaction);\n } else {\n currPos.currentAttributes.set(key, value);\n }\n break\n }\n default:\n if (length < currPos.right.length) {\n getItemCleanStart(transaction, createID(currPos.right.id.client, currPos.right.id.clock + length));\n }\n length -= currPos.right.length;\n break\n }\n }\n currPos.forward();\n }\n // Quill just assumes that the editor starts with a newline and that it always\n // ends with a newline. We only insert that newline when a new newline is\n // inserted - i.e when length is bigger than type.length\n if (length > 0) {\n let newlines = '';\n for (; length > 0; length--) {\n newlines += '\\n';\n }\n currPos.right = new Item(createID(ownClientId, getState(doc.store, ownClientId)), currPos.left, currPos.left && currPos.left.lastId, currPos.right, currPos.right && currPos.right.id, parent, null, new ContentString(newlines));\n currPos.right.integrate(transaction, 0);\n currPos.forward();\n }\n insertNegatedAttributes(transaction, parent, currPos, negatedAttributes);\n};\n\n/**\n * Call this function after string content has been deleted in order to\n * clean up formatting Items.\n *\n * @param {Transaction} transaction\n * @param {Item} start\n * @param {Item|null} curr exclusive end, automatically iterates to the next Content Item\n * @param {Map<string,any>} startAttributes\n * @param {Map<string,any>} currAttributes\n * @return {number} The amount of formatting Items deleted.\n *\n * @function\n */\nconst cleanupFormattingGap = (transaction, start, curr, startAttributes, currAttributes) => {\n /**\n * @type {Item|null}\n */\n let end = start;\n /**\n * @type {Map<string,ContentFormat>}\n */\n const endFormats = map.create();\n while (end && (!end.countable || end.deleted)) {\n if (!end.deleted && end.content.constructor === ContentFormat) {\n const cf = /** @type {ContentFormat} */ (end.content);\n endFormats.set(cf.key, cf);\n }\n end = end.right;\n }\n let cleanups = 0;\n let reachedCurr = false;\n while (start !== end) {\n if (curr === start) {\n reachedCurr = true;\n }\n if (!start.deleted) {\n const content = start.content;\n switch (content.constructor) {\n case ContentFormat: {\n const { key, value } = /** @type {ContentFormat} */ (content);\n const startAttrValue = startAttributes.get(key) ?? null;\n if (endFormats.get(key) !== content || startAttrValue === value) {\n // Either this format is overwritten or it is not necessary because the attribute already existed.\n start.delete(transaction);\n cleanups++;\n if (!reachedCurr && (currAttributes.get(key) ?? null) === value && startAttrValue !== value) {\n if (startAttrValue === null) {\n currAttributes.delete(key);\n } else {\n currAttributes.set(key, startAttrValue);\n }\n }\n }\n if (!reachedCurr && !start.deleted) {\n updateCurrentAttributes(currAttributes, /** @type {ContentFormat} */ (content));\n }\n break\n }\n }\n }\n start = /** @type {Item} */ (start.right);\n }\n return cleanups\n};\n\n/**\n * @param {Transaction} transaction\n * @param {Item | null} item\n */\nconst cleanupContextlessFormattingGap = (transaction, item) => {\n // iterate until item.right is null or content\n while (item && item.right && (item.right.deleted || !item.right.countable)) {\n item = item.right;\n }\n const attrs = new Set();\n // iterate back until a content item is found\n while (item && (item.deleted || !item.countable)) {\n if (!item.deleted && item.content.constructor === ContentFormat) {\n const key = /** @type {ContentFormat} */ (item.content).key;\n if (attrs.has(key)) {\n item.delete(transaction);\n } else {\n attrs.add(key);\n }\n }\n item = item.left;\n }\n};\n\n/**\n * This function is experimental and subject to change / be removed.\n *\n * Ideally, we don't need this function at all. Formatting attributes should be cleaned up\n * automatically after each change. This function iterates twice over the complete YText type\n * and removes unnecessary formatting attributes. This is also helpful for testing.\n *\n * This function won't be exported anymore as soon as there is confidence that the YText type works as intended.\n *\n * @param {YText} type\n * @return {number} How many formatting attributes have been cleaned up.\n */\nconst cleanupYTextFormatting = type => {\n let res = 0;\n transact(/** @type {Doc} */ (type.doc), transaction => {\n let start = /** @type {Item} */ (type._start);\n let end = type._start;\n let startAttributes = map.create();\n const currentAttributes = map.copy(startAttributes);\n while (end) {\n if (end.deleted === false) {\n switch (end.content.constructor) {\n case ContentFormat:\n updateCurrentAttributes(currentAttributes, /** @type {ContentFormat} */ (end.content));\n break\n default:\n res += cleanupFormattingGap(transaction, start, end, startAttributes, currentAttributes);\n startAttributes = map.copy(currentAttributes);\n start = end;\n break\n }\n }\n end = end.right;\n }\n });\n return res\n};\n\n/**\n * This will be called by the transaction once the event handlers are called to potentially cleanup\n * formatting attributes.\n *\n * @param {Transaction} transaction\n */\nconst cleanupYTextAfterTransaction = transaction => {\n /**\n * @type {Set<YText>}\n */\n const needFullCleanup = new Set();\n // check if another formatting item was inserted\n const doc = transaction.doc;\n for (const [client, afterClock] of transaction.afterState.entries()) {\n const clock = transaction.beforeState.get(client) || 0;\n if (afterClock === clock) {\n continue\n }\n iterateStructs(transaction, /** @type {Array<Item|GC>} */ (doc.store.clients.get(client)), clock, afterClock, item => {\n if (\n !item.deleted && /** @type {Item} */ (item).content.constructor === ContentFormat && item.constructor !== GC\n ) {\n needFullCleanup.add(/** @type {any} */ (item).parent);\n }\n });\n }\n // cleanup in a new transaction\n transact(doc, (t) => {\n iterateDeletedStructs(transaction, transaction.deleteSet, item => {\n if (item instanceof GC || !(/** @type {YText} */ (item.parent)._hasFormatting) || needFullCleanup.has(/** @type {YText} */ (item.parent))) {\n return\n }\n const parent = /** @type {YText} */ (item.parent);\n if (item.content.constructor === ContentFormat) {\n needFullCleanup.add(parent);\n } else {\n // If no formatting attribute was inserted or deleted, we can make due with contextless\n // formatting cleanups.\n // Contextless: it is not necessary to compute currentAttributes for the affected position.\n cleanupContextlessFormattingGap(t, item);\n }\n });\n // If a formatting item was inserted, we simply clean the whole type.\n // We need to compute currentAttributes for the current position anyway.\n for (const yText of needFullCleanup) {\n cleanupYTextFormatting(yText);\n }\n });\n};\n\n/**\n * @param {Transaction} transaction\n * @param {ItemTextListPosition} currPos\n * @param {number} length\n * @return {ItemTextListPosition}\n *\n * @private\n * @function\n */\nconst deleteText = (transaction, currPos, length) => {\n const startLength = length;\n const startAttrs = map.copy(currPos.currentAttributes);\n const start = currPos.right;\n while (length > 0 && currPos.right !== null) {\n if (currPos.right.deleted === false) {\n switch (currPos.right.content.constructor) {\n case ContentType:\n case ContentEmbed:\n case ContentString:\n if (length < currPos.right.length) {\n getItemCleanStart(transaction, createID(currPos.right.id.client, currPos.right.id.clock + length));\n }\n length -= currPos.right.length;\n currPos.right.delete(transaction);\n break\n }\n }\n currPos.forward();\n }\n if (start) {\n cleanupFormattingGap(transaction, start, currPos.right, startAttrs, currPos.currentAttributes);\n }\n const parent = /** @type {AbstractType<any>} */ (/** @type {Item} */ (currPos.left || currPos.right).parent);\n if (parent._searchMarker) {\n updateMarkerChanges(parent._searchMarker, currPos.index, -startLength + length);\n }\n return currPos\n};\n\n/**\n * The Quill Delta format represents changes on a text document with\n * formatting information. For more information visit {@link https://quilljs.com/docs/delta/|Quill Delta}\n *\n * @example\n * {\n * ops: [\n * { insert: 'Gandalf', attributes: { bold: true } },\n * { insert: ' the ' },\n * { insert: 'Grey', attributes: { color: '#cccccc' } }\n * ]\n * }\n *\n */\n\n/**\n * Attributes that can be assigned to a selection of text.\n *\n * @example\n * {\n * bold: true,\n * font-size: '40px'\n * }\n *\n * @typedef {Object} TextAttributes\n */\n\n/**\n * @extends YEvent<YText>\n * Event that describes the changes on a YText type.\n */\nclass YTextEvent extends YEvent {\n /**\n * @param {YText} ytext\n * @param {Transaction} transaction\n * @param {Set<any>} subs The keys that changed\n */\n constructor (ytext, transaction, subs) {\n super(ytext, transaction);\n /**\n * Whether the children changed.\n * @type {Boolean}\n * @private\n */\n this.childListChanged = false;\n /**\n * Set of all changed attributes.\n * @type {Set<string>}\n */\n this.keysChanged = new Set();\n subs.forEach((sub) => {\n if (sub === null) {\n this.childListChanged = true;\n } else {\n this.keysChanged.add(sub);\n }\n });\n }\n\n /**\n * @type {{added:Set<Item>,deleted:Set<Item>,keys:Map<string,{action:'add'|'update'|'delete',oldValue:any}>,delta:Array<{insert?:Array<any>|string, delete?:number, retain?:number}>}}\n */\n get changes () {\n if (this._changes === null) {\n /**\n * @type {{added:Set<Item>,deleted:Set<Item>,keys:Map<string,{action:'add'|'update'|'delete',oldValue:any}>,delta:Array<{insert?:Array<any>|string|AbstractType<any>|object, delete?:number, retain?:number}>}}\n */\n const changes = {\n keys: this.keys,\n delta: this.delta,\n added: new Set(),\n deleted: new Set()\n };\n this._changes = changes;\n }\n return /** @type {any} */ (this._changes)\n }\n\n /**\n * Compute the changes in the delta format.\n * A {@link https://quilljs.com/docs/delta/|Quill Delta}) that represents the changes on the document.\n *\n * @type {Array<{insert?:string|object|AbstractType<any>, delete?:number, retain?:number, attributes?: Object<string,any>}>}\n *\n * @public\n */\n get delta () {\n if (this._delta === null) {\n const y = /** @type {Doc} */ (this.target.doc);\n /**\n * @type {Array<{insert?:string|object|AbstractType<any>, delete?:number, retain?:number, attributes?: Object<string,any>}>}\n */\n const delta = [];\n transact(y, transaction => {\n const currentAttributes = new Map(); // saves all current attributes for insert\n const oldAttributes = new Map();\n let item = this.target._start;\n /**\n * @type {string?}\n */\n let action = null;\n /**\n * @type {Object<string,any>}\n */\n const attributes = {}; // counts added or removed new attributes for retain\n /**\n * @type {string|object}\n */\n let insert = '';\n let retain = 0;\n let deleteLen = 0;\n const addOp = () => {\n if (action !== null) {\n /**\n * @type {any}\n */\n let op = null;\n switch (action) {\n case 'delete':\n if (deleteLen > 0) {\n op = { delete: deleteLen };\n }\n deleteLen = 0;\n break\n case 'insert':\n if (typeof insert === 'object' || insert.length > 0) {\n op = { insert };\n if (currentAttributes.size > 0) {\n op.attributes = {};\n currentAttributes.forEach((value, key) => {\n if (value !== null) {\n op.attributes[key] = value;\n }\n });\n }\n }\n insert = '';\n break\n case 'retain':\n if (retain > 0) {\n op = { retain };\n if (!object.isEmpty(attributes)) {\n op.attributes = object.assign({}, attributes);\n }\n }\n retain = 0;\n break\n }\n if (op) delta.push(op);\n action = null;\n }\n };\n while (item !== null) {\n switch (item.content.constructor) {\n case ContentType:\n case ContentEmbed:\n if (this.adds(item)) {\n if (!this.deletes(item)) {\n addOp();\n action = 'insert';\n insert = item.content.getContent()[0];\n addOp();\n }\n } else if (this.deletes(item)) {\n if (action !== 'delete') {\n addOp();\n action = 'delete';\n }\n deleteLen += 1;\n } else if (!item.deleted) {\n if (action !== 'retain') {\n addOp();\n action = 'retain';\n }\n retain += 1;\n }\n break\n case ContentString:\n if (this.adds(item)) {\n if (!this.deletes(item)) {\n if (action !== 'insert') {\n addOp();\n action = 'insert';\n }\n insert += /** @type {ContentString} */ (item.content).str;\n }\n } else if (this.deletes(item)) {\n if (action !== 'delete') {\n addOp();\n action = 'delete';\n }\n deleteLen += item.length;\n } else if (!item.deleted) {\n if (action !== 'retain') {\n addOp();\n action = 'retain';\n }\n retain += item.length;\n }\n break\n case ContentFormat: {\n const { key, value } = /** @type {ContentFormat} */ (item.content);\n if (this.adds(item)) {\n if (!this.deletes(item)) {\n const curVal = currentAttributes.get(key) ?? null;\n if (!equalAttrs(curVal, value)) {\n if (action === 'retain') {\n addOp();\n }\n if (equalAttrs(value, (oldAttributes.get(key) ?? null))) {\n delete attributes[key];\n } else {\n attributes[key] = value;\n }\n } else if (value !== null) {\n item.delete(transaction);\n }\n }\n } else if (this.deletes(item)) {\n oldAttributes.set(key, value);\n const curVal = currentAttributes.get(key) ?? null;\n if (!equalAttrs(curVal, value)) {\n if (action === 'retain') {\n addOp();\n }\n attributes[key] = curVal;\n }\n } else if (!item.deleted) {\n oldAttributes.set(key, value);\n const attr = attributes[key];\n if (attr !== undefined) {\n if (!equalAttrs(attr, value)) {\n if (action === 'retain') {\n addOp();\n }\n if (value === null) {\n delete attributes[key];\n } else {\n attributes[key] = value;\n }\n } else if (attr !== null) { // this will be cleaned up automatically by the contextless cleanup function\n item.delete(transaction);\n }\n }\n }\n if (!item.deleted) {\n if (action === 'insert') {\n addOp();\n }\n updateCurrentAttributes(currentAttributes, /** @type {ContentFormat} */ (item.content));\n }\n break\n }\n }\n item = item.right;\n }\n addOp();\n while (delta.length > 0) {\n const lastOp = delta[delta.length - 1];\n if (lastOp.retain !== undefined && lastOp.attributes === undefined) {\n // retain delta's if they don't assign attributes\n delta.pop();\n } else {\n break\n }\n }\n });\n this._delta = delta;\n }\n return /** @type {any} */ (this._delta)\n }\n}\n\n/**\n * Type that represents text with formatting information.\n *\n * This type replaces y-richtext as this implementation is able to handle\n * block formats (format information on a paragraph), embeds (complex elements\n * like pictures and videos), and text formats (**bold**, *italic*).\n *\n * @extends AbstractType<YTextEvent>\n */\nclass YText extends AbstractType {\n /**\n * @param {String} [string] The initial value of the YText.\n */\n constructor (string) {\n super();\n /**\n * Array of pending operations on this type\n * @type {Array<function():void>?}\n */\n this._pending = string !== undefined ? [() => this.insert(0, string)] : [];\n /**\n * @type {Array<ArraySearchMarker>|null}\n */\n this._searchMarker = [];\n /**\n * Whether this YText contains formatting attributes.\n * This flag is updated when a formatting item is integrated (see ContentFormat.integrate)\n */\n this._hasFormatting = false;\n }\n\n /**\n * Number of characters of this text type.\n *\n * @type {number}\n */\n get length () {\n this.doc ?? warnPrematureAccess();\n return this._length\n }\n\n /**\n * @param {Doc} y\n * @param {Item} item\n */\n _integrate (y, item) {\n super._integrate(y, item);\n try {\n /** @type {Array<function>} */ (this._pending).forEach(f => f());\n } catch (e) {\n console.error(e);\n }\n this._pending = null;\n }\n\n _copy () {\n return new YText()\n }\n\n /**\n * Makes a copy of this data type that can be included somewhere else.\n *\n * Note that the content is only readable _after_ it has been included somewhere in the Ydoc.\n *\n * @return {YText}\n */\n clone () {\n const text = new YText();\n text.applyDelta(this.toDelta());\n return text\n }\n\n /**\n * Creates YTextEvent and calls observers.\n *\n * @param {Transaction} transaction\n * @param {Set<null|string>} parentSubs Keys changed on this type. `null` if list was modified.\n */\n _callObserver (transaction, parentSubs) {\n super._callObserver(transaction, parentSubs);\n const event = new YTextEvent(this, transaction, parentSubs);\n callTypeObservers(this, transaction, event);\n // If a remote change happened, we try to cleanup potential formatting duplicates.\n if (!transaction.local && this._hasFormatting) {\n transaction._needFormattingCleanup = true;\n }\n }\n\n /**\n * Returns the unformatted string representation of this YText type.\n *\n * @public\n */\n toString () {\n this.doc ?? warnPrematureAccess();\n let str = '';\n /**\n * @type {Item|null}\n */\n let n = this._start;\n while (n !== null) {\n if (!n.deleted && n.countable && n.content.constructor === ContentString) {\n str += /** @type {ContentString} */ (n.content).str;\n }\n n = n.right;\n }\n return str\n }\n\n /**\n * Returns the unformatted string representation of this YText type.\n *\n * @return {string}\n * @public\n */\n toJSON () {\n return this.toString()\n }\n\n /**\n * Apply a {@link Delta} on this shared YText type.\n *\n * @param {Array<any>} delta The changes to apply on this element.\n * @param {object} opts\n * @param {boolean} [opts.sanitize] Sanitize input delta. Removes ending newlines if set to true.\n *\n *\n * @public\n */\n applyDelta (delta, { sanitize = true } = {}) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n const currPos = new ItemTextListPosition(null, this._start, 0, new Map());\n for (let i = 0; i < delta.length; i++) {\n const op = delta[i];\n if (op.insert !== undefined) {\n // Quill assumes that the content starts with an empty paragraph.\n // Yjs/Y.Text assumes that it starts empty. We always hide that\n // there is a newline at the end of the content.\n // If we omit this step, clients will see a different number of\n // paragraphs, but nothing bad will happen.\n const ins = (!sanitize && typeof op.insert === 'string' && i === delta.length - 1 && currPos.right === null && op.insert.slice(-1) === '\\n') ? op.insert.slice(0, -1) : op.insert;\n if (typeof ins !== 'string' || ins.length > 0) {\n insertText(transaction, this, currPos, ins, op.attributes || {});\n }\n } else if (op.retain !== undefined) {\n formatText(transaction, this, currPos, op.retain, op.attributes || {});\n } else if (op.delete !== undefined) {\n deleteText(transaction, currPos, op.delete);\n }\n }\n });\n } else {\n /** @type {Array<function>} */ (this._pending).push(() => this.applyDelta(delta));\n }\n }\n\n /**\n * Returns the Delta representation of this YText type.\n *\n * @param {Snapshot} [snapshot]\n * @param {Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', ID):any} [computeYChange]\n * @return {any} The Delta representation of this type.\n *\n * @public\n */\n toDelta (snapshot, prevSnapshot, computeYChange) {\n this.doc ?? warnPrematureAccess();\n /**\n * @type{Array<any>}\n */\n const ops = [];\n const currentAttributes = new Map();\n const doc = /** @type {Doc} */ (this.doc);\n let str = '';\n let n = this._start;\n function packStr () {\n if (str.length > 0) {\n // pack str with attributes to ops\n /**\n * @type {Object<string,any>}\n */\n const attributes = {};\n let addAttributes = false;\n currentAttributes.forEach((value, key) => {\n addAttributes = true;\n attributes[key] = value;\n });\n /**\n * @type {Object<string,any>}\n */\n const op = { insert: str };\n if (addAttributes) {\n op.attributes = attributes;\n }\n ops.push(op);\n str = '';\n }\n }\n const computeDelta = () => {\n while (n !== null) {\n if (isVisible(n, snapshot) || (prevSnapshot !== undefined && isVisible(n, prevSnapshot))) {\n switch (n.content.constructor) {\n case ContentString: {\n const cur = currentAttributes.get('ychange');\n if (snapshot !== undefined && !isVisible(n, snapshot)) {\n if (cur === undefined || cur.user !== n.id.client || cur.type !== 'removed') {\n packStr();\n currentAttributes.set('ychange', computeYChange ? computeYChange('removed', n.id) : { type: 'removed' });\n }\n } else if (prevSnapshot !== undefined && !isVisible(n, prevSnapshot)) {\n if (cur === undefined || cur.user !== n.id.client || cur.type !== 'added') {\n packStr();\n currentAttributes.set('ychange', computeYChange ? computeYChange('added', n.id) : { type: 'added' });\n }\n } else if (cur !== undefined) {\n packStr();\n currentAttributes.delete('ychange');\n }\n str += /** @type {ContentString} */ (n.content).str;\n break\n }\n case ContentType:\n case ContentEmbed: {\n packStr();\n /**\n * @type {Object<string,any>}\n */\n const op = {\n insert: n.content.getContent()[0]\n };\n if (currentAttributes.size > 0) {\n const attrs = /** @type {Object<string,any>} */ ({});\n op.attributes = attrs;\n currentAttributes.forEach((value, key) => {\n attrs[key] = value;\n });\n }\n ops.push(op);\n break\n }\n case ContentFormat:\n if (isVisible(n, snapshot)) {\n packStr();\n updateCurrentAttributes(currentAttributes, /** @type {ContentFormat} */ (n.content));\n }\n break\n }\n }\n n = n.right;\n }\n packStr();\n };\n if (snapshot || prevSnapshot) {\n // snapshots are merged again after the transaction, so we need to keep the\n // transaction alive until we are done\n transact(doc, transaction => {\n if (snapshot) {\n splitSnapshotAffectedStructs(transaction, snapshot);\n }\n if (prevSnapshot) {\n splitSnapshotAffectedStructs(transaction, prevSnapshot);\n }\n computeDelta();\n }, 'cleanup');\n } else {\n computeDelta();\n }\n return ops\n }\n\n /**\n * Insert text at a given index.\n *\n * @param {number} index The index at which to start inserting.\n * @param {String} text The text to insert at the specified position.\n * @param {TextAttributes} [attributes] Optionally define some formatting\n * information to apply on the inserted\n * Text.\n * @public\n */\n insert (index, text, attributes) {\n if (text.length <= 0) {\n return\n }\n const y = this.doc;\n if (y !== null) {\n transact(y, transaction => {\n const pos = findPosition(transaction, this, index, !attributes);\n if (!attributes) {\n attributes = {};\n // @ts-ignore\n pos.currentAttributes.forEach((v, k) => { attributes[k] = v; });\n }\n insertText(transaction, this, pos, text, attributes);\n });\n } else {\n /** @type {Array<function>} */ (this._pending).push(() => this.insert(index, text, attributes));\n }\n }\n\n /**\n * Inserts an embed at a index.\n *\n * @param {number} index The index to insert the embed at.\n * @param {Object | AbstractType<any>} embed The Object that represents the embed.\n * @param {TextAttributes} [attributes] Attribute information to apply on the\n * embed\n *\n * @public\n */\n insertEmbed (index, embed, attributes) {\n const y = this.doc;\n if (y !== null) {\n transact(y, transaction => {\n const pos = findPosition(transaction, this, index, !attributes);\n insertText(transaction, this, pos, embed, attributes || {});\n });\n } else {\n /** @type {Array<function>} */ (this._pending).push(() => this.insertEmbed(index, embed, attributes || {}));\n }\n }\n\n /**\n * Deletes text starting from an index.\n *\n * @param {number} index Index at which to start deleting.\n * @param {number} length The number of characters to remove. Defaults to 1.\n *\n * @public\n */\n delete (index, length) {\n if (length === 0) {\n return\n }\n const y = this.doc;\n if (y !== null) {\n transact(y, transaction => {\n deleteText(transaction, findPosition(transaction, this, index, true), length);\n });\n } else {\n /** @type {Array<function>} */ (this._pending).push(() => this.delete(index, length));\n }\n }\n\n /**\n * Assigns properties to a range of text.\n *\n * @param {number} index The position where to start formatting.\n * @param {number} length The amount of characters to assign properties to.\n * @param {TextAttributes} attributes Attribute information to apply on the\n * text.\n *\n * @public\n */\n format (index, length, attributes) {\n if (length === 0) {\n return\n }\n const y = this.doc;\n if (y !== null) {\n transact(y, transaction => {\n const pos = findPosition(transaction, this, index, false);\n if (pos.right === null) {\n return\n }\n formatText(transaction, this, pos, length, attributes);\n });\n } else {\n /** @type {Array<function>} */ (this._pending).push(() => this.format(index, length, attributes));\n }\n }\n\n /**\n * Removes an attribute.\n *\n * @note Xml-Text nodes don't have attributes. You can use this feature to assign properties to complete text-blocks.\n *\n * @param {String} attributeName The attribute name that is to be removed.\n *\n * @public\n */\n removeAttribute (attributeName) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeMapDelete(transaction, this, attributeName);\n });\n } else {\n /** @type {Array<function>} */ (this._pending).push(() => this.removeAttribute(attributeName));\n }\n }\n\n /**\n * Sets or updates an attribute.\n *\n * @note Xml-Text nodes don't have attributes. You can use this feature to assign properties to complete text-blocks.\n *\n * @param {String} attributeName The attribute name that is to be set.\n * @param {any} attributeValue The attribute value that is to be set.\n *\n * @public\n */\n setAttribute (attributeName, attributeValue) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeMapSet(transaction, this, attributeName, attributeValue);\n });\n } else {\n /** @type {Array<function>} */ (this._pending).push(() => this.setAttribute(attributeName, attributeValue));\n }\n }\n\n /**\n * Returns an attribute value that belongs to the attribute name.\n *\n * @note Xml-Text nodes don't have attributes. You can use this feature to assign properties to complete text-blocks.\n *\n * @param {String} attributeName The attribute name that identifies the\n * queried value.\n * @return {any} The queried attribute value.\n *\n * @public\n */\n getAttribute (attributeName) {\n return /** @type {any} */ (typeMapGet(this, attributeName))\n }\n\n /**\n * Returns all attribute name/value pairs in a JSON Object.\n *\n * @note Xml-Text nodes don't have attributes. You can use this feature to assign properties to complete text-blocks.\n *\n * @return {Object<string, any>} A JSON Object that describes the attributes.\n *\n * @public\n */\n getAttributes () {\n return typeMapGetAll(this)\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n */\n _write (encoder) {\n encoder.writeTypeRef(YTextRefID);\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} _decoder\n * @return {YText}\n *\n * @private\n * @function\n */\nconst readYText = _decoder => new YText();\n\n/**\n * @module YXml\n */\n\n\n/**\n * Define the elements to which a set of CSS queries apply.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors|CSS_Selectors}\n *\n * @example\n * query = '.classSelector'\n * query = 'nodeSelector'\n * query = '#idSelector'\n *\n * @typedef {string} CSS_Selector\n */\n\n/**\n * Dom filter function.\n *\n * @callback domFilter\n * @param {string} nodeName The nodeName of the element\n * @param {Map} attributes The map of attributes.\n * @return {boolean} Whether to include the Dom node in the YXmlElement.\n */\n\n/**\n * Represents a subset of the nodes of a YXmlElement / YXmlFragment and a\n * position within them.\n *\n * Can be created with {@link YXmlFragment#createTreeWalker}\n *\n * @public\n * @implements {Iterable<YXmlElement|YXmlText|YXmlElement|YXmlHook>}\n */\nclass YXmlTreeWalker {\n /**\n * @param {YXmlFragment | YXmlElement} root\n * @param {function(AbstractType<any>):boolean} [f]\n */\n constructor (root, f = () => true) {\n this._filter = f;\n this._root = root;\n /**\n * @type {Item}\n */\n this._currentNode = /** @type {Item} */ (root._start);\n this._firstCall = true;\n root.doc ?? warnPrematureAccess();\n }\n\n [Symbol.iterator] () {\n return this\n }\n\n /**\n * Get the next node.\n *\n * @return {IteratorResult<YXmlElement|YXmlText|YXmlHook>} The next node.\n *\n * @public\n */\n next () {\n /**\n * @type {Item|null}\n */\n let n = this._currentNode;\n let type = n && n.content && /** @type {any} */ (n.content).type;\n if (n !== null && (!this._firstCall || n.deleted || !this._filter(type))) { // if first call, we check if we can use the first item\n do {\n type = /** @type {any} */ (n.content).type;\n if (!n.deleted && (type.constructor === YXmlElement || type.constructor === YXmlFragment) && type._start !== null) {\n // walk down in the tree\n n = type._start;\n } else {\n // walk right or up in the tree\n while (n !== null) {\n /**\n * @type {Item | null}\n */\n const nxt = n.next;\n if (nxt !== null) {\n n = nxt;\n break\n } else if (n.parent === this._root) {\n n = null;\n } else {\n n = /** @type {AbstractType<any>} */ (n.parent)._item;\n }\n }\n }\n } while (n !== null && (n.deleted || !this._filter(/** @type {ContentType} */ (n.content).type)))\n }\n this._firstCall = false;\n if (n === null) {\n // @ts-ignore\n return { value: undefined, done: true }\n }\n this._currentNode = n;\n return { value: /** @type {any} */ (n.content).type, done: false }\n }\n}\n\n/**\n * Represents a list of {@link YXmlElement}.and {@link YXmlText} types.\n * A YxmlFragment is similar to a {@link YXmlElement}, but it does not have a\n * nodeName and it does not have attributes. Though it can be bound to a DOM\n * element - in this case the attributes and the nodeName are not shared.\n *\n * @public\n * @extends AbstractType<YXmlEvent>\n */\nclass YXmlFragment extends AbstractType {\n constructor () {\n super();\n /**\n * @type {Array<any>|null}\n */\n this._prelimContent = [];\n }\n\n /**\n * @type {YXmlElement|YXmlText|null}\n */\n get firstChild () {\n const first = this._first;\n return first ? first.content.getContent()[0] : null\n }\n\n /**\n * Integrate this type into the Yjs instance.\n *\n * * Save this struct in the os\n * * This type is sent to other client\n * * Observer functions are fired\n *\n * @param {Doc} y The Yjs instance\n * @param {Item} item\n */\n _integrate (y, item) {\n super._integrate(y, item);\n this.insert(0, /** @type {Array<any>} */ (this._prelimContent));\n this._prelimContent = null;\n }\n\n _copy () {\n return new YXmlFragment()\n }\n\n /**\n * Makes a copy of this data type that can be included somewhere else.\n *\n * Note that the content is only readable _after_ it has been included somewhere in the Ydoc.\n *\n * @return {YXmlFragment}\n */\n clone () {\n const el = new YXmlFragment();\n // @ts-ignore\n el.insert(0, this.toArray().map(item => item instanceof AbstractType ? item.clone() : item));\n return el\n }\n\n get length () {\n this.doc ?? warnPrematureAccess();\n return this._prelimContent === null ? this._length : this._prelimContent.length\n }\n\n /**\n * Create a subtree of childNodes.\n *\n * @example\n * const walker = elem.createTreeWalker(dom => dom.nodeName === 'div')\n * for (let node in walker) {\n * // `node` is a div node\n * nop(node)\n * }\n *\n * @param {function(AbstractType<any>):boolean} filter Function that is called on each child element and\n * returns a Boolean indicating whether the child\n * is to be included in the subtree.\n * @return {YXmlTreeWalker} A subtree and a position within it.\n *\n * @public\n */\n createTreeWalker (filter) {\n return new YXmlTreeWalker(this, filter)\n }\n\n /**\n * Returns the first YXmlElement that matches the query.\n * Similar to DOM's {@link querySelector}.\n *\n * Query support:\n * - tagname\n * TODO:\n * - id\n * - attribute\n *\n * @param {CSS_Selector} query The query on the children.\n * @return {YXmlElement|YXmlText|YXmlHook|null} The first element that matches the query or null.\n *\n * @public\n */\n querySelector (query) {\n query = query.toUpperCase();\n // @ts-ignore\n const iterator = new YXmlTreeWalker(this, element => element.nodeName && element.nodeName.toUpperCase() === query);\n const next = iterator.next();\n if (next.done) {\n return null\n } else {\n return next.value\n }\n }\n\n /**\n * Returns all YXmlElements that match the query.\n * Similar to Dom's {@link querySelectorAll}.\n *\n * @todo Does not yet support all queries. Currently only query by tagName.\n *\n * @param {CSS_Selector} query The query on the children\n * @return {Array<YXmlElement|YXmlText|YXmlHook|null>} The elements that match this query.\n *\n * @public\n */\n querySelectorAll (query) {\n query = query.toUpperCase();\n // @ts-ignore\n return array.from(new YXmlTreeWalker(this, element => element.nodeName && element.nodeName.toUpperCase() === query))\n }\n\n /**\n * Creates YXmlEvent and calls observers.\n *\n * @param {Transaction} transaction\n * @param {Set<null|string>} parentSubs Keys changed on this type. `null` if list was modified.\n */\n _callObserver (transaction, parentSubs) {\n callTypeObservers(this, transaction, new YXmlEvent(this, parentSubs, transaction));\n }\n\n /**\n * Get the string representation of all the children of this YXmlFragment.\n *\n * @return {string} The string representation of all children.\n */\n toString () {\n return typeListMap(this, xml => xml.toString()).join('')\n }\n\n /**\n * @return {string}\n */\n toJSON () {\n return this.toString()\n }\n\n /**\n * Creates a Dom Element that mirrors this YXmlElement.\n *\n * @param {Document} [_document=document] The document object (you must define\n * this when calling this method in\n * nodejs)\n * @param {Object<string, any>} [hooks={}] Optional property to customize how hooks\n * are presented in the DOM\n * @param {any} [binding] You should not set this property. This is\n * used if DomBinding wants to create a\n * association to the created DOM type.\n * @return {Node} The {@link https://developer.mozilla.org/en-US/docs/Web/API/Element|Dom Element}\n *\n * @public\n */\n toDOM (_document = document, hooks = {}, binding) {\n const fragment = _document.createDocumentFragment();\n if (binding !== undefined) {\n binding._createAssociation(fragment, this);\n }\n typeListForEach(this, xmlType => {\n fragment.insertBefore(xmlType.toDOM(_document, hooks, binding), null);\n });\n return fragment\n }\n\n /**\n * Inserts new content at an index.\n *\n * @example\n * // Insert character 'a' at position 0\n * xml.insert(0, [new Y.XmlText('text')])\n *\n * @param {number} index The index to insert content at\n * @param {Array<YXmlElement|YXmlText>} content The array of content\n */\n insert (index, content) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeListInsertGenerics(transaction, this, index, content);\n });\n } else {\n // @ts-ignore _prelimContent is defined because this is not yet integrated\n this._prelimContent.splice(index, 0, ...content);\n }\n }\n\n /**\n * Inserts new content at an index.\n *\n * @example\n * // Insert character 'a' at position 0\n * xml.insert(0, [new Y.XmlText('text')])\n *\n * @param {null|Item|YXmlElement|YXmlText} ref The index to insert content at\n * @param {Array<YXmlElement|YXmlText>} content The array of content\n */\n insertAfter (ref, content) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n const refItem = (ref && ref instanceof AbstractType) ? ref._item : ref;\n typeListInsertGenericsAfter(transaction, this, refItem, content);\n });\n } else {\n const pc = /** @type {Array<any>} */ (this._prelimContent);\n const index = ref === null ? 0 : pc.findIndex(el => el === ref) + 1;\n if (index === 0 && ref !== null) {\n throw error.create('Reference item not found')\n }\n pc.splice(index, 0, ...content);\n }\n }\n\n /**\n * Deletes elements starting from an index.\n *\n * @param {number} index Index at which to start deleting elements\n * @param {number} [length=1] The number of elements to remove. Defaults to 1.\n */\n delete (index, length = 1) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeListDelete(transaction, this, index, length);\n });\n } else {\n // @ts-ignore _prelimContent is defined because this is not yet integrated\n this._prelimContent.splice(index, length);\n }\n }\n\n /**\n * Transforms this YArray to a JavaScript Array.\n *\n * @return {Array<YXmlElement|YXmlText|YXmlHook>}\n */\n toArray () {\n return typeListToArray(this)\n }\n\n /**\n * Appends content to this YArray.\n *\n * @param {Array<YXmlElement|YXmlText>} content Array of content to append.\n */\n push (content) {\n this.insert(this.length, content);\n }\n\n /**\n * Prepends content to this YArray.\n *\n * @param {Array<YXmlElement|YXmlText>} content Array of content to prepend.\n */\n unshift (content) {\n this.insert(0, content);\n }\n\n /**\n * Returns the i-th element from a YArray.\n *\n * @param {number} index The index of the element to return from the YArray\n * @return {YXmlElement|YXmlText}\n */\n get (index) {\n return typeListGet(this, index)\n }\n\n /**\n * Returns a portion of this YXmlFragment into a JavaScript Array selected\n * from start to end (end not included).\n *\n * @param {number} [start]\n * @param {number} [end]\n * @return {Array<YXmlElement|YXmlText>}\n */\n slice (start = 0, end = this.length) {\n return typeListSlice(this, start, end)\n }\n\n /**\n * Executes a provided function on once on every child element.\n *\n * @param {function(YXmlElement|YXmlText,number, typeof self):void} f A function to execute on every element of this YArray.\n */\n forEach (f) {\n typeListForEach(this, f);\n }\n\n /**\n * Transform the properties of this type to binary and write it to an\n * BinaryEncoder.\n *\n * This is called when this Item is sent to a remote peer.\n *\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder The encoder to write data to.\n */\n _write (encoder) {\n encoder.writeTypeRef(YXmlFragmentRefID);\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} _decoder\n * @return {YXmlFragment}\n *\n * @private\n * @function\n */\nconst readYXmlFragment = _decoder => new YXmlFragment();\n\n/**\n * @typedef {Object|number|null|Array<any>|string|Uint8Array|AbstractType<any>} ValueTypes\n */\n\n/**\n * An YXmlElement imitates the behavior of a\n * https://developer.mozilla.org/en-US/docs/Web/API/Element|Dom Element\n *\n * * An YXmlElement has attributes (key value pairs)\n * * An YXmlElement has childElements that must inherit from YXmlElement\n *\n * @template {{ [key: string]: ValueTypes }} [KV={ [key: string]: string }]\n */\nclass YXmlElement extends YXmlFragment {\n constructor (nodeName = 'UNDEFINED') {\n super();\n this.nodeName = nodeName;\n /**\n * @type {Map<string, any>|null}\n */\n this._prelimAttrs = new Map();\n }\n\n /**\n * @type {YXmlElement|YXmlText|null}\n */\n get nextSibling () {\n const n = this._item ? this._item.next : null;\n return n ? /** @type {YXmlElement|YXmlText} */ (/** @type {ContentType} */ (n.content).type) : null\n }\n\n /**\n * @type {YXmlElement|YXmlText|null}\n */\n get prevSibling () {\n const n = this._item ? this._item.prev : null;\n return n ? /** @type {YXmlElement|YXmlText} */ (/** @type {ContentType} */ (n.content).type) : null\n }\n\n /**\n * Integrate this type into the Yjs instance.\n *\n * * Save this struct in the os\n * * This type is sent to other client\n * * Observer functions are fired\n *\n * @param {Doc} y The Yjs instance\n * @param {Item} item\n */\n _integrate (y, item) {\n super._integrate(y, item)\n ;(/** @type {Map<string, any>} */ (this._prelimAttrs)).forEach((value, key) => {\n this.setAttribute(key, value);\n });\n this._prelimAttrs = null;\n }\n\n /**\n * Creates an Item with the same effect as this Item (without position effect)\n *\n * @return {YXmlElement}\n */\n _copy () {\n return new YXmlElement(this.nodeName)\n }\n\n /**\n * Makes a copy of this data type that can be included somewhere else.\n *\n * Note that the content is only readable _after_ it has been included somewhere in the Ydoc.\n *\n * @return {YXmlElement<KV>}\n */\n clone () {\n /**\n * @type {YXmlElement<KV>}\n */\n const el = new YXmlElement(this.nodeName);\n const attrs = this.getAttributes();\n object.forEach(attrs, (value, key) => {\n if (typeof value === 'string') {\n el.setAttribute(key, value);\n }\n });\n // @ts-ignore\n el.insert(0, this.toArray().map(item => item instanceof AbstractType ? item.clone() : item));\n return el\n }\n\n /**\n * Returns the XML serialization of this YXmlElement.\n * The attributes are ordered by attribute-name, so you can easily use this\n * method to compare YXmlElements\n *\n * @return {string} The string representation of this type.\n *\n * @public\n */\n toString () {\n const attrs = this.getAttributes();\n const stringBuilder = [];\n const keys = [];\n for (const key in attrs) {\n keys.push(key);\n }\n keys.sort();\n const keysLen = keys.length;\n for (let i = 0; i < keysLen; i++) {\n const key = keys[i];\n stringBuilder.push(key + '=\"' + attrs[key] + '\"');\n }\n const nodeName = this.nodeName.toLocaleLowerCase();\n const attrsString = stringBuilder.length > 0 ? ' ' + stringBuilder.join(' ') : '';\n return `<${nodeName}${attrsString}>${super.toString()}</${nodeName}>`\n }\n\n /**\n * Removes an attribute from this YXmlElement.\n *\n * @param {string} attributeName The attribute name that is to be removed.\n *\n * @public\n */\n removeAttribute (attributeName) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeMapDelete(transaction, this, attributeName);\n });\n } else {\n /** @type {Map<string,any>} */ (this._prelimAttrs).delete(attributeName);\n }\n }\n\n /**\n * Sets or updates an attribute.\n *\n * @template {keyof KV & string} KEY\n *\n * @param {KEY} attributeName The attribute name that is to be set.\n * @param {KV[KEY]} attributeValue The attribute value that is to be set.\n *\n * @public\n */\n setAttribute (attributeName, attributeValue) {\n if (this.doc !== null) {\n transact(this.doc, transaction => {\n typeMapSet(transaction, this, attributeName, attributeValue);\n });\n } else {\n /** @type {Map<string, any>} */ (this._prelimAttrs).set(attributeName, attributeValue);\n }\n }\n\n /**\n * Returns an attribute value that belongs to the attribute name.\n *\n * @template {keyof KV & string} KEY\n *\n * @param {KEY} attributeName The attribute name that identifies the\n * queried value.\n * @return {KV[KEY]|undefined} The queried attribute value.\n *\n * @public\n */\n getAttribute (attributeName) {\n return /** @type {any} */ (typeMapGet(this, attributeName))\n }\n\n /**\n * Returns whether an attribute exists\n *\n * @param {string} attributeName The attribute name to check for existence.\n * @return {boolean} whether the attribute exists.\n *\n * @public\n */\n hasAttribute (attributeName) {\n return /** @type {any} */ (typeMapHas(this, attributeName))\n }\n\n /**\n * Returns all attribute name/value pairs in a JSON Object.\n *\n * @param {Snapshot} [snapshot]\n * @return {{ [Key in Extract<keyof KV,string>]?: KV[Key]}} A JSON Object that describes the attributes.\n *\n * @public\n */\n getAttributes (snapshot) {\n return /** @type {any} */ (snapshot ? typeMapGetAllSnapshot(this, snapshot) : typeMapGetAll(this))\n }\n\n /**\n * Creates a Dom Element that mirrors this YXmlElement.\n *\n * @param {Document} [_document=document] The document object (you must define\n * this when calling this method in\n * nodejs)\n * @param {Object<string, any>} [hooks={}] Optional property to customize how hooks\n * are presented in the DOM\n * @param {any} [binding] You should not set this property. This is\n * used if DomBinding wants to create a\n * association to the created DOM type.\n * @return {Node} The {@link https://developer.mozilla.org/en-US/docs/Web/API/Element|Dom Element}\n *\n * @public\n */\n toDOM (_document = document, hooks = {}, binding) {\n const dom = _document.createElement(this.nodeName);\n const attrs = this.getAttributes();\n for (const key in attrs) {\n const value = attrs[key];\n if (typeof value === 'string') {\n dom.setAttribute(key, value);\n }\n }\n typeListForEach(this, yxml => {\n dom.appendChild(yxml.toDOM(_document, hooks, binding));\n });\n if (binding !== undefined) {\n binding._createAssociation(dom, this);\n }\n return dom\n }\n\n /**\n * Transform the properties of this type to binary and write it to an\n * BinaryEncoder.\n *\n * This is called when this Item is sent to a remote peer.\n *\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder The encoder to write data to.\n */\n _write (encoder) {\n encoder.writeTypeRef(YXmlElementRefID);\n encoder.writeKey(this.nodeName);\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {YXmlElement}\n *\n * @function\n */\nconst readYXmlElement = decoder => new YXmlElement(decoder.readKey());\n\n/**\n * @extends YEvent<YXmlElement|YXmlText|YXmlFragment>\n * An Event that describes changes on a YXml Element or Yxml Fragment\n */\nclass YXmlEvent extends YEvent {\n /**\n * @param {YXmlElement|YXmlText|YXmlFragment} target The target on which the event is created.\n * @param {Set<string|null>} subs The set of changed attributes. `null` is included if the\n * child list changed.\n * @param {Transaction} transaction The transaction instance with which the\n * change was created.\n */\n constructor (target, subs, transaction) {\n super(target, transaction);\n /**\n * Whether the children changed.\n * @type {Boolean}\n * @private\n */\n this.childListChanged = false;\n /**\n * Set of all changed attributes.\n * @type {Set<string>}\n */\n this.attributesChanged = new Set();\n subs.forEach((sub) => {\n if (sub === null) {\n this.childListChanged = true;\n } else {\n this.attributesChanged.add(sub);\n }\n });\n }\n}\n\n/**\n * You can manage binding to a custom type with YXmlHook.\n *\n * @extends {YMap<any>}\n */\nclass YXmlHook extends YMap {\n /**\n * @param {string} hookName nodeName of the Dom Node.\n */\n constructor (hookName) {\n super();\n /**\n * @type {string}\n */\n this.hookName = hookName;\n }\n\n /**\n * Creates an Item with the same effect as this Item (without position effect)\n */\n _copy () {\n return new YXmlHook(this.hookName)\n }\n\n /**\n * Makes a copy of this data type that can be included somewhere else.\n *\n * Note that the content is only readable _after_ it has been included somewhere in the Ydoc.\n *\n * @return {YXmlHook}\n */\n clone () {\n const el = new YXmlHook(this.hookName);\n this.forEach((value, key) => {\n el.set(key, value);\n });\n return el\n }\n\n /**\n * Creates a Dom Element that mirrors this YXmlElement.\n *\n * @param {Document} [_document=document] The document object (you must define\n * this when calling this method in\n * nodejs)\n * @param {Object.<string, any>} [hooks] Optional property to customize how hooks\n * are presented in the DOM\n * @param {any} [binding] You should not set this property. This is\n * used if DomBinding wants to create a\n * association to the created DOM type\n * @return {Element} The {@link https://developer.mozilla.org/en-US/docs/Web/API/Element|Dom Element}\n *\n * @public\n */\n toDOM (_document = document, hooks = {}, binding) {\n const hook = hooks[this.hookName];\n let dom;\n if (hook !== undefined) {\n dom = hook.createDom(this);\n } else {\n dom = document.createElement(this.hookName);\n }\n dom.setAttribute('data-yjs-hook', this.hookName);\n if (binding !== undefined) {\n binding._createAssociation(dom, this);\n }\n return dom\n }\n\n /**\n * Transform the properties of this type to binary and write it to an\n * BinaryEncoder.\n *\n * This is called when this Item is sent to a remote peer.\n *\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder The encoder to write data to.\n */\n _write (encoder) {\n encoder.writeTypeRef(YXmlHookRefID);\n encoder.writeKey(this.hookName);\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {YXmlHook}\n *\n * @private\n * @function\n */\nconst readYXmlHook = decoder =>\n new YXmlHook(decoder.readKey());\n\n/**\n * Represents text in a Dom Element. In the future this type will also handle\n * simple formatting information like bold and italic.\n */\nclass YXmlText extends YText {\n /**\n * @type {YXmlElement|YXmlText|null}\n */\n get nextSibling () {\n const n = this._item ? this._item.next : null;\n return n ? /** @type {YXmlElement|YXmlText} */ (/** @type {ContentType} */ (n.content).type) : null\n }\n\n /**\n * @type {YXmlElement|YXmlText|null}\n */\n get prevSibling () {\n const n = this._item ? this._item.prev : null;\n return n ? /** @type {YXmlElement|YXmlText} */ (/** @type {ContentType} */ (n.content).type) : null\n }\n\n _copy () {\n return new YXmlText()\n }\n\n /**\n * Makes a copy of this data type that can be included somewhere else.\n *\n * Note that the content is only readable _after_ it has been included somewhere in the Ydoc.\n *\n * @return {YXmlText}\n */\n clone () {\n const text = new YXmlText();\n text.applyDelta(this.toDelta());\n return text\n }\n\n /**\n * Creates a Dom Element that mirrors this YXmlText.\n *\n * @param {Document} [_document=document] The document object (you must define\n * this when calling this method in\n * nodejs)\n * @param {Object<string, any>} [hooks] Optional property to customize how hooks\n * are presented in the DOM\n * @param {any} [binding] You should not set this property. This is\n * used if DomBinding wants to create a\n * association to the created DOM type.\n * @return {Text} The {@link https://developer.mozilla.org/en-US/docs/Web/API/Element|Dom Element}\n *\n * @public\n */\n toDOM (_document = document, hooks, binding) {\n const dom = _document.createTextNode(this.toString());\n if (binding !== undefined) {\n binding._createAssociation(dom, this);\n }\n return dom\n }\n\n toString () {\n // @ts-ignore\n return this.toDelta().map(delta => {\n const nestedNodes = [];\n for (const nodeName in delta.attributes) {\n const attrs = [];\n for (const key in delta.attributes[nodeName]) {\n attrs.push({ key, value: delta.attributes[nodeName][key] });\n }\n // sort attributes to get a unique order\n attrs.sort((a, b) => a.key < b.key ? -1 : 1);\n nestedNodes.push({ nodeName, attrs });\n }\n // sort node order to get a unique order\n nestedNodes.sort((a, b) => a.nodeName < b.nodeName ? -1 : 1);\n // now convert to dom string\n let str = '';\n for (let i = 0; i < nestedNodes.length; i++) {\n const node = nestedNodes[i];\n str += `<${node.nodeName}`;\n for (let j = 0; j < node.attrs.length; j++) {\n const attr = node.attrs[j];\n str += ` ${attr.key}=\"${attr.value}\"`;\n }\n str += '>';\n }\n str += delta.insert;\n for (let i = nestedNodes.length - 1; i >= 0; i--) {\n str += `</${nestedNodes[i].nodeName}>`;\n }\n return str\n }).join('')\n }\n\n /**\n * @return {string}\n */\n toJSON () {\n return this.toString()\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n */\n _write (encoder) {\n encoder.writeTypeRef(YXmlTextRefID);\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {YXmlText}\n *\n * @private\n * @function\n */\nconst readYXmlText = decoder => new YXmlText();\n\nclass AbstractStruct {\n /**\n * @param {ID} id\n * @param {number} length\n */\n constructor (id, length) {\n this.id = id;\n this.length = length;\n }\n\n /**\n * @type {boolean}\n */\n get deleted () {\n throw error.methodUnimplemented()\n }\n\n /**\n * Merge this struct with the item to the right.\n * This method is already assuming that `this.id.clock + this.length === this.id.clock`.\n * Also this method does *not* remove right from StructStore!\n * @param {AbstractStruct} right\n * @return {boolean} whether this merged with right\n */\n mergeWith (right) {\n return false\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder The encoder to write data to.\n * @param {number} offset\n * @param {number} encodingRef\n */\n write (encoder, offset, encodingRef) {\n throw error.methodUnimplemented()\n }\n\n /**\n * @param {Transaction} transaction\n * @param {number} offset\n */\n integrate (transaction, offset) {\n throw error.methodUnimplemented()\n }\n}\n\nconst structGCRefNumber = 0;\n\n/**\n * @private\n */\nclass GC extends AbstractStruct {\n get deleted () {\n return true\n }\n\n delete () {}\n\n /**\n * @param {GC} right\n * @return {boolean}\n */\n mergeWith (right) {\n if (this.constructor !== right.constructor) {\n return false\n }\n this.length += right.length;\n return true\n }\n\n /**\n * @param {Transaction} transaction\n * @param {number} offset\n */\n integrate (transaction, offset) {\n if (offset > 0) {\n this.id.clock += offset;\n this.length -= offset;\n }\n addStruct(transaction.doc.store, this);\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n encoder.writeInfo(structGCRefNumber);\n encoder.writeLen(this.length - offset);\n }\n\n /**\n * @param {Transaction} transaction\n * @param {StructStore} store\n * @return {null | number}\n */\n getMissing (transaction, store) {\n return null\n }\n}\n\nclass ContentBinary {\n /**\n * @param {Uint8Array} content\n */\n constructor (content) {\n this.content = content;\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return 1\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return [this.content]\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return true\n }\n\n /**\n * @return {ContentBinary}\n */\n copy () {\n return new ContentBinary(this.content)\n }\n\n /**\n * @param {number} offset\n * @return {ContentBinary}\n */\n splice (offset) {\n throw error.methodUnimplemented()\n }\n\n /**\n * @param {ContentBinary} right\n * @return {boolean}\n */\n mergeWith (right) {\n return false\n }\n\n /**\n * @param {Transaction} transaction\n * @param {Item} item\n */\n integrate (transaction, item) {}\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {}\n /**\n * @param {StructStore} store\n */\n gc (store) {}\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n encoder.writeBuf(this.content);\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 3\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2 } decoder\n * @return {ContentBinary}\n */\nconst readContentBinary = decoder => new ContentBinary(decoder.readBuf());\n\nclass ContentDeleted {\n /**\n * @param {number} len\n */\n constructor (len) {\n this.len = len;\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return this.len\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return []\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return false\n }\n\n /**\n * @return {ContentDeleted}\n */\n copy () {\n return new ContentDeleted(this.len)\n }\n\n /**\n * @param {number} offset\n * @return {ContentDeleted}\n */\n splice (offset) {\n const right = new ContentDeleted(this.len - offset);\n this.len = offset;\n return right\n }\n\n /**\n * @param {ContentDeleted} right\n * @return {boolean}\n */\n mergeWith (right) {\n this.len += right.len;\n return true\n }\n\n /**\n * @param {Transaction} transaction\n * @param {Item} item\n */\n integrate (transaction, item) {\n addToDeleteSet(transaction.deleteSet, item.id.client, item.id.clock, this.len);\n item.markDeleted();\n }\n\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {}\n /**\n * @param {StructStore} store\n */\n gc (store) {}\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n encoder.writeLen(this.len - offset);\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 1\n }\n}\n\n/**\n * @private\n *\n * @param {UpdateDecoderV1 | UpdateDecoderV2 } decoder\n * @return {ContentDeleted}\n */\nconst readContentDeleted = decoder => new ContentDeleted(decoder.readLen());\n\n/**\n * @param {string} guid\n * @param {Object<string, any>} opts\n */\nconst createDocFromOpts = (guid, opts) => new Doc({ guid, ...opts, shouldLoad: opts.shouldLoad || opts.autoLoad || false });\n\n/**\n * @private\n */\nclass ContentDoc {\n /**\n * @param {Doc} doc\n */\n constructor (doc) {\n if (doc._item) {\n console.error('This document was already integrated as a sub-document. You should create a second instance instead with the same guid.');\n }\n /**\n * @type {Doc}\n */\n this.doc = doc;\n /**\n * @type {any}\n */\n const opts = {};\n this.opts = opts;\n if (!doc.gc) {\n opts.gc = false;\n }\n if (doc.autoLoad) {\n opts.autoLoad = true;\n }\n if (doc.meta !== null) {\n opts.meta = doc.meta;\n }\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return 1\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return [this.doc]\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return true\n }\n\n /**\n * @return {ContentDoc}\n */\n copy () {\n return new ContentDoc(createDocFromOpts(this.doc.guid, this.opts))\n }\n\n /**\n * @param {number} offset\n * @return {ContentDoc}\n */\n splice (offset) {\n throw error.methodUnimplemented()\n }\n\n /**\n * @param {ContentDoc} right\n * @return {boolean}\n */\n mergeWith (right) {\n return false\n }\n\n /**\n * @param {Transaction} transaction\n * @param {Item} item\n */\n integrate (transaction, item) {\n // this needs to be reflected in doc.destroy as well\n this.doc._item = item;\n transaction.subdocsAdded.add(this.doc);\n if (this.doc.shouldLoad) {\n transaction.subdocsLoaded.add(this.doc);\n }\n }\n\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {\n if (transaction.subdocsAdded.has(this.doc)) {\n transaction.subdocsAdded.delete(this.doc);\n } else {\n transaction.subdocsRemoved.add(this.doc);\n }\n }\n\n /**\n * @param {StructStore} store\n */\n gc (store) { }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n encoder.writeString(this.doc.guid);\n encoder.writeAny(this.opts);\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 9\n }\n}\n\n/**\n * @private\n *\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {ContentDoc}\n */\nconst readContentDoc = decoder => new ContentDoc(createDocFromOpts(decoder.readString(), decoder.readAny()));\n\n/**\n * @private\n */\nclass ContentEmbed {\n /**\n * @param {Object} embed\n */\n constructor (embed) {\n this.embed = embed;\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return 1\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return [this.embed]\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return true\n }\n\n /**\n * @return {ContentEmbed}\n */\n copy () {\n return new ContentEmbed(this.embed)\n }\n\n /**\n * @param {number} offset\n * @return {ContentEmbed}\n */\n splice (offset) {\n throw error.methodUnimplemented()\n }\n\n /**\n * @param {ContentEmbed} right\n * @return {boolean}\n */\n mergeWith (right) {\n return false\n }\n\n /**\n * @param {Transaction} transaction\n * @param {Item} item\n */\n integrate (transaction, item) {}\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {}\n /**\n * @param {StructStore} store\n */\n gc (store) {}\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n encoder.writeJSON(this.embed);\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 5\n }\n}\n\n/**\n * @private\n *\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {ContentEmbed}\n */\nconst readContentEmbed = decoder => new ContentEmbed(decoder.readJSON());\n\n/**\n * @private\n */\nclass ContentFormat {\n /**\n * @param {string} key\n * @param {Object} value\n */\n constructor (key, value) {\n this.key = key;\n this.value = value;\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return 1\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return []\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return false\n }\n\n /**\n * @return {ContentFormat}\n */\n copy () {\n return new ContentFormat(this.key, this.value)\n }\n\n /**\n * @param {number} _offset\n * @return {ContentFormat}\n */\n splice (_offset) {\n throw error.methodUnimplemented()\n }\n\n /**\n * @param {ContentFormat} _right\n * @return {boolean}\n */\n mergeWith (_right) {\n return false\n }\n\n /**\n * @param {Transaction} _transaction\n * @param {Item} item\n */\n integrate (_transaction, item) {\n // @todo searchmarker are currently unsupported for rich text documents\n const p = /** @type {YText} */ (item.parent);\n p._searchMarker = null;\n p._hasFormatting = true;\n }\n\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {}\n /**\n * @param {StructStore} store\n */\n gc (store) {}\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n encoder.writeKey(this.key);\n encoder.writeJSON(this.value);\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 6\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {ContentFormat}\n */\nconst readContentFormat = decoder => new ContentFormat(decoder.readKey(), decoder.readJSON());\n\n/**\n * @private\n */\nclass ContentJSON {\n /**\n * @param {Array<any>} arr\n */\n constructor (arr) {\n /**\n * @type {Array<any>}\n */\n this.arr = arr;\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return this.arr.length\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return this.arr\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return true\n }\n\n /**\n * @return {ContentJSON}\n */\n copy () {\n return new ContentJSON(this.arr)\n }\n\n /**\n * @param {number} offset\n * @return {ContentJSON}\n */\n splice (offset) {\n const right = new ContentJSON(this.arr.slice(offset));\n this.arr = this.arr.slice(0, offset);\n return right\n }\n\n /**\n * @param {ContentJSON} right\n * @return {boolean}\n */\n mergeWith (right) {\n this.arr = this.arr.concat(right.arr);\n return true\n }\n\n /**\n * @param {Transaction} transaction\n * @param {Item} item\n */\n integrate (transaction, item) {}\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {}\n /**\n * @param {StructStore} store\n */\n gc (store) {}\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n const len = this.arr.length;\n encoder.writeLen(len - offset);\n for (let i = offset; i < len; i++) {\n const c = this.arr[i];\n encoder.writeString(c === undefined ? 'undefined' : JSON.stringify(c));\n }\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 2\n }\n}\n\n/**\n * @private\n *\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {ContentJSON}\n */\nconst readContentJSON = decoder => {\n const len = decoder.readLen();\n const cs = [];\n for (let i = 0; i < len; i++) {\n const c = decoder.readString();\n if (c === 'undefined') {\n cs.push(undefined);\n } else {\n cs.push(JSON.parse(c));\n }\n }\n return new ContentJSON(cs)\n};\n\nconst isDevMode = env.getVariable('node_env') === 'development';\n\nclass ContentAny {\n /**\n * @param {Array<any>} arr\n */\n constructor (arr) {\n /**\n * @type {Array<any>}\n */\n this.arr = arr;\n isDevMode && object.deepFreeze(arr);\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return this.arr.length\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return this.arr\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return true\n }\n\n /**\n * @return {ContentAny}\n */\n copy () {\n return new ContentAny(this.arr)\n }\n\n /**\n * @param {number} offset\n * @return {ContentAny}\n */\n splice (offset) {\n const right = new ContentAny(this.arr.slice(offset));\n this.arr = this.arr.slice(0, offset);\n return right\n }\n\n /**\n * @param {ContentAny} right\n * @return {boolean}\n */\n mergeWith (right) {\n this.arr = this.arr.concat(right.arr);\n return true\n }\n\n /**\n * @param {Transaction} transaction\n * @param {Item} item\n */\n integrate (transaction, item) {}\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {}\n /**\n * @param {StructStore} store\n */\n gc (store) {}\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n const len = this.arr.length;\n encoder.writeLen(len - offset);\n for (let i = offset; i < len; i++) {\n const c = this.arr[i];\n encoder.writeAny(c);\n }\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 8\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {ContentAny}\n */\nconst readContentAny = decoder => {\n const len = decoder.readLen();\n const cs = [];\n for (let i = 0; i < len; i++) {\n cs.push(decoder.readAny());\n }\n return new ContentAny(cs)\n};\n\n/**\n * @private\n */\nclass ContentString {\n /**\n * @param {string} str\n */\n constructor (str) {\n /**\n * @type {string}\n */\n this.str = str;\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return this.str.length\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return this.str.split('')\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return true\n }\n\n /**\n * @return {ContentString}\n */\n copy () {\n return new ContentString(this.str)\n }\n\n /**\n * @param {number} offset\n * @return {ContentString}\n */\n splice (offset) {\n const right = new ContentString(this.str.slice(offset));\n this.str = this.str.slice(0, offset);\n\n // Prevent encoding invalid documents because of splitting of surrogate pairs: https://github.com/yjs/yjs/issues/248\n const firstCharCode = this.str.charCodeAt(offset - 1);\n if (firstCharCode >= 0xD800 && firstCharCode <= 0xDBFF) {\n // Last character of the left split is the start of a surrogate utf16/ucs2 pair.\n // We don't support splitting of surrogate pairs because this may lead to invalid documents.\n // Replace the invalid character with a unicode replacement character (� / U+FFFD)\n this.str = this.str.slice(0, offset - 1) + '�';\n // replace right as well\n right.str = '�' + right.str.slice(1);\n }\n return right\n }\n\n /**\n * @param {ContentString} right\n * @return {boolean}\n */\n mergeWith (right) {\n this.str += right.str;\n return true\n }\n\n /**\n * @param {Transaction} transaction\n * @param {Item} item\n */\n integrate (transaction, item) {}\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {}\n /**\n * @param {StructStore} store\n */\n gc (store) {}\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n encoder.writeString(offset === 0 ? this.str : this.str.slice(offset));\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 4\n }\n}\n\n/**\n * @private\n *\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {ContentString}\n */\nconst readContentString = decoder => new ContentString(decoder.readString());\n\n/**\n * @type {Array<function(UpdateDecoderV1 | UpdateDecoderV2):AbstractType<any>>}\n * @private\n */\nconst typeRefs = [\n readYArray,\n readYMap,\n readYText,\n readYXmlElement,\n readYXmlFragment,\n readYXmlHook,\n readYXmlText\n];\n\nconst YArrayRefID = 0;\nconst YMapRefID = 1;\nconst YTextRefID = 2;\nconst YXmlElementRefID = 3;\nconst YXmlFragmentRefID = 4;\nconst YXmlHookRefID = 5;\nconst YXmlTextRefID = 6;\n\n/**\n * @private\n */\nclass ContentType {\n /**\n * @param {AbstractType<any>} type\n */\n constructor (type) {\n /**\n * @type {AbstractType<any>}\n */\n this.type = type;\n }\n\n /**\n * @return {number}\n */\n getLength () {\n return 1\n }\n\n /**\n * @return {Array<any>}\n */\n getContent () {\n return [this.type]\n }\n\n /**\n * @return {boolean}\n */\n isCountable () {\n return true\n }\n\n /**\n * @return {ContentType}\n */\n copy () {\n return new ContentType(this.type._copy())\n }\n\n /**\n * @param {number} offset\n * @return {ContentType}\n */\n splice (offset) {\n throw error.methodUnimplemented()\n }\n\n /**\n * @param {ContentType} right\n * @return {boolean}\n */\n mergeWith (right) {\n return false\n }\n\n /**\n * @param {Transaction} transaction\n * @param {Item} item\n */\n integrate (transaction, item) {\n this.type._integrate(transaction.doc, item);\n }\n\n /**\n * @param {Transaction} transaction\n */\n delete (transaction) {\n let item = this.type._start;\n while (item !== null) {\n if (!item.deleted) {\n item.delete(transaction);\n } else if (item.id.clock < (transaction.beforeState.get(item.id.client) || 0)) {\n // This will be gc'd later and we want to merge it if possible\n // We try to merge all deleted items after each transaction,\n // but we have no knowledge about that this needs to be merged\n // since it is not in transaction.ds. Hence we add it to transaction._mergeStructs\n transaction._mergeStructs.push(item);\n }\n item = item.right;\n }\n this.type._map.forEach(item => {\n if (!item.deleted) {\n item.delete(transaction);\n } else if (item.id.clock < (transaction.beforeState.get(item.id.client) || 0)) {\n // same as above\n transaction._mergeStructs.push(item);\n }\n });\n transaction.changed.delete(this.type);\n }\n\n /**\n * @param {StructStore} store\n */\n gc (store) {\n let item = this.type._start;\n while (item !== null) {\n item.gc(store, true);\n item = item.right;\n }\n this.type._start = null;\n this.type._map.forEach(/** @param {Item | null} item */ (item) => {\n while (item !== null) {\n item.gc(store, true);\n item = item.left;\n }\n });\n this.type._map = new Map();\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n this.type._write(encoder);\n }\n\n /**\n * @return {number}\n */\n getRef () {\n return 7\n }\n}\n\n/**\n * @private\n *\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @return {ContentType}\n */\nconst readContentType = decoder => new ContentType(typeRefs[decoder.readTypeRef()](decoder));\n\n/**\n * @todo This should return several items\n *\n * @param {StructStore} store\n * @param {ID} id\n * @return {{item:Item, diff:number}}\n */\nconst followRedone = (store, id) => {\n /**\n * @type {ID|null}\n */\n let nextID = id;\n let diff = 0;\n let item;\n do {\n if (diff > 0) {\n nextID = createID(nextID.client, nextID.clock + diff);\n }\n item = getItem(store, nextID);\n diff = nextID.clock - item.id.clock;\n nextID = item.redone;\n } while (nextID !== null && item instanceof Item)\n return {\n item, diff\n }\n};\n\n/**\n * Make sure that neither item nor any of its parents is ever deleted.\n *\n * This property does not persist when storing it into a database or when\n * sending it to other peers\n *\n * @param {Item|null} item\n * @param {boolean} keep\n */\nconst keepItem = (item, keep) => {\n while (item !== null && item.keep !== keep) {\n item.keep = keep;\n item = /** @type {AbstractType<any>} */ (item.parent)._item;\n }\n};\n\n/**\n * Split leftItem into two items\n * @param {Transaction} transaction\n * @param {Item} leftItem\n * @param {number} diff\n * @return {Item}\n *\n * @function\n * @private\n */\nconst splitItem = (transaction, leftItem, diff) => {\n // create rightItem\n const { client, clock } = leftItem.id;\n const rightItem = new Item(\n createID(client, clock + diff),\n leftItem,\n createID(client, clock + diff - 1),\n leftItem.right,\n leftItem.rightOrigin,\n leftItem.parent,\n leftItem.parentSub,\n leftItem.content.splice(diff)\n );\n if (leftItem.deleted) {\n rightItem.markDeleted();\n }\n if (leftItem.keep) {\n rightItem.keep = true;\n }\n if (leftItem.redone !== null) {\n rightItem.redone = createID(leftItem.redone.client, leftItem.redone.clock + diff);\n }\n // update left (do not set leftItem.rightOrigin as it will lead to problems when syncing)\n leftItem.right = rightItem;\n // update right\n if (rightItem.right !== null) {\n rightItem.right.left = rightItem;\n }\n // right is more specific.\n transaction._mergeStructs.push(rightItem);\n // update parent._map\n if (rightItem.parentSub !== null && rightItem.right === null) {\n /** @type {AbstractType<any>} */ (rightItem.parent)._map.set(rightItem.parentSub, rightItem);\n }\n leftItem.length = diff;\n return rightItem\n};\n\n/**\n * @param {Array<StackItem>} stack\n * @param {ID} id\n */\nconst isDeletedByUndoStack = (stack, id) => array.some(stack, /** @param {StackItem} s */ s => isDeleted(s.deletions, id));\n\n/**\n * Redoes the effect of this operation.\n *\n * @param {Transaction} transaction The Yjs instance.\n * @param {Item} item\n * @param {Set<Item>} redoitems\n * @param {DeleteSet} itemsToDelete\n * @param {boolean} ignoreRemoteMapChanges\n * @param {import('../utils/UndoManager.js').UndoManager} um\n *\n * @return {Item|null}\n *\n * @private\n */\nconst redoItem = (transaction, item, redoitems, itemsToDelete, ignoreRemoteMapChanges, um) => {\n const doc = transaction.doc;\n const store = doc.store;\n const ownClientID = doc.clientID;\n const redone = item.redone;\n if (redone !== null) {\n return getItemCleanStart(transaction, redone)\n }\n let parentItem = /** @type {AbstractType<any>} */ (item.parent)._item;\n /**\n * @type {Item|null}\n */\n let left = null;\n /**\n * @type {Item|null}\n */\n let right;\n // make sure that parent is redone\n if (parentItem !== null && parentItem.deleted === true) {\n // try to undo parent if it will be undone anyway\n if (parentItem.redone === null && (!redoitems.has(parentItem) || redoItem(transaction, parentItem, redoitems, itemsToDelete, ignoreRemoteMapChanges, um) === null)) {\n return null\n }\n while (parentItem.redone !== null) {\n parentItem = getItemCleanStart(transaction, parentItem.redone);\n }\n }\n const parentType = parentItem === null ? /** @type {AbstractType<any>} */ (item.parent) : /** @type {ContentType} */ (parentItem.content).type;\n\n if (item.parentSub === null) {\n // Is an array item. Insert at the old position\n left = item.left;\n right = item;\n // find next cloned_redo items\n while (left !== null) {\n /**\n * @type {Item|null}\n */\n let leftTrace = left;\n // trace redone until parent matches\n while (leftTrace !== null && /** @type {AbstractType<any>} */ (leftTrace.parent)._item !== parentItem) {\n leftTrace = leftTrace.redone === null ? null : getItemCleanStart(transaction, leftTrace.redone);\n }\n if (leftTrace !== null && /** @type {AbstractType<any>} */ (leftTrace.parent)._item === parentItem) {\n left = leftTrace;\n break\n }\n left = left.left;\n }\n while (right !== null) {\n /**\n * @type {Item|null}\n */\n let rightTrace = right;\n // trace redone until parent matches\n while (rightTrace !== null && /** @type {AbstractType<any>} */ (rightTrace.parent)._item !== parentItem) {\n rightTrace = rightTrace.redone === null ? null : getItemCleanStart(transaction, rightTrace.redone);\n }\n if (rightTrace !== null && /** @type {AbstractType<any>} */ (rightTrace.parent)._item === parentItem) {\n right = rightTrace;\n break\n }\n right = right.right;\n }\n } else {\n right = null;\n if (item.right && !ignoreRemoteMapChanges) {\n left = item;\n // Iterate right while right is in itemsToDelete\n // If it is intended to delete right while item is redone, we can expect that item should replace right.\n while (left !== null && left.right !== null && (left.right.redone || isDeleted(itemsToDelete, left.right.id) || isDeletedByUndoStack(um.undoStack, left.right.id) || isDeletedByUndoStack(um.redoStack, left.right.id))) {\n left = left.right;\n // follow redone\n while (left.redone) left = getItemCleanStart(transaction, left.redone);\n }\n if (left && left.right !== null) {\n // It is not possible to redo this item because it conflicts with a\n // change from another client\n return null\n }\n } else {\n left = parentType._map.get(item.parentSub) || null;\n }\n }\n const nextClock = getState(store, ownClientID);\n const nextId = createID(ownClientID, nextClock);\n const redoneItem = new Item(\n nextId,\n left, left && left.lastId,\n right, right && right.id,\n parentType,\n item.parentSub,\n item.content.copy()\n );\n item.redone = nextId;\n keepItem(redoneItem, true);\n redoneItem.integrate(transaction, 0);\n return redoneItem\n};\n\n/**\n * Abstract class that represents any content.\n */\nclass Item extends AbstractStruct {\n /**\n * @param {ID} id\n * @param {Item | null} left\n * @param {ID | null} origin\n * @param {Item | null} right\n * @param {ID | null} rightOrigin\n * @param {AbstractType<any>|ID|null} parent Is a type if integrated, is null if it is possible to copy parent from left or right, is ID before integration to search for it.\n * @param {string | null} parentSub\n * @param {AbstractContent} content\n */\n constructor (id, left, origin, right, rightOrigin, parent, parentSub, content) {\n super(id, content.getLength());\n /**\n * The item that was originally to the left of this item.\n * @type {ID | null}\n */\n this.origin = origin;\n /**\n * The item that is currently to the left of this item.\n * @type {Item | null}\n */\n this.left = left;\n /**\n * The item that is currently to the right of this item.\n * @type {Item | null}\n */\n this.right = right;\n /**\n * The item that was originally to the right of this item.\n * @type {ID | null}\n */\n this.rightOrigin = rightOrigin;\n /**\n * @type {AbstractType<any>|ID|null}\n */\n this.parent = parent;\n /**\n * If the parent refers to this item with some kind of key (e.g. YMap, the\n * key is specified here. The key is then used to refer to the list in which\n * to insert this item. If `parentSub = null` type._start is the list in\n * which to insert to. Otherwise it is `parent._map`.\n * @type {String | null}\n */\n this.parentSub = parentSub;\n /**\n * If this type's effect is redone this type refers to the type that undid\n * this operation.\n * @type {ID | null}\n */\n this.redone = null;\n /**\n * @type {AbstractContent}\n */\n this.content = content;\n /**\n * bit1: keep\n * bit2: countable\n * bit3: deleted\n * bit4: mark - mark node as fast-search-marker\n * @type {number} byte\n */\n this.info = this.content.isCountable() ? binary.BIT2 : 0;\n }\n\n /**\n * This is used to mark the item as an indexed fast-search marker\n *\n * @type {boolean}\n */\n set marker (isMarked) {\n if (((this.info & binary.BIT4) > 0) !== isMarked) {\n this.info ^= binary.BIT4;\n }\n }\n\n get marker () {\n return (this.info & binary.BIT4) > 0\n }\n\n /**\n * If true, do not garbage collect this Item.\n */\n get keep () {\n return (this.info & binary.BIT1) > 0\n }\n\n set keep (doKeep) {\n if (this.keep !== doKeep) {\n this.info ^= binary.BIT1;\n }\n }\n\n get countable () {\n return (this.info & binary.BIT2) > 0\n }\n\n /**\n * Whether this item was deleted or not.\n * @type {Boolean}\n */\n get deleted () {\n return (this.info & binary.BIT3) > 0\n }\n\n set deleted (doDelete) {\n if (this.deleted !== doDelete) {\n this.info ^= binary.BIT3;\n }\n }\n\n markDeleted () {\n this.info |= binary.BIT3;\n }\n\n /**\n * Return the creator clientID of the missing op or define missing items and return null.\n *\n * @param {Transaction} transaction\n * @param {StructStore} store\n * @return {null | number}\n */\n getMissing (transaction, store) {\n if (this.origin && this.origin.client !== this.id.client && this.origin.clock >= getState(store, this.origin.client)) {\n return this.origin.client\n }\n if (this.rightOrigin && this.rightOrigin.client !== this.id.client && this.rightOrigin.clock >= getState(store, this.rightOrigin.client)) {\n return this.rightOrigin.client\n }\n if (this.parent && this.parent.constructor === ID && this.id.client !== this.parent.client && this.parent.clock >= getState(store, this.parent.client)) {\n return this.parent.client\n }\n\n // We have all missing ids, now find the items\n\n if (this.origin) {\n this.left = getItemCleanEnd(transaction, store, this.origin);\n this.origin = this.left.lastId;\n }\n if (this.rightOrigin) {\n this.right = getItemCleanStart(transaction, this.rightOrigin);\n this.rightOrigin = this.right.id;\n }\n if ((this.left && this.left.constructor === GC) || (this.right && this.right.constructor === GC)) {\n this.parent = null;\n } else if (!this.parent) {\n // only set parent if this shouldn't be garbage collected\n if (this.left && this.left.constructor === Item) {\n this.parent = this.left.parent;\n this.parentSub = this.left.parentSub;\n } else if (this.right && this.right.constructor === Item) {\n this.parent = this.right.parent;\n this.parentSub = this.right.parentSub;\n }\n } else if (this.parent.constructor === ID) {\n const parentItem = getItem(store, this.parent);\n if (parentItem.constructor === GC) {\n this.parent = null;\n } else {\n this.parent = /** @type {ContentType} */ (parentItem.content).type;\n }\n }\n return null\n }\n\n /**\n * @param {Transaction} transaction\n * @param {number} offset\n */\n integrate (transaction, offset) {\n if (offset > 0) {\n this.id.clock += offset;\n this.left = getItemCleanEnd(transaction, transaction.doc.store, createID(this.id.client, this.id.clock - 1));\n this.origin = this.left.lastId;\n this.content = this.content.splice(offset);\n this.length -= offset;\n }\n\n if (this.parent) {\n if ((!this.left && (!this.right || this.right.left !== null)) || (this.left && this.left.right !== this.right)) {\n /**\n * @type {Item|null}\n */\n let left = this.left;\n\n /**\n * @type {Item|null}\n */\n let o;\n // set o to the first conflicting item\n if (left !== null) {\n o = left.right;\n } else if (this.parentSub !== null) {\n o = /** @type {AbstractType<any>} */ (this.parent)._map.get(this.parentSub) || null;\n while (o !== null && o.left !== null) {\n o = o.left;\n }\n } else {\n o = /** @type {AbstractType<any>} */ (this.parent)._start;\n }\n // TODO: use something like DeleteSet here (a tree implementation would be best)\n // @todo use global set definitions\n /**\n * @type {Set<Item>}\n */\n const conflictingItems = new Set();\n /**\n * @type {Set<Item>}\n */\n const itemsBeforeOrigin = new Set();\n // Let c in conflictingItems, b in itemsBeforeOrigin\n // ***{origin}bbbb{this}{c,b}{c,b}{o}***\n // Note that conflictingItems is a subset of itemsBeforeOrigin\n while (o !== null && o !== this.right) {\n itemsBeforeOrigin.add(o);\n conflictingItems.add(o);\n if (compareIDs(this.origin, o.origin)) {\n // case 1\n if (o.id.client < this.id.client) {\n left = o;\n conflictingItems.clear();\n } else if (compareIDs(this.rightOrigin, o.rightOrigin)) {\n // this and o are conflicting and point to the same integration points. The id decides which item comes first.\n // Since this is to the left of o, we can break here\n break\n } // else, o might be integrated before an item that this conflicts with. If so, we will find it in the next iterations\n } else if (o.origin !== null && itemsBeforeOrigin.has(getItem(transaction.doc.store, o.origin))) { // use getItem instead of getItemCleanEnd because we don't want / need to split items.\n // case 2\n if (!conflictingItems.has(getItem(transaction.doc.store, o.origin))) {\n left = o;\n conflictingItems.clear();\n }\n } else {\n break\n }\n o = o.right;\n }\n this.left = left;\n }\n // reconnect left/right + update parent map/start if necessary\n if (this.left !== null) {\n const right = this.left.right;\n this.right = right;\n this.left.right = this;\n } else {\n let r;\n if (this.parentSub !== null) {\n r = /** @type {AbstractType<any>} */ (this.parent)._map.get(this.parentSub) || null;\n while (r !== null && r.left !== null) {\n r = r.left;\n }\n } else {\n r = /** @type {AbstractType<any>} */ (this.parent)._start\n ;/** @type {AbstractType<any>} */ (this.parent)._start = this;\n }\n this.right = r;\n }\n if (this.right !== null) {\n this.right.left = this;\n } else if (this.parentSub !== null) {\n // set as current parent value if right === null and this is parentSub\n /** @type {AbstractType<any>} */ (this.parent)._map.set(this.parentSub, this);\n if (this.left !== null) {\n // this is the current attribute value of parent. delete right\n this.left.delete(transaction);\n }\n }\n // adjust length of parent\n if (this.parentSub === null && this.countable && !this.deleted) {\n /** @type {AbstractType<any>} */ (this.parent)._length += this.length;\n }\n addStruct(transaction.doc.store, this);\n this.content.integrate(transaction, this);\n // add parent to transaction.changed\n addChangedTypeToTransaction(transaction, /** @type {AbstractType<any>} */ (this.parent), this.parentSub);\n if ((/** @type {AbstractType<any>} */ (this.parent)._item !== null && /** @type {AbstractType<any>} */ (this.parent)._item.deleted) || (this.parentSub !== null && this.right !== null)) {\n // delete if parent is deleted or if this is not the current attribute value of parent\n this.delete(transaction);\n }\n } else {\n // parent is not defined. Integrate GC struct instead\n new GC(this.id, this.length).integrate(transaction, 0);\n }\n }\n\n /**\n * Returns the next non-deleted item\n */\n get next () {\n let n = this.right;\n while (n !== null && n.deleted) {\n n = n.right;\n }\n return n\n }\n\n /**\n * Returns the previous non-deleted item\n */\n get prev () {\n let n = this.left;\n while (n !== null && n.deleted) {\n n = n.left;\n }\n return n\n }\n\n /**\n * Computes the last content address of this Item.\n */\n get lastId () {\n // allocating ids is pretty costly because of the amount of ids created, so we try to reuse whenever possible\n return this.length === 1 ? this.id : createID(this.id.client, this.id.clock + this.length - 1)\n }\n\n /**\n * Try to merge two items\n *\n * @param {Item} right\n * @return {boolean}\n */\n mergeWith (right) {\n if (\n this.constructor === right.constructor &&\n compareIDs(right.origin, this.lastId) &&\n this.right === right &&\n compareIDs(this.rightOrigin, right.rightOrigin) &&\n this.id.client === right.id.client &&\n this.id.clock + this.length === right.id.clock &&\n this.deleted === right.deleted &&\n this.redone === null &&\n right.redone === null &&\n this.content.constructor === right.content.constructor &&\n this.content.mergeWith(right.content)\n ) {\n const searchMarker = /** @type {AbstractType<any>} */ (this.parent)._searchMarker;\n if (searchMarker) {\n searchMarker.forEach(marker => {\n if (marker.p === right) {\n // right is going to be \"forgotten\" so we need to update the marker\n marker.p = this;\n // adjust marker index\n if (!this.deleted && this.countable) {\n marker.index -= this.length;\n }\n }\n });\n }\n if (right.keep) {\n this.keep = true;\n }\n this.right = right.right;\n if (this.right !== null) {\n this.right.left = this;\n }\n this.length += right.length;\n return true\n }\n return false\n }\n\n /**\n * Mark this Item as deleted.\n *\n * @param {Transaction} transaction\n */\n delete (transaction) {\n if (!this.deleted) {\n const parent = /** @type {AbstractType<any>} */ (this.parent);\n // adjust the length of parent\n if (this.countable && this.parentSub === null) {\n parent._length -= this.length;\n }\n this.markDeleted();\n addToDeleteSet(transaction.deleteSet, this.id.client, this.id.clock, this.length);\n addChangedTypeToTransaction(transaction, parent, this.parentSub);\n this.content.delete(transaction);\n }\n }\n\n /**\n * @param {StructStore} store\n * @param {boolean} parentGCd\n */\n gc (store, parentGCd) {\n if (!this.deleted) {\n throw error.unexpectedCase()\n }\n this.content.gc(store);\n if (parentGCd) {\n replaceStruct(store, this, new GC(this.id, this.length));\n } else {\n this.content = new ContentDeleted(this.length);\n }\n }\n\n /**\n * Transform the properties of this type to binary and write it to an\n * BinaryEncoder.\n *\n * This is called when this Item is sent to a remote peer.\n *\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder The encoder to write data to.\n * @param {number} offset\n */\n write (encoder, offset) {\n const origin = offset > 0 ? createID(this.id.client, this.id.clock + offset - 1) : this.origin;\n const rightOrigin = this.rightOrigin;\n const parentSub = this.parentSub;\n const info = (this.content.getRef() & binary.BITS5) |\n (origin === null ? 0 : binary.BIT8) | // origin is defined\n (rightOrigin === null ? 0 : binary.BIT7) | // right origin is defined\n (parentSub === null ? 0 : binary.BIT6); // parentSub is non-null\n encoder.writeInfo(info);\n if (origin !== null) {\n encoder.writeLeftID(origin);\n }\n if (rightOrigin !== null) {\n encoder.writeRightID(rightOrigin);\n }\n if (origin === null && rightOrigin === null) {\n const parent = /** @type {AbstractType<any>} */ (this.parent);\n if (parent._item !== undefined) {\n const parentItem = parent._item;\n if (parentItem === null) {\n // parent type on y._map\n // find the correct key\n const ykey = findRootTypeKey(parent);\n encoder.writeParentInfo(true); // write parentYKey\n encoder.writeString(ykey);\n } else {\n encoder.writeParentInfo(false); // write parent id\n encoder.writeLeftID(parentItem.id);\n }\n } else if (parent.constructor === String) { // this edge case was added by differential updates\n encoder.writeParentInfo(true); // write parentYKey\n encoder.writeString(parent);\n } else if (parent.constructor === ID) {\n encoder.writeParentInfo(false); // write parent id\n encoder.writeLeftID(parent);\n } else {\n error.unexpectedCase();\n }\n if (parentSub !== null) {\n encoder.writeString(parentSub);\n }\n }\n this.content.write(encoder, offset);\n }\n}\n\n/**\n * @param {UpdateDecoderV1 | UpdateDecoderV2} decoder\n * @param {number} info\n */\nconst readItemContent = (decoder, info) => contentRefs[info & binary.BITS5](decoder);\n\n/**\n * A lookup map for reading Item content.\n *\n * @type {Array<function(UpdateDecoderV1 | UpdateDecoderV2):AbstractContent>}\n */\nconst contentRefs = [\n () => { error.unexpectedCase(); }, // GC is not ItemContent\n readContentDeleted, // 1\n readContentJSON, // 2\n readContentBinary, // 3\n readContentString, // 4\n readContentEmbed, // 5\n readContentFormat, // 6\n readContentType, // 7\n readContentAny, // 8\n readContentDoc, // 9\n () => { error.unexpectedCase(); } // 10 - Skip is not ItemContent\n];\n\nconst structSkipRefNumber = 10;\n\n/**\n * @private\n */\nclass Skip extends AbstractStruct {\n get deleted () {\n return true\n }\n\n delete () {}\n\n /**\n * @param {Skip} right\n * @return {boolean}\n */\n mergeWith (right) {\n if (this.constructor !== right.constructor) {\n return false\n }\n this.length += right.length;\n return true\n }\n\n /**\n * @param {Transaction} transaction\n * @param {number} offset\n */\n integrate (transaction, offset) {\n // skip structs cannot be integrated\n error.unexpectedCase();\n }\n\n /**\n * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder\n * @param {number} offset\n */\n write (encoder, offset) {\n encoder.writeInfo(structSkipRefNumber);\n // write as VarUint because Skips can't make use of predictable length-encoding\n encoding.writeVarUint(encoder.restEncoder, this.length - offset);\n }\n\n /**\n * @param {Transaction} transaction\n * @param {StructStore} store\n * @return {null | number}\n */\n getMissing (transaction, store) {\n return null\n }\n}\n\n/** eslint-env browser */\n\n\nconst glo = /** @type {any} */ (typeof globalThis !== 'undefined'\n ? globalThis\n : typeof window !== 'undefined'\n ? window\n // @ts-ignore\n : typeof global !== 'undefined' ? global : {});\n\nconst importIdentifier = '__ $YJS$ __';\n\nif (glo[importIdentifier] === true) {\n /**\n * Dear reader of this message. Please take this seriously.\n *\n * If you see this message, make sure that you only import one version of Yjs. In many cases,\n * your package manager installs two versions of Yjs that are used by different packages within your project.\n * Another reason for this message is that some parts of your project use the commonjs version of Yjs\n * and others use the EcmaScript version of Yjs.\n *\n * This often leads to issues that are hard to debug. We often need to perform constructor checks,\n * e.g. `struct instanceof GC`. If you imported different versions of Yjs, it is impossible for us to\n * do the constructor checks anymore - which might break the CRDT algorithm.\n *\n * https://github.com/yjs/yjs/issues/438\n */\n console.error('Yjs was already imported. This breaks constructor checks and will lead to issues! - https://github.com/yjs/yjs/issues/438');\n}\nglo[importIdentifier] = true;\n\nexport { AbsolutePosition, AbstractConnector, AbstractStruct, AbstractType, YArray as Array, ContentAny, ContentBinary, ContentDeleted, ContentDoc, ContentEmbed, ContentFormat, ContentJSON, ContentString, ContentType, Doc, GC, ID, Item, YMap as Map, PermanentUserData, RelativePosition, Skip, Snapshot, YText as Text, Transaction, UndoManager, UpdateDecoderV1, UpdateDecoderV2, UpdateEncoderV1, UpdateEncoderV2, YXmlElement as XmlElement, YXmlFragment as XmlFragment, YXmlHook as XmlHook, YXmlText as XmlText, YArrayEvent, YEvent, YMapEvent, YTextEvent, YXmlEvent, applyUpdate, applyUpdateV2, cleanupYTextFormatting, compareIDs, compareRelativePositions, convertUpdateFormatV1ToV2, convertUpdateFormatV2ToV1, createAbsolutePositionFromRelativePosition, createDeleteSet, createDeleteSetFromStructStore, createDocFromSnapshot, createID, createRelativePositionFromJSON, createRelativePositionFromTypeIndex, createSnapshot, decodeRelativePosition, decodeSnapshot, decodeSnapshotV2, decodeStateVector, decodeUpdate, decodeUpdateV2, diffUpdate, diffUpdateV2, emptySnapshot, encodeRelativePosition, encodeSnapshot, encodeSnapshotV2, encodeStateAsUpdate, encodeStateAsUpdateV2, encodeStateVector, encodeStateVectorFromUpdate, encodeStateVectorFromUpdateV2, equalDeleteSets, equalSnapshots, findIndexSS, findRootTypeKey, getItem, getItemCleanEnd, getItemCleanStart, getState, getTypeChildren, isDeleted, isParentOf, iterateDeletedStructs, logType, logUpdate, logUpdateV2, mergeDeleteSets, mergeUpdates, mergeUpdatesV2, obfuscateUpdate, obfuscateUpdateV2, parseUpdateMeta, parseUpdateMetaV2, readUpdate, readUpdateV2, relativePositionToJSON, snapshot, snapshotContainsUpdate, transact, tryGc, typeListToArraySnapshot, typeMapGetAllSnapshot, typeMapGetSnapshot };\n//# sourceMappingURL=yjs.mjs.map\n","/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set<function(any, any):any>} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map<string, Channel>}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map<number, number>} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server should only reply to requests, and not initiate them.\n * Therefore it is necessary that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Does not need to be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable<string>}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map<number, Object<string, any>>}\n */\n this.states = new Map()\n /**\n * @type {Map<number, MetaClientState>}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array<number>}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object<string,any>|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object<string,any>|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map<number,Object<string,any>>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array<number>} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array<number>} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","/**\n * @module provider/websocket\n */\n\n/* eslint-env browser */\n\nimport * as Y from 'yjs' // eslint-disable-line\nimport * as bc from 'lib0/broadcastchannel'\nimport * as time from 'lib0/time'\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport * as authProtocol from 'y-protocols/auth'\nimport * as awarenessProtocol from 'y-protocols/awareness'\nimport { ObservableV2 } from 'lib0/observable'\nimport * as math from 'lib0/math'\nimport * as url from 'lib0/url'\nimport * as env from 'lib0/environment'\n\nexport const messageSync = 0\nexport const messageQueryAwareness = 3\nexport const messageAwareness = 1\nexport const messageAuth = 2\n\n/**\n * encoder, decoder, provider, emitSynced, messageType\n * @type {Array<function(encoding.Encoder, decoding.Decoder, WebsocketProvider, boolean, number):void>}\n */\nconst messageHandlers = []\n\nmessageHandlers[messageSync] = (\n encoder,\n decoder,\n provider,\n emitSynced,\n _messageType\n) => {\n encoding.writeVarUint(encoder, messageSync)\n const syncMessageType = syncProtocol.readSyncMessage(\n decoder,\n encoder,\n provider.doc,\n provider\n )\n if (\n emitSynced && syncMessageType === syncProtocol.messageYjsSyncStep2 &&\n !provider.synced\n ) {\n provider.synced = true\n }\n}\n\nmessageHandlers[messageQueryAwareness] = (\n encoder,\n _decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys())\n )\n )\n}\n\nmessageHandlers[messageAwareness] = (\n _encoder,\n decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n awarenessProtocol.applyAwarenessUpdate(\n provider.awareness,\n decoding.readVarUint8Array(decoder),\n provider\n )\n}\n\nmessageHandlers[messageAuth] = (\n _encoder,\n decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n authProtocol.readAuthMessage(\n decoder,\n provider.doc,\n (_ydoc, reason) => permissionDeniedHandler(provider, reason)\n )\n}\n\n// @todo - this should depend on awareness.outdatedTime\nconst messageReconnectTimeout = 30000\n\n/**\n * @param {WebsocketProvider} provider\n * @param {string} reason\n */\nconst permissionDeniedHandler = (provider, reason) =>\n console.warn(`Permission denied to access ${provider.url}.\\n${reason}`)\n\n/**\n * @param {WebsocketProvider} provider\n * @param {Uint8Array} buf\n * @param {boolean} emitSynced\n * @return {encoding.Encoder}\n */\nconst readMessage = (provider, buf, emitSynced) => {\n const decoder = decoding.createDecoder(buf)\n const encoder = encoding.createEncoder()\n const messageType = decoding.readVarUint(decoder)\n const messageHandler = provider.messageHandlers[messageType]\n if (/** @type {any} */ (messageHandler)) {\n messageHandler(encoder, decoder, provider, emitSynced, messageType)\n } else {\n console.error('Unable to compute message')\n }\n return encoder\n}\n\n/**\n * Outsource this function so that a new websocket connection is created immediately.\n * I suspect that the `ws.onclose` event is not always fired if there are network issues.\n *\n * @param {WebsocketProvider} provider\n * @param {WebSocket} ws\n * @param {CloseEvent | null} event\n */\nconst closeWebsocketConnection = (provider, ws, event) => {\n if (ws === provider.ws) {\n provider.emit('connection-close', [event, provider])\n provider.ws = null\n ws.close()\n provider.wsconnecting = false\n if (provider.wsconnected) {\n provider.wsconnected = false\n provider.synced = false\n // update awareness (all users except local left)\n awarenessProtocol.removeAwarenessStates(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys()).filter((client) =>\n client !== provider.doc.clientID\n ),\n provider\n )\n provider.emit('status', [{\n status: 'disconnected'\n }])\n } else {\n provider.wsUnsuccessfulReconnects++\n }\n // Start with no reconnect timeout and increase timeout by\n // using exponential backoff starting with 100ms\n setTimeout(\n setupWS,\n math.min(\n math.pow(2, provider.wsUnsuccessfulReconnects) * 100,\n provider.maxBackoffTime\n ),\n provider\n )\n }\n}\n\n/**\n * @param {WebsocketProvider} provider\n */\nconst setupWS = (provider) => {\n if (provider.shouldConnect && provider.ws === null) {\n const websocket = new provider._WS(provider.url, provider.protocols)\n websocket.binaryType = 'arraybuffer'\n provider.ws = websocket\n provider.wsconnecting = true\n provider.wsconnected = false\n provider.synced = false\n\n websocket.onmessage = (event) => {\n provider.wsLastMessageReceived = time.getUnixTime()\n const encoder = readMessage(provider, new Uint8Array(event.data), true)\n if (encoding.length(encoder) > 1) {\n websocket.send(encoding.toUint8Array(encoder))\n }\n }\n websocket.onerror = (event) => {\n provider.emit('connection-error', [event, provider])\n }\n websocket.onclose = (event) => {\n closeWebsocketConnection(provider, websocket, event)\n }\n websocket.onopen = () => {\n provider.wsLastMessageReceived = time.getUnixTime()\n provider.wsconnecting = false\n provider.wsconnected = true\n provider.wsUnsuccessfulReconnects = 0\n provider.emit('status', [{\n status: 'connected'\n }])\n // always send sync step 1 when connected\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeSyncStep1(encoder, provider.doc)\n websocket.send(encoding.toUint8Array(encoder))\n // broadcast local awareness state\n if (provider.awareness.getLocalState() !== null) {\n const encoderAwarenessState = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessState, messageAwareness)\n encoding.writeVarUint8Array(\n encoderAwarenessState,\n awarenessProtocol.encodeAwarenessUpdate(provider.awareness, [\n provider.doc.clientID\n ])\n )\n websocket.send(encoding.toUint8Array(encoderAwarenessState))\n }\n }\n provider.emit('status', [{\n status: 'connecting'\n }])\n }\n}\n\n/**\n * @param {WebsocketProvider} provider\n * @param {ArrayBuffer} buf\n */\nconst broadcastMessage = (provider, buf) => {\n const ws = provider.ws\n if (provider.wsconnected && ws && ws.readyState === ws.OPEN) {\n ws.send(buf)\n }\n if (provider.bcconnected) {\n bc.publish(provider.bcChannel, buf, provider)\n }\n}\n\n/**\n * Websocket Provider for Yjs. Creates a websocket connection to sync the shared document.\n * The document name is attached to the provided url. I.e. the following example\n * creates a websocket connection to http://localhost:1234/my-document-name\n *\n * @example\n * import * as Y from 'yjs'\n * import { WebsocketProvider } from 'y-websocket'\n * const doc = new Y.Doc()\n * const provider = new WebsocketProvider('http://localhost:1234', 'my-document-name', doc)\n *\n * @extends {ObservableV2<{ 'connection-close': (event: CloseEvent | null, provider: WebsocketProvider) => any, 'status': (event: { status: 'connected' | 'disconnected' | 'connecting' }) => any, 'connection-error': (event: Event, provider: WebsocketProvider) => any, 'sync': (state: boolean) => any }>}\n */\nexport class WebsocketProvider extends ObservableV2 {\n /**\n * @param {string} serverUrl\n * @param {string} roomname\n * @param {Y.Doc} doc\n * @param {object} opts\n * @param {boolean} [opts.connect]\n * @param {awarenessProtocol.Awareness} [opts.awareness]\n * @param {Object<string,string>} [opts.params] specify url parameters\n * @param {Array<string>} [opts.protocols] specify websocket protocols\n * @param {typeof WebSocket} [opts.WebSocketPolyfill] Optionall provide a WebSocket polyfill\n * @param {number} [opts.resyncInterval] Request server state every `resyncInterval` milliseconds\n * @param {number} [opts.maxBackoffTime] Maximum amount of time to wait before trying to reconnect (we try to reconnect using exponential backoff)\n * @param {boolean} [opts.disableBc] Disable cross-tab BroadcastChannel communication\n */\n constructor (serverUrl, roomname, doc, {\n connect = true,\n awareness = new awarenessProtocol.Awareness(doc),\n params = {},\n protocols = [],\n WebSocketPolyfill = WebSocket,\n resyncInterval = -1,\n maxBackoffTime = 2500,\n disableBc = false\n } = {}) {\n super()\n // ensure that serverUrl does not end with /\n while (serverUrl[serverUrl.length - 1] === '/') {\n serverUrl = serverUrl.slice(0, serverUrl.length - 1)\n }\n this.serverUrl = serverUrl\n this.bcChannel = serverUrl + '/' + roomname\n this.maxBackoffTime = maxBackoffTime\n /**\n * The specified url parameters. This can be safely updated. The changed parameters will be used\n * when a new connection is established.\n * @type {Object<string,string>}\n */\n this.params = params\n this.protocols = protocols\n this.roomname = roomname\n this.doc = doc\n this._WS = WebSocketPolyfill\n this.awareness = awareness\n this.wsconnected = false\n this.wsconnecting = false\n this.bcconnected = false\n this.disableBc = disableBc\n this.wsUnsuccessfulReconnects = 0\n this.messageHandlers = messageHandlers.slice()\n /**\n * @type {boolean}\n */\n this._synced = false\n /**\n * @type {WebSocket?}\n */\n this.ws = null\n this.wsLastMessageReceived = 0\n /**\n * Whether to connect to other peers or not\n * @type {boolean}\n */\n this.shouldConnect = connect\n\n /**\n * @type {number}\n */\n this._resyncInterval = 0\n if (resyncInterval > 0) {\n this._resyncInterval = /** @type {any} */ (setInterval(() => {\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n // resend sync step 1\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeSyncStep1(encoder, doc)\n this.ws.send(encoding.toUint8Array(encoder))\n }\n }, resyncInterval))\n }\n\n /**\n * @param {ArrayBuffer} data\n * @param {any} origin\n */\n this._bcSubscriber = (data, origin) => {\n if (origin !== this) {\n const encoder = readMessage(this, new Uint8Array(data), false)\n if (encoding.length(encoder) > 1) {\n bc.publish(this.bcChannel, encoding.toUint8Array(encoder), this)\n }\n }\n }\n /**\n * Listens to Yjs updates and sends them to remote peers (ws and broadcastchannel)\n * @param {Uint8Array} update\n * @param {any} origin\n */\n this._updateHandler = (update, origin) => {\n if (origin !== this) {\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeUpdate(encoder, update)\n broadcastMessage(this, encoding.toUint8Array(encoder))\n }\n }\n this.doc.on('update', this._updateHandler)\n /**\n * @param {any} changed\n * @param {any} _origin\n */\n this._awarenessUpdateHandler = ({ added, updated, removed }, _origin) => {\n const changedClients = added.concat(updated).concat(removed)\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(awareness, changedClients)\n )\n broadcastMessage(this, encoding.toUint8Array(encoder))\n }\n this._exitHandler = () => {\n awarenessProtocol.removeAwarenessStates(\n this.awareness,\n [doc.clientID],\n 'app closed'\n )\n }\n if (env.isNode && typeof process !== 'undefined') {\n process.on('exit', this._exitHandler)\n }\n awareness.on('update', this._awarenessUpdateHandler)\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n if (\n this.wsconnected &&\n messageReconnectTimeout <\n time.getUnixTime() - this.wsLastMessageReceived\n ) {\n // no message received in a long time - not even your own awareness\n // updates (which are updated every 15 seconds)\n closeWebsocketConnection(this, /** @type {WebSocket} */ (this.ws), null)\n }\n }, messageReconnectTimeout / 10))\n if (connect) {\n this.connect()\n }\n }\n\n get url () {\n const encodedParams = url.encodeQueryParams(this.params)\n return this.serverUrl + '/' + this.roomname +\n (encodedParams.length === 0 ? '' : '?' + encodedParams)\n }\n\n /**\n * @type {boolean}\n */\n get synced () {\n return this._synced\n }\n\n set synced (state) {\n if (this._synced !== state) {\n this._synced = state\n // @ts-ignore\n this.emit('synced', [state])\n this.emit('sync', [state])\n }\n }\n\n destroy () {\n if (this._resyncInterval !== 0) {\n clearInterval(this._resyncInterval)\n }\n clearInterval(this._checkInterval)\n this.disconnect()\n if (env.isNode && typeof process !== 'undefined') {\n process.off('exit', this._exitHandler)\n }\n this.awareness.off('update', this._awarenessUpdateHandler)\n this.doc.off('update', this._updateHandler)\n super.destroy()\n }\n\n connectBc () {\n if (this.disableBc) {\n return\n }\n if (!this.bcconnected) {\n bc.subscribe(this.bcChannel, this._bcSubscriber)\n this.bcconnected = true\n }\n // send sync step1 to bc\n // write sync step 1\n const encoderSync = encoding.createEncoder()\n encoding.writeVarUint(encoderSync, messageSync)\n syncProtocol.writeSyncStep1(encoderSync, this.doc)\n bc.publish(this.bcChannel, encoding.toUint8Array(encoderSync), this)\n // broadcast local state\n const encoderState = encoding.createEncoder()\n encoding.writeVarUint(encoderState, messageSync)\n syncProtocol.writeSyncStep2(encoderState, this.doc)\n bc.publish(this.bcChannel, encoding.toUint8Array(encoderState), this)\n // write queryAwareness\n const encoderAwarenessQuery = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessQuery, messageQueryAwareness)\n bc.publish(\n this.bcChannel,\n encoding.toUint8Array(encoderAwarenessQuery),\n this\n )\n // broadcast local awareness state\n const encoderAwarenessState = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessState, messageAwareness)\n encoding.writeVarUint8Array(\n encoderAwarenessState,\n awarenessProtocol.encodeAwarenessUpdate(this.awareness, [\n this.doc.clientID\n ])\n )\n bc.publish(\n this.bcChannel,\n encoding.toUint8Array(encoderAwarenessState),\n this\n )\n }\n\n disconnectBc () {\n // broadcast message with local awareness state set to null (indicating disconnect)\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(this.awareness, [\n this.doc.clientID\n ], new Map())\n )\n broadcastMessage(this, encoding.toUint8Array(encoder))\n if (this.bcconnected) {\n bc.unsubscribe(this.bcChannel, this._bcSubscriber)\n this.bcconnected = false\n }\n }\n\n disconnect () {\n this.shouldConnect = false\n this.disconnectBc()\n if (this.ws !== null) {\n closeWebsocketConnection(this, this.ws, null)\n }\n }\n\n connect () {\n this.shouldConnect = true\n if (!this.wsconnected && this.ws === null) {\n setupWS(this)\n this.connectBc()\n }\n }\n}\n","\nimport * as Y from 'yjs' // eslint-disable-line\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\n\nexport const messagePermissionDenied = 0\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {string} reason\n */\nexport const writePermissionDenied = (encoder, reason) => {\n encoding.writeVarUint(encoder, messagePermissionDenied)\n encoding.writeVarString(encoder, reason)\n}\n\n/**\n * @callback PermissionDeniedHandler\n * @param {any} y\n * @param {string} reason\n */\n\n/**\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} y\n * @param {PermissionDeniedHandler} permissionDeniedHandler\n */\nexport const readAuthMessage = (decoder, y, permissionDeniedHandler) => {\n switch (decoding.readVarUint(decoder)) {\n case messagePermissionDenied: permissionDeniedHandler(y, decoding.readVarString(decoder))\n }\n}\n","/**\n * Utility module to work with urls.\n *\n * @module url\n */\n\nimport * as object from './object.js'\n\n/**\n * Parse query parameters from an url.\n *\n * @param {string} url\n * @return {Object<string,string>}\n */\nexport const decodeQueryParams = url => {\n /**\n * @type {Object<string,string>}\n */\n const query = {}\n const urlQuerySplit = url.split('?')\n const pairs = urlQuerySplit[urlQuerySplit.length - 1].split('&')\n for (let i = 0; i < pairs.length; i++) {\n const item = pairs[i]\n if (item.length > 0) {\n const pair = item.split('=')\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')\n }\n }\n return query\n}\n\n/**\n * @param {Object<string,string>} params\n * @return {string}\n */\nexport const encodeQueryParams = params =>\n object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&')\n",null,null,null],"names":["EventListener","func","owner","constructor","this","EventEmitter","_debugMode","_listeners","Map","_onceListeners","_catchAllListeners","_capturedEvents","_capturedAccumulatedDuration","setDebugMode","mode","console","log","$clear","clear","clearCatchAllListeners","listenerCount","eventType","count","get","length","$hasListener","$catchAll","push","$on","list","has","set","$once","$off","removeCount","removeByFilterFunc","x","$offByOwner","$emitSync","args","promises","startTime","performance","now","sentTo","entry","values","p","call","then","err","error","endTime","duration","Math","floor","Promise","all","$emit","resolve","eventBus","ProxyEvent","type","itemId","elementId","target","prop","value","oldValue","createdAt","Date","moveTargetArray","moveTargetArrayIndex","moveTargetElementId","start","position","elementsToDelete","field","fieldId","isLink","bundleIndex","_undoFunction","_redoFunction","undo","redo","setUndoFunction","fn","setRedoFunction","setMoveTarget","array","index","setRange","setPosition","setElementsToDelete","elements","setField","setFieldId","id","setIsLink","clone","Object","assign","isWithinMergeDeltaOf","other","abs","isMergeableWith","isOfSameType","setsValue","undefined","merge","newEvent","shortUniqeIdGenerator","ShortUniqueId","dictionary","tools","createGUID","rnd","toUserFriendlyName","variableName","replace","match","charAt","toUpperCase","assert","msg","matchItemIdAndObject","value1","value2","_id","areValuesEqual","a","b","maxLevels","isNaN","Array","isArray","keysA","keys","keysB","key","prototype","hasOwnProperty","startTimer","time","dataURItoBlob","dataURI","mime","split","binary","atob","i","charCodeAt","Blob","Uint8Array","xmur3","str","h","imul","mulberry32","seed","t","hslToRgb","s","l","c","hp","r1","g1","b1","m","round","rgbToHex","r","g","map","v","toString","padStart","join","colorFromString","opts","minS","maxS","minL","maxL","return","fmt","rand","IGNORE_PROPS","IGNORE_DIRTY_PROPS","IGNORE_UNDO_PROPS","Proxifier","suppressDirty","undoManager","_promises","_capturePromises","_profiledEvents","_profiling","_profilerStartTime","_profiledCount","static","instance","_instance","suppressDirtyFlag","setUndoManager","manager","isUndoManagerActive","getEnabled","_postUndoManagerEvent","event","includes","setItemDirty","item","origValue","isDirty","markDirty","capturePromise","startProfiling","endProfiling","_addPromise","_proxyObject","object","element","options","_this","Proxy","Reflect","postUndoEvent","ret","createEvent","proxyEventTypeName","isField","name","changeDoesNotMakeItemDirty","undoEvent","changeEventFunc","redoEvent","_proxyArray","startIndex","parseInt","deletedBlock","pop","deleteEventFunc","addEventFunc","origMethod","spliceStart","spliceLength","elementToDelete","createRemoveEvent","createAddEvent","elementsToAdd","apply","splice","slice","sourceIndex","targetArray","targetIndex","sourceArray","sourceBlock","targetArrayRaw","targetBlock","getTargetArrayAndElement","moveToArray","extracted","block","createMoveEvent","moveEventFunc","warn","proxyBlockArray","arr","proxyListArray","proxyScriptArray","proxyBlock","proxyGraphBlock","proxyGraphBlockArray","graphItem","proxyConnection","connection","proxyConnectionArray","proxyItemField","proxyGraphBlockField","proxyBlockField","proxyScriptItem","scriptItem","script","proxyScriptFieldsArray","fields","proxyScriptField","ProfilerEntry","level","times","durations","childrenMap","children","parent","Profiler","startIteration","currentLevel","root","currentEntry","active","end","printResults","_iterate","child","getResults","results","sumArray","reduce","avgTime","avgDuration","totalDuration","selfDuration","executions","avgTimeStartMs","avgTimeEndMs","avgDurationMs","totalDurationMs","selfDurationMs","table","newIteration","asyncBlock","beginBlock","endBlock","Exception","Error","super","message","InvalidArgumentException","InvalidStateException","RuntimeException","LoaderException","QuotaExceededException","AccessDeniedException","folder","folderPath","links","attributes","userAttributes","filename","updatedAt","version","filesize","hash","mimeType","packageType","createdBy","updatedBy","acl","visibility","properties","allowConversation","conversation","tags","contributors","description","shortDescription","userAttributeTemplate","categories","attachments","license","quotaUser","quotaGroup","itemSize","totalSize","flags","perceptiveHash","unpackagedSize","location","itemFlag","data","link","to","usage","JSON","parse","stringify","major","minor","revision","AggregatedItem","Item","thumbnails","fieldSets","userFields","additionalUserAttributes","isAggregatedItem","stopRecursion","getDatatypeByName","solveInheritance","dataType","datatypes","find","datatype","structuredClone","baseType","exports","hookCallback","some","hooks","arguments","setHookCallback","callback","input","isObject","hasOwnProp","isObjectEmpty","obj","getOwnPropertyNames","k","isUndefined","isNumber","isDate","res","arrLen","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","len","momentProperties","updateInProgress","copyConfig","from","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","argLen","stack","deprecations","deprecateSimple","isFunction","Function","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","source","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","hh","d","dd","w","ww","M","MM","y","yy","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","aliases","D","dates","date","days","day","e","weekdays","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","hours","hour","ms","milliseconds","millisecond","minutes","minute","months","month","Q","quarters","quarter","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","weeks","week","W","isoweeks","isoweek","years","year","normalizeUnits","units","toLowerCase","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","getPrioritizedUnits","unitsObj","u","unit","priority","sort","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","absFloor","ceil","toInt","argumentForCoercion","coercedNumber","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","indexOf","getSetYear","makeGetSet","getIsLeapYear","keepTime","set$1","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","getFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","stringGet","stringSet","prioritized","prioritizedLen","mod","n","daysInMonth","modMonth","o","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","min","setUTCMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","concat","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","next","loadLocale","isLocaleNameSane","oldLocale","module","_abbr","require","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","forEach","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","temp","weekdayOverflow","curWeek","createLocal","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","createFromConfig","prepareConfig","preparse","configFromInput","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","invalid","isString","String","isMomentInput","isNumberOrStringArray","isMomentInputObject","property","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","filter","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","toISOString","keepOffset","toDate","inspect","prefix","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","Symbol","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","isDSTShifted","proto$1","get$1","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","ApiGateway","apiClient","debug","apiCalls","apiCallsStartTime","moment","callTime","totalTime","caller","method","params","itemCache","apiGateway","getItem","LinkableItemsCache","linkableItemsCache","usePublicApi","resolveItem","linkableItems","loadLinkableItems","linkableTypes","linkableItemsKey","validTypes","queryParams","types","Snapshot","Snapshotable","ownerItem","createSnapshot","restoreFromSnapshot","snapshot","rollbackFromSnapshot","_getElementById","_rollbackArray","arraySnapshot","elementCreator","deletedElements","rollbackElements","elementSnapshot","addedElements","restoredElement","Connection","srcNode","srcSlot","destNode","destSlot","posX","posY","getId","getPosX","getPosY","getSrcNode","getDestNode","getSrcSlot","getDestSlot","setSrcNode","setDestNode","setSrcSlot","setDestSlot","ScriptField","displayName","minValue","maxValue","order","inject","info","_updateDisplayName","setName","setOrder","setInfo","fieldOverrides","clonedField","clearDefinition","setDefinition","def","_toBoolean","defaultValue","Number","_parseTypeParams","typeparams","text","expectedCount","trim","createScriptFieldFromSnapshot","scriptField","Script","deferInitCall","makeIdsUnique","force","newId","transformNodeIds","cloneIdMapping","clonedScript","addField","createFieldsFromDefinition","fieldDefArray","findInArray","fieldDef","clearFieldTypes","fieldSnapshot","Field","preload","loadingManagerRule","itemRepo","condition","conditionFields","conditionFieldNames","dependantFields","dependenciesInitialized","collapsed","presets","language","widget","labelType","blocks","connections","templates","elementName","_internalValue","_internalOptions","_updateConditions","_hidden","hidden","_calculateConditionBlock","_processDependencies","updateConditions","resetValue","findBlock","proxyItem","keepBlockIds","clonedBlock","clonedConnection","_getConditionField","_calculateConditionField","startsWith","path","fieldIsOptional","endsWith","substring","fieldValue","rootItemId","isFeatureEnabled","conditionValue","oneIsTrue","refreshFieldDependencies","refreshDependantFields","fieldMap","setCondition","_scanConditions","childCondition","forEachField","setPreload","setLoadingManagerRule","rule","setLinkableTypes","setDefaultValue","setMinValue","setMaxValue","setOptions","setDatatype","setLanguage","setLength","setWidget","setBlocks","setConnections","setTemplates","setElementName","setCollapsed","setPresets","setLabelType","dontRecurseIntoBlocks","Block","PreparedItem","instanceId","fieldInstances","userFieldInstances","packageContent","public","readOnly","isPackaged","packageItem","isPreparedItem","resultingAcl","mapping","fieldInstance","fieldInstanceClone","ItemPreparator","forEachItem","forEachFieldInstance","verifyAcl","userInfo","acls","action","admin","superadmin","can","user","group","groups","hasPermission","perm","needsSuperadmin","permissions","permission","Template","newFields","specialize","fieldValues","instantiate","instances","itemFetcher","setItemFetcher","setFieldsFromDatatypes","prepare","ignore","async","preparedItem","createFieldInstances","searchKey","found","traverseItems","containedItem","me","attributeSrc","doNotFillValues","pathWithArrow","fieldSet","getFieldSet","fieldObj","label","if","linkItemFinal","linkItem","fetchLinkValue","usageAs","loadingManager","treePath","childType","childTypes","template","typeName","t1","t2","localeCompare","rootBlock","childBlocks","readBlocks","listPath","proxiedBlocks","graphPath","inputs","outputs","readConnections","linkUsage","parentBlock","treeNamespace","readChildren","readScripts","parentType","listIndex","blockPath","existsBlockNamespace","idPath","typePath","posXPath","posYPath","templateEntry","blockName","proxiedFields","createFields","setFields","setInputs","setOutputs","childScripts","scripts","scriptPath","existsScriptNamespace","scriptItemIdPath","fieldPath","fieldPathLen","fieldName","namespace","graphNamespace","attributeName","isGraphBlockField","fieldDependencies","dependantField","isSelected","isExpanded","resetFieldValues","withChildren","cloneScripts","clonedChildBlock","getDescendantBlocks","descendantBlocks","childblocks","childBlock","setSelected","setExpanded","getRoot","findField","removeBlock","removeObject","addBlock","moveBlock","moveObjectToArray","moveToPosition","moveBlockToParent","newParent","moveToParent","parentId","getField","hasTag","tag","hasOneTag","getNameFieldValue","getActiveFieldValue","_getFieldByName","zero$1","buf","LITERALS$1","L_CODES$1","D_CODES$1","MAX_BITS$1","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","MAX_MATCH$1","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","dist","put_short","pending_buf","pending","send_bits","bi_valid","bi_buf","send_code","tree","bi_reverse","code","gen_codes","bl_count","next_code","bits","init_block","dyn_ltree","dyn_dtree","bl_tree","END_BLOCK","opt_len","static_len","sym_next","bi_windup","smaller","depth","_n2","_m2","pqdownheap","heap","heap_len","compress_block","ltree","dtree","lc","extra","sx","sym_buf","build_tree","desc","stree","node","heap_max","xbits","f","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","_tr_stored_block$1","stored_len","last","window","subarray","_tr_init_1","LENGTH_CODES$1","tr_static_init","l_desc","d_desc","bl_desc","_tr_flush_block_1","opt_lenb","static_lenb","max_blindex","strm","data_type","block_mask","detect_data_type","BL_CODES$1","build_bl_tree","strategy","lcodes","dcodes","blcodes","rank","send_all_trees","trees","_tr_init","_tr_stored_block","_tr_flush_block","_tr_tally","sym_end","_tr_align","STATIC_TREES","bi_flush","adler32_1","adler","s1","s2","crcTable","Uint32Array","makeTable","crc32_1","crc","messages","constants$2","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","Z_NO_FLUSH$2","Z_FULL_FLUSH$1","Z_FINISH$3","Z_BLOCK$1","Z_OK$3","Z_STREAM_END$3","Z_STREAM_ERROR$2","Z_DATA_ERROR$2","Z_BUF_ERROR$1","Z_DEFAULT_COMPRESSION$1","Z_DEFAULT_STRATEGY$1","Z_DEFLATED$2","MAX_MATCH","MIN_LOOKAHEAD","INIT_STATE","BUSY_STATE","FINISH_STATE","errorCode","zero","slide_hash","wsize","w_size","hash_size","head","prev","HASH","hash_shift","hash_mask","flush_pending","state","avail_out","pending_out","next_out","total_out","flush_block_only","block_start","strstart","put_byte","putShortMSB","read_buf","size","avail_in","next_in","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","more","window_size","insert","ins_h","deflate_stored","flush","left","have","min_block","pending_buf_size","used","high_water","deflate_fast","hash_head","bflush","match_length","max_lazy_match","MIN_MATCH","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","configuration_table","DeflateState","status","gzhead","gzindex","last_flush","w_bits","hash_bits","Uint16Array","HEAP_SIZE","MAX_BITS","lit_bufsize","deflateStateCheck","deflateResetKeep","deflateReset","deflateInit2","windowBits","memLevel","deflate_2$1","old_flush","header","level_flags","hcrc","comment","os","beg","copy","gzhead_extra","bstate","deflate_huff","deflate_rle","deflate_1$2","deflateInit","deflateSetHeader","deflate","deflateEnd","deflateSetDictionary","dictLength","tmpDict","avail","deflateInfo","_has","common","sources","TypeError","chunks","chunk","STR_APPLY_UIA_OK","fromCharCode","__","_utf8len","q","strings","TextEncoder","encode","c2","m_pos","str_len","buf_len","TextDecoder","decode","utf16buf","c_len","buf2binstring","zstream","toString$1","Z_NO_FLUSH$1","Z_FINISH$2","Z_OK$2","Z_STREAM_END$2","Z_DEFLATED$1","Deflate$1","chunkSize","opt","raw","gzip","ended","dict","_dict_set","deflate$1","deflator","flush_mode","_flush_mode","onData","onEnd","deflateRaw_1$1","gzip_1$1","deflate_1$1","Deflate","deflateRaw","BAD$1","inffast","_in","_out","dmax","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","op","from_source","lencode","distcode","lenbits","distbits","top","dolen","sane","MAXBITS","lbase","lext","dbase","dext","inftrees","lens","lens_index","codes","table_index","work","incr","fill","low","mask","sym","curr","drop","huff","offs","here_bits","here_op","here_val","Z_FINISH$1","Z_OK$1","Z_STREAM_END$1","Z_NEED_DICT$1","Z_STREAM_ERROR$1","Z_DATA_ERROR$1","Z_MEM_ERROR$1","HEAD","DICT","TYPE","TYPEDO","COPY_","LEN_","LEN","CHECK","BAD","zswap32","InflateState","havedict","check","wbits","ncode","nlen","ndist","lendyn","distdyn","back","was","inflateStateCheck","inflateResetKeep","Int32Array","inflateReset","inflateReset2","inflateInit2","lenfix","distfix","virgin","fixedtables","updatewindow","src","inflate_2$1","put","last_bits","last_op","last_val","hbuf","inf_leave","done","xflags","extra_len","inflate_1$2","inflateInit","inflate","inflateEnd","inflateGetHeader","inflateSetDictionary","dictid","inflateInfo","gzheader","Inflate$1","inflate$1","inflator","last_avail_out","next_out_utf8","tail","utf8str","inflateRaw_1$1","inflate_1$1","Inflate","inflateRaw","ungzip","pako","constants","packageCache","files","items","folders","getFileFromCache","itemID","getFolders","getFolder","findFolder","parentID","findItem","getItems","getItemFromCache","addPackageToCache","packageID","rootItem","entries","metadata","blob","itemName","itemType","attachment","attachmentID","createAttachmentID","queryParam","parsePackage","binaryBlob","pkgID","Buffer","arrayBuffer","headerFileOffset","MAGIC_BYTES","readInt32LE","textDecoder","headerBson","fileOffset","buffer","metadataBson","metadataSize","metadataRaw","newID","foldersBson","foldersSize","fileEntries","packageFileOffset","content","hydratedItems","hydrate","queryAttachments","closest","current","Infinity","getAttachmentFromPackageCache","SnapshotEntry","UndoManager","undoEvents","redoEvents","maxUndoCount","enabled","snapshots","_undoRedoPromise","snapshotEntry","itemInstances","_grabSnapshot","_rollbackFromSnapshot","delete","_getFieldInstance","fieldInstanceSnapshot","setEnabled","omitFinally","finally","_performUndo","_performRedo","undoBundle","spliceLastEventBundle","reverse","getNumberOfUndoBundles","getNumberOfRedoBundles","redoBundle","getUndoSteps","getRedoSteps","assignBundleIndexToEvent","mergeWasSuccessful","otherEvent","mergedEvent","spliceFirstEventBundle","at","maxUndoBundleIndex","events","bundleIndexToLookFor","bundleIndexStart","latestEvent","eventDelta","ItemChangeProcessor","updateItemLinksAndAttributes","includeLinkItems","clearUnusedLinks","getLinksAndAttributes","includeItems","retrieveLinksAndAttributesFromFieldInstances","traverseListFieldInstances","traverseTreeFieldInstance","blockType","blockId","blockPosX","blockPosY","processScripts","scriptIdPath","itemIdPath","ItemRepo","activeItem","loadingItems","loadedItems","resolvedPaths","jail","itemPreparator","itemChangeProcessor","ItemCache","mountedFolders","handleRename","_logGroup","_logGroupEnd","_log","getLoadedItems","getItemInstances","findLoadedItem","_handleError","getUndoManager","createFieldsForItem","createScriptsForItem","scriptData","proxify","scriptEntry","loadItem","getCollab","endCollaboration","traverseBlockPairs","b2","copyScripts","oldBlock","newBlock","clonedScripts","updateScriptFieldReferences","nodeFieldMap","oldBlockCurr","newBlockCurr","updateScriptFieldReferencesFromMap","traverseBlocks","currBlock","createNewBlock","addBlockToParent","proxy","createNewListEntry","createNewGraphNode","graph","addNodeToGraph","removeGraphNode","connectionsToRemove","addGraphLink","removeGraphLink","createNewScript","newScript","removeScript","loadPackage","url","response","fetch","pkgData","pkgTools.parsePackage","pkgTools.addPackageToCache","packagedItems","packagedItem","_linkAndPrepareItems","createPackageItemUrl","file","pkgTools.getFileFromCache","URL","createObjectURL","revokePackageItemUrl","revokeObjectURL","_loadPackageContentRecursively","reportProgressFunc","cachedItem","addItemToCache","percent","loaded","rawPackage","objectUrl","createNewItemInstance","newItemInstance","_addItemInstance","_addLoadedItem","loadItemByRelativePath","pkgTools.getItemFromCache","resolvedItemId","currentFolder","pkgTools.getFolder","part","pkgTools.findFolder","pkgTools.findItem","resolveRelativePath","_loadItemFromApi","recursive","withAttachmentInfo","noFields","_relinkItems","referenceMap","_resolve","_reject","promise","reject","_loadItemInternal","withCollaboration","collab","startCollaboration","reportProgress","phase","progressCallback","bytesTotal","bytesLoaded","mainItemId","itemMap","loadedItemsMap","preparedItems","nextItem","prepareItem","unpreparedItem","publicResolveRelativeItem","resolveRelativeItem","_traverse","traverseFieldInstances","replaceLink","oldId","newItem","saveItem","updateItem","catch","save","progress","existsUnsavedChanges","newName","_dereq_","global","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","nextTick","document","createTextNode","observe","characterData","setImmediate","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","channel","port1","onmessage","port2","postMessage","queue","oldQueue","immediate","task","self","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","outcome","safelyResolveThenable","QueueItem","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","getThen","thenable","onError","onSuccess","tryToUnwrap","tryCatch","reason","iterable","resolved","allResolver","resolveFromAll","outValue","race","_typeof","iterator","_classCallCheck","Constructor","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","idb","isIndexedDBValid","open","isSafari","openDatabase","navigator","userAgent","platform","hasFetch","IDBKeyRange","createBlob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","append","getBlob","Promise$1","executeCallback","executeTwoCallbacks","errorCallback","normalizeKey","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","ArrayBuffer","_checkBlobSupportWithoutCaching","txn","transaction","objectStore","onabort","preventDefault","stopPropagation","oncomplete","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","_getConnection","upgradeNeeded","createDbContext","db","close","dbArgs","openreq","onupgradeneeded","createObjectStore","storeName","oldVersion","ex","newVersion","onerror","onsuccess","onversionchange","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","FileReader","onloadend","base64","btoa","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_tryReconnect","forages","forage","createTransaction","retries","tx","_initStorage","ready","initPromises","ignoreErrors","_defaultConfig","req","iterate","openCursor","iterationNumber","cursor","setItem","blobSupport","store","removeItem","advanced","openKeyCursor","advance","dropInstance","currentConfig","dbPromise","dropObjectPromise","deleteObjectStore","_forage2","dropDBPromise","deleteDatabase","onblocked","asyncStorage","_driver","_support","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","bytes","bufferToString","base64String","serialize","valueType","marker","fileReader","onload","readAsArrayBuffer","deserialize","blobType","Int8Array","Uint8ClampedArray","Int16Array","Float32Array","Float64Array","localforageSerializer","createDbTable","executeSql","_initStorage$1","dbInfoPromise","serializer","tryExecuteSql","sqlStatement","SYNTAX_ERR","rows","getItem$1","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","operations","webSQLStorage","isLocalStorageValid","localStorage","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","searchElement","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","_key","LocalForage","driverTypeKey","driverName","defineDriver","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","configureMissingMethods","methodNotImplementedFactory","methodName","_len","optionalDriverMethod","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage_js","StorageIndexedDb","databaseName","collectionName","_store","localforage","init","_keys","_set","_clear","_get","_remove","opfsWorker","_storage","_root","_databaseName","_collectionName","storage","getDirectory","dbFolder","getDirectoryHandle","create","database","collection","success","fileHandle","getFileHandle","accessHandle","createSyncAccessHandle","truncate","byteLength","write","StorageOpfs","_worker","globalThis","Worker","json","writable","createWritable","removeEntry","getFile","contents","Storage","_impl","sizeMb","fixKey","replaceAll","isObject_1","freeGlobal","_freeGlobal","require$$0","freeSelf","trimmedEndIndex","reWhitespace","_trimmedEndIndex","reTrimStart","_baseTrim","_Symbol","getRawTag","objectProto","nativeObjectToString","symToStringTag","toStringTag","_getRawTag","isOwn","unmasked","require$$1","objectToString","_objectToString","require$$2","_baseGetTag","baseGetTag","isObjectLike","isObjectLike_1","isSymbol_1","now_1","toNumber","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber_1","isBinary","nativeMax","nativeMin","debounce_1","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","clearTimeout","cancel","cache","urlToIdMap","logging","quota","usePersistentStorage","saveIndex","persistentStorageSizeMb","debounce","initFromStorage","getQuota","setQuota","checkQuota","getCount","getSize","indexData","addToStorage","storeObject","waitUntilReady","findObject","getEntries","clearMemory","increase","newSize","sortedEntries","removeObjectFromCache","getIdFromUrl","getById","getObjectUrl","getBufferById","getBlobById","Response","loadFromStorage","getCacheKey","lodLevel","_getLodLevelUrl","getAttachmentDownloadUrl","getDownloadUrl","loadingProgressFunc","trials","downloadPublicAttachment","publicDownloadItem","downloadAttachment","downloadItem","cacheKey","getItemHash","newObject","getObjectCount","getObjectSize","FolderCache","maxNumItems","checkStorage","difference","getFolderListing","getItemListing","folderId","itemListing","cachedAt","getFolderACLs","timeout","refreshCacheForFolder","addFolderListing","listing","addItemListing","addACL","ThumbCache","_loadThumbnail","getThumbnail","getPublicThumbnail","timestamp","thumbnail","UserCache","getUserPublicInfo","requestClientId","GroupCache","getGroupPublicInfo","AttachmentCache","attachmentName","forcePublic","downloadAttachmentPOP","invalidateAttachment","matchesIndex","Publisher","jobManager","hasExternalResources","affectedFolderIds","Set","getItemRepo","getJobManager","_updateQuota","getPreviousVersions","projectFolderId","subfolderName","subfolderId","createFolder","returnIfExists","getFoldersInFolderList","folderAsItemType","verify","paths","projectPath","resolvePath","getFolderPath","external","unpackToProject","packageItemId","subdirectoryName","updateCallback","renameItem","assetFolderId","fixNameCollisions","execute","isFolder","copyItemToProject","copyItemsToProject","itemIds","lines","line","copyToProject","itemIdsToCopy","unpublish","packageId","makeItemPrivate","publish","subfolderPath","makePublic","copyExternal","createNewPackage","firstSubFolderId","destinationFolderId","folderNames","folderName","foldersToInclude","JobEntry","job","nextCheckMs","JobManager","jobs","getJobs","parameters","watchJob","jobEntry","getJobState","createJob","SUPPORTED_TYPES","mp3","itemTypeCollection","collectionEntryName","defaultAction","actions","hdr","glb","png","jpg","jpeg","lua","ttf","otf","unknown","invisible","ASSET_FOLDER_NAME_BY_TYPE","Audio","Mesh","Material","Image","Scene","Font","setTypeDefaults","newType","collectionType","newExtension","lastIndexOf","changeFileExtension","UploadItem","processing","ext","AssetCreator","mainItem","oldMainItemId","originalItemIds","converter","supportedExtensions","extensions","v1","v2","_addAffectedFolder","getAffectedFolderIds","getSupportedExtensions","setConverter","setItems","itemPath","saveMainItemChanges","createAssetFolder","rootFolderId","getItemsInFolderList","createStandardAssetFolderPath","executeActions","createAsset","moveItems","dest","originalName","createPackage","replaceReferences","deleteOriginalItems","deleteItem","sendFolderRefreshEvent","processUploads","zip","JSZip","loadAsync","relativePath","zipEntry","detectAssets","processedFiles","assetType","assetTypeCollection","itemCount","valid","_filterUploadFiles","uploadFiles","createNewItem","createAssetFromFiles","assetBaseFolderId","itemData","forceReplace","returnFolderInfo","assetTypeFolderId","previousContentFound","deleteFolder","assetItemId","uploadAndCreate","nameOverride","percentCompleted","resourcesFolderId","createItem","Serializer","grab","grabbedBlock","_serializeBlockFields","_serializeScripts","omitPath","_getBlockPath","returnArray","validateMessage","_putBlock","srcBlock","newParentBlock","grabFromItem","putOptions","_updateScriptFieldReferences","oldBlockSerialized","traversePairs","oldB","newB","oldChildren","newChildren","attachToParent","_findItemById","_findParentBlock","linkto","dontCopyScripts","_createUnproxifiedBlock","subPutOptions","_proxifyAndAttachTree","scriptsData","_getBlockTemplate","clonedTemplate","proxifiedChildren","proxyRoot","_findItemField","indices","_getBlockIndex","sibling","currentBlock","scriptFields","pushAll","setIfUndefined","createT","appendTo","ObservableV2","_observers","map.create","on","map.setIfUndefined","set.create","once","off","observers","emit","array.from","destroy","Observable","isNegativeZero","BIT7","BIT8","BITS7","MAX_SAFE_INTEGER","isInteger","num","math.floor","trimLeftRegex","fromCamelCaseRegex","fromCamelCase","trimLeft","utf8TextEncoder","encodeUtf8","encodedString","unescape","encodeURIComponent","codePointAt","utf8TextDecoder","fatal","ignoreBOM","Encoder","cpos","cbuf","bufs","createEncoder","encoder","toUint8Array","uint8arr","curPos","bufferLen","writeUint8","writeVarUint","binary.BITS7","binary.BIT8","writeVarInt","isNegative","math.isNegativeZero","binary.BIT7","_strBuffer","_maxStrBSize","writeVarString","string.utf8TextEncoder","encodeInto","written","writeVarUint8Array","string.encodeUtf8","writeUint8Array","uint8Array","leftCopyLen","math.min","rightCopyLen","math.max","writeOnDataView","verifyLen","dview","DataView","floatTestBed","writeAny","number.isInteger","math.abs","setFloat32","getFloat32","writeFloat32","setFloat64","writeFloat64","setBigInt64","writeBigInt64","array.isArray","RleEncoder","writer","flushUintOptRleEncoder","UintOptRleEncoder","flushIntDiffOptRleEncoder","encodedDiff","IntDiffOptRleEncoder","StringEncoder","sarr","lensE","methodUnimplemented","unexpectedCase","errorUnexpectedEndOfArray","error.create","errorIntegerOutOfRange","Decoder","createDecoder","readVarUint8Array","decoder","view","byteOffset","readUint8Array","readVarUint","readUint8","mult","number.MAX_SAFE_INTEGER","readVarInt","readVarString","string.utf8TextDecoder","remainingLen","fromCodePoint","nextLen","decodeURIComponent","escape","readFromDataView","dv","readAnyLookupTable","getFloat64","getBigInt64","readAny","RleDecoder","read","UintOptRleDecoder","IntDiffOptRleDecoder","hasCount","StringDecoder","spos","getRandomValues","crypto","bind","uint32","uuidv4Template","uuidv4","getUnixTime","undefinedToNull","_localStorage","newValue","usePolyfill","varStorage","hasProperty","freeze","deepFreeze","EqualityTraitSymbol","callAll","fs","equalityDeep","traits.EqualityTraitSymbol","object.length","object.hasProperty","isNode","process","release","isBrowser","hasParam","pargs","argv","currParamName","parg","search","kv","string.fromCamelCase","computeParams","getVariable","conditions.undefinedToNull","env","storage.varStorage","hasConf","supportsColor","FORCE_COLOR","stdout","isTTY","createUint8ArrayFromLen","toBase64","env.isBrowser","string.fromCharCode","fromBase64","createUint8ArrayViewFromArrayBuffer","Pair","right","DOMParser","BOLD","symbol.create","UNBOLD","BLUE","GREY","GREEN","RED","PURPLE","ORANGE","UNCOLOR","_browserStyleMap","common.BOLD","pair.create","common.UNBOLD","common.BLUE","common.GREEN","common.GREY","common.RED","common.PURPLE","common.ORANGE","common.UNCOLOR","computeLoggingArgs","env.supportsColor","strBuilder","styles","currentStyle","logArgs","style","map.map","unshift","vconsoles","createIterator","iteratorMap","fmap","DeleteItem","clock","DeleteSet","clients","iterateDeletedStructs","ds","deletes","clientid","structs","doc","lastStruct","clockState","del","iterateStructs","isDeleted","dis","client","midindex","mid","midclock","findIndexDS","sortAndMergeDeleteSet","dels","addToDeleteSet","createDeleteSetFromStructStore","dsitems","struct","deleted","writeDeleteSet","encoding.writeVarUint","restEncoder","resetDsCurVal","writeDsClock","writeDsLen","readDeleteSet","numClients","decoding.readVarUint","restDecoder","numberOfDeletes","dsField","readDsClock","readDsLen","readAndApplyDeleteSet","unappliedDS","getState","clockEnd","findIndexSS","splitItem","UpdateEncoderV2","generateNewClientId","random.uint32","Doc","guid","random.uuidv4","collectionid","gc","gcFilter","meta","autoLoad","shouldLoad","clientID","share","StructStore","_transaction","_transactionCleanups","subdocs","_item","isLoaded","isSynced","isDestroyed","whenLoaded","promise.create","provideSyncedPromise","eventHandler","whenSynced","load","transact","subdocsLoaded","getSubdocs","getSubdocGuids","origin","TypeConstructor","_integrate","Constr","AbstractType","_map","_start","_length","getArray","YArray","getText","YText","getMap","YMap","getXmlElement","YXmlElement","getXmlFragment","YXmlFragment","subdoc","subdocsAdded","subdocsRemoved","DSDecoderV1","UpdateDecoderV1","readLeftID","createID","readRightID","readClient","readInfo","decoding.readUint8","readString","decoding.readVarString","readParentInfo","readTypeRef","readLen","decoding.readAny","readBuf","newBuf","buffer.copyUint8Array","decoding.readVarUint8Array","readJSON","readKey","DSDecoderV2","dsCurrVal","UpdateDecoderV2","keyClockDecoder","decoding.IntDiffOptRleDecoder","clientDecoder","decoding.UintOptRleDecoder","leftClockDecoder","rightClockDecoder","infoDecoder","decoding.RleDecoder","stringDecoder","decoding.StringDecoder","parentInfoDecoder","typeRefDecoder","lenDecoder","ID","keyClock","DSEncoderV1","encoding.createEncoder","encoding.toUint8Array","UpdateEncoderV1","writeLeftID","writeRightID","writeClient","writeInfo","encoding.writeUint8","writeString","encoding.writeVarString","writeParentInfo","isYKey","writeTypeRef","writeLen","any","encoding.writeAny","writeBuf","encoding.writeVarUint8Array","writeJSON","embed","writeKey","DSEncoderV2","error.unexpectedCase","keyMap","keyClockEncoder","encoding.IntDiffOptRleEncoder","clientEncoder","encoding.UintOptRleEncoder","leftClockEncoder","rightClockEncoder","infoEncoder","encoding.RleEncoder","stringEncoder","encoding.StringEncoder","parentInfoEncoder","typeRefEncoder","lenEncoder","encoding.writeUint8Array","writeClientsStructs","_sm","sm","getStateVector","_clock","startNewStructs","firstStruct","writeStructs","readUpdateV2","ydoc","transactionOrigin","structDecoder","retry","clientRefs","numOfStateUpdates","numberOfStructs","refs","GC","Skip","cantCopyParentInfo","readItemContent","readClientsStructRefs","restStructs","clientsStructRefs","clientsStructRefsIds","getNextStructTarget","nextStructsTarget","curStructsTarget","missingSV","updateMissingSv","mclock","stackHead","addStackToRestSS","inapplicableItems","missing","getMissing","structRefs","integrate","update","integrateStructs","pendingStructs","mergeUpdatesV2","dsRest","pendingDs","pendingDSUpdate","decoding.createDecoder","dsRest2","applyUpdateV2","YDecoder","encodeStateAsUpdateV2","encodedTargetStateVector","targetStateVector","writeStateAsUpdate","decodeStateVector","updates","diffUpdateV2","mergeUpdates","convertUpdateFormatV2ToV1","decodedState","ssLength","readStateVector","writeStateVector","sv","encodeStateVectorV2","writeDocumentStateVector","EventHandler","createEventHandler","addEventHandlerListener","removeEventHandlerListener","callEventHandlerListeners","arg0","arg1","f.callAll","compareIDs","isVisible","splitSnapshotAffectedStructs","getItemCleanStart","addStruct","findIndexCleanStart","getItemCleanEnd","clockStart","Transaction","deleteSet","beforeState","afterState","changed","changedParentTypes","_mergeStructs","_needFormattingCleanup","writeUpdateMessageFromTransaction","map.any","writeStructsFromTransaction","addChangedTypeToTransaction","parentSub","tryToMergeWithLefts","mergeWith","merged","cleanupTransactions","transactionCleanups","mergeStructs","subs","itemtype","_callObserver","_dEH","currentTarget","_path","event1","event2","cleanupYTextAfterTransaction","deleteItems","di","endDeleteItemClock","si","keep","tryGcDeleteSet","tryMergeDeleteSet","beforeClock","firstChangePos","replacedStructPos","vc","print","logging.print","logging.ORANGE","logging.BOLD","logging.UNBOLD","logging.RED","added","removed","initialCall","finishCleanup","LazyStructReader","filterSkips","gen","lazyStructReaderGenerator","LazyStructWriter","currClient","startClock","clientStructs","sliceStruct","leftItem","rightOrigin","YEncoder","updateDecoders","lazyStructDecoders","currWrite","updateEncoder","lazyStructEncoder","dec","dec1","dec2","clockDiff","currDecoder","firstClient","iterated","writeStructToLazyStructWriter","finishLazyStructWriting","dss","dssI","delsLeft","array.appendTo","mergeDeleteSets","lazyStructWriter","svClock","flushLazyStructWriter","lazyWriter","partStructs","blockTransformer","updateDecoder","lazyDecoder","convertUpdateFormat","f.id","errorComputeChanges","YEvent","_changes","_delta","getPathTo","adds","array.last","getContent","delta","changes","lastOp","packOp","retain","countable","warnPrematureAccess","logging.warn","globalSearchMarkerTimestamp","ArraySearchMarker","overwriteMarker","findMarker","yarray","_searchMarker","pindex","refreshMarkerTimestamp","searchMarker","pm","markPosition","updateMarkerChanges","callTypeObservers","changedType","_eH","_copy","error.methodUnimplemented","_write","_encoder","_first","_parentSubs","observeDeep","unobserve","unobserveDeep","typeListSlice","cs","typeListToArray","typeListForEach","typeListMap","typeListCreateIterator","currentContent","currentContentIndex","typeListGet","typeListInsertGenericsAfter","referenceItem","ownClientId","jsonContent","packJsonContent","lastId","ContentAny","Boolean","ContentBinary","ContentDoc","ContentType","lengthExceeded","typeListInsertGenerics","typeListDelete","startLength","typeMapDelete","typeMapSet","BigInt","typeMapGet","typeMapGetAll","typeMapHas","createMapIterator","YArrayEvent","_prelimContent","el","parentSubs","maxMarker","currMarker","typeListPushGenerics","YArrayRefID","YMapEvent","ymap","keysChanged","iterator.iteratorMap","_value","YMapRefID","equalAttrs","every","object.equalFlat","ItemTextListPosition","currentAttributes","forward","ContentFormat","updateCurrentAttributes","findNextPosition","findPosition","useSearchMarker","insertNegatedAttributes","currPos","negatedAttributes","nextFormat","minimizeAttributeChanges","insertAttributes","currentVal","insertText","_val","ContentString","ContentEmbed","getLength","formatText","iterationLoop","attr","newlines","cleanupFormattingGap","startAttributes","currAttributes","endFormats","cf","cleanups","reachedCurr","startAttrValue","cleanupYTextFormatting","map.copy","needFullCleanup","afterClock","attrs","cleanupContextlessFormattingGap","yText","deleteText","startAttrs","YTextEvent","ytext","childListChanged","sub","oldAttributes","deleteLen","addOp","_k","object.isEmpty","object.assign","curVal","_pending","_hasFormatting","applyDelta","toDelta","sanitize","ins","prevSnapshot","computeYChange","ops","packStr","addAttributes","computeDelta","cur","insertEmbed","removeAttribute","setAttribute","attributeValue","getAttribute","getAttributes","YTextRefID","YXmlTreeWalker","_filter","_currentNode","_firstCall","nxt","firstChild","first","createTreeWalker","querySelector","query","nodeName","querySelectorAll","YXmlEvent","xml","toDOM","_document","binding","fragment","createDocumentFragment","_createAssociation","xmlType","insertBefore","insertAfter","ref","refItem","pc","findIndex","YXmlFragmentRefID","_prelimAttrs","nextSibling","prevSibling","object.forEach","stringBuilder","keysLen","hasAttribute","typeMapGetAllSnapshot","dom","yxml","YXmlElementRefID","attributesChanged","YXmlHook","hookName","hook","createDom","YXmlHookRefID","YXmlText","nestedNodes","YXmlTextRefID","AbstractStruct","encodingRef","isCountable","getRef","ContentDeleted","markDeleted","createDocFromOpts","_right","ContentJSON","isDevMode","env.getVariable","object.deepFreeze","firstCharCode","typeRefs","_decoder","rightItem","redone","isMarked","doKeep","doDelete","parentItem","conflictingItems","itemsBeforeOrigin","parentGCd","newStruct","replaceStruct","ykey","findRootTypeKey","contentRefs","glo","importIdentifier","channels","BC","BroadcastChannel","room","_onChange","buffer.fromBase64","addEventListener","buffer.toBase64","removeEventListener","getChannel","bc","writeSyncStep1","Y.encodeStateVector","writeSyncStep2","encodedStateVector","Y.encodeStateAsUpdate","readSyncStep2","Y.applyUpdate","readUpdate","readSyncMessage","messageType","readSyncStep1","outdatedTimeout","Awareness","states","_checkInterval","setInterval","time.getUnixTime","getLocalState","lastUpdated","setLocalState","remove","removeAwarenessStates","clearInterval","currLocalMeta","prevState","updated","filteredUpdated","f.equalityDeep","setLocalStateField","getStates","awareness","curMeta","encodeAwarenessUpdate","messageHandlers","provider","emitSynced","_messageType","syncMessageType","syncProtocol.readSyncMessage","synced","_emitSynced","awarenessProtocol.encodeAwarenessUpdate","clientMeta","currClock","awarenessProtocol.applyAwarenessUpdate","permissionDeniedHandler","authProtocol.readAuthMessage","_ydoc","readMessage","messageHandler","closeWebsocketConnection","wsconnecting","wsconnected","awarenessProtocol.removeAwarenessStates","wsUnsuccessfulReconnects","setupWS","math.pow","maxBackoffTime","shouldConnect","websocket","_WS","protocols","binaryType","wsLastMessageReceived","encoding.length","send","onclose","onopen","syncProtocol.writeSyncStep1","encoderAwarenessState","broadcastMessage","readyState","OPEN","bcconnected","bc.publish","bcChannel","WebsocketProvider","serverUrl","roomname","connect","awarenessProtocol.Awareness","WebSocketPolyfill","WebSocket","resyncInterval","disableBc","_synced","_resyncInterval","_bcSubscriber","_updateHandler","syncProtocol.writeUpdate","_awarenessUpdateHandler","_origin","changedClients","_exitHandler","env.isNode","messageReconnectTimeout","encodedParams","object.map","url.encodeQueryParams","disconnect","connectBc","encoderSync","encoderState","syncProtocol.writeSyncStep2","encoderAwarenessQuery","disconnectBc","unsubscribed","bc.unsubscribe","CollabDocument","Y.Doc","Collab","collabDocument","yWebsocketProvider","users","avatars","isActive","getAwarenessStates","getUsersList","_getUser","_updateUsersList","avatar","getAvatar","color","itsMe","newUsers","isDevOrLocalhost","getCollabUrl","roomName","reconnectTimeout","reconnect","getCollabToken","axiosRetry","default","axios","retryCondition","ItemVisibility","Draft","Private","NotListed","Public","ApiClient","accessToken","apiToken","forcePublicApi","storageSizeMib","webProtocol","wsProtocol","viewerProtocol","collabProtocol","restUrl","wsUrl","viewerUrl","collabUrl","folderCache","thumbCache","userCache","groupCache","attachmentCache","api","cachedMe","profiler","wsLastPing","last2faCode","host","viewerHost","collabHost","https","websocketPath","wsAutoReconnect","wsAutoConnect","viewerHttps","collabHttps","isOnLocalhost","isDevPlatform","baseURL","initCaches","clearCaches","href","clearIndexedDb","request","logout","websocketConnect","websocketDisconnect","websocketSend","subscriptions","getPublisher","getAssetCreator","getThumbCache","getItemCache","getRootVisibility","getEventBus","setForcePublicApi","_updateUsePublicApi","setApiToken","setAccessToken","getApiToken","getAccessToken","updateBaseUrl","setApiBaseUrl","setWsBaseUrl","setRequestClientId","getApiBaseUrl","getWsBaseUrl","getViewerBaseUrl","setProfiler","login2FA","account","password","confirm2FA","isAuthenticated","feature","features","resolveUserOrGroupInfoForItem","initials","_startOp","startTimeMs","runningMs","interval","finish","_createOpName","resource","remainder","addAuthenticationHeaders","headers","getHeaders","profilerTask","opName","responseType","signal","controller","onUploadProgress","progressEvent","onDownloadProgress","withNext","emitOnSuccess","redirect","_createFormData","formData","FormData","File","useFromCache","getHomeFolder","myClients","checkCollabToken","register","deleteMyAccount","confirmEmail","confirmEmailChange","forgotPassword","email","optionalClientId","setNewPassword","accountExists","forceReload","cachedItems","queryArguments","returnClonedFrom","withThumbnails","getItemAggregatedPOP","getItemPublicAggregated","getItemAggregated","withFieldInstances","noAttributes","noUserAttributes","noThumbnails","noLinks","getItemAggregatedRecursive","getItemPublicRecursive","withFeatures","getItemPublic","getItemHistory","queryPublicItemsList","queryItemsListPOP","queryItemsList","queryItemsListAsExcel","exportAsExcel","click","cachedFile","requestSecureDownload","uploadThumbnail","bufferOrFile","makeItemPublic","inSubfolders","setVisibility","setOmitLodGeneration","setOmitThumbnailGeneration","setOmitPreviewGeneration","autoDestructIn","overwrite","upload","omitHandleDependencyChange","keepThumbnails","resetPreview","clearPreview","clearThumbnail","resetThumbnail","_getAttachmentUrlPath","isPublic","fileFromPackageCache","pkgTools.getAttachmentFromPackageCache","uploadAttachment","deleteAttachment","setPerceptiveHashOnAttachment","attachmentId","setPerceptiveHash","getItemClient","getItemAcl","getItemsLinking","setAttributes","idList","getItemSyncList","datestr","increaseViews","getViews","getPublicItemCounts","getItemCounts","likeItem","unlikeItem","doILike","setItemAutoDestruct","clearItemAutoDestruct","itemToSearch","pkgTools.getFolders","pkgTools.getItems","foundFolder","rewireItems","getFullFolderTree","cachedFolder","resolveNames","folderAsItemName","folderAsItemFlag","withStats","returnLatestPackage","notModified","getFolderAclList","aclData","updateFolderCache","IDs","lastUpdatedAt","folderListing","updateFolder","renameFolder","moveFolders","resolveFolderPath","getFolderClient","getFolderAcl","cachedAcl","ids","getUser","createUser","queryUser","searchQuery","groupID","updateUser","deleteUser","updateMyProfile","switchClient","activateUser","getUsersToApprove","approveUserRegistration","userId","rejectUserRegistration","uploadAvatar","clearAvatar","clientId","avatarSize","getUserAttribute","clearUserAttribute","setUserAttribute","getGroup","getGroupFolder","getGroupsList","createGroup","queryGroup","updateGroup","deleteGroup","getGroupQuotaInfo","groupId","getGroupUsers","uploadGroupAvatar","getClientsList","getClient","createClient","queryClient","updateClient","deleteClient","getClientMetrics","joinClient","leaveClient","myClient","saveMyClient","getPublicCategories","getCategories","getCategoriesInClient","updateCategoriesInClient","getLicenses","getLicensesInClient","getLicense","createLicense","updateLicense","deleteLicense","getPublicLicenses","getPublicLicense","getDatatypesList","getPublicDatatypesList","getDatatypesListOnClient","getDatatypesListOnClientForAll","getAllDatatypesList","getDatatype","createDatatype","updateDatatype","deleteDatatype","getMyNotifications","maxCount","markNotificationAsRead","markAllNotificationsAsRead","getManualJobTypes","getManualJobTypesOnClient","getManualJobTypesOnClientForAll","getAllManualJobTypes","getAllManualJobTypesForClient","getClientJobTypes","getMyJobs","getJobsAggregated","getJobsTimeframe","till","getJob","getAgents","getAgentsAggregated","enableJobAgent","disableJobAgent","restartJobAgent","getPermissionsList","getPlugins","getPlans","getPlan","createPlan","updatePlan","deletePlan","getWorkflows","getWorkflow","createWorkflow","updateWorkflow","deleteWorkflow","startWorkflow","getAccessTokens","getClientAccessTokens","createAccessToken","createClientAccessToken","deleteAccessToken","deleteClientAccessToken","enableAccessToken","disableAccessToken","getApiTokens","createApiToken","deleteApiToken","getMyClientInvoices","getMyUserInvoices","getClientInvoices","downloadInvoice","invoiceId","body","regenerateInvoice","getInvoicesForMonth","refundInvoice","invoice","amount","paymentStartCheckout","successUrl","cancelUrl","paymentStartUserCheckout","getSupportedCurrencies","getPurchasables","getPurchasable","createPurchasable","updatePurchasable","deletePurchasable","getPublicPurchasables","getPurchases","getMyActivePurchases","purchase","changePurchaseProduct","purchaseID","purchasableID","optionID","cancelPurchase","uncancelPurchase","getSecureSessionPayload","queryPurchases","startDate","endDate","getAttributeTemplates","getAttributeTemplate","createAttributeTemplate","updateAttributeTemplate","deleteAttributeTemplate","getStorages","getConversation","getPublicConversation","createConversation","postConversationMessage","replyTo","editConversationMessage","deleteConversationMessage","subscribeToConversation","unsubscribeFromConversation","likeConversationEntry","unlikeConversationEntry","command","getMailTemplates","getMailTemplate","createMailTemplate","updateMailTemplate","deleteMailTemplate","addMailTemplateImage","deleteMailTemplateImage","getMailTemplateNames","getMailQuery","templateName","dateStart","dateEnd","getMail","getInvoiceTemplates","getInvoiceTemplate","createInvoiceTemplate","updateInvoiceTemplate","deleteInvoiceTemplate","addInvoiceTemplateImage","deleteInvoiceTemplateImage","getItemTemplatesList","getItemTemplates","createItemTemplate","updateItemTemplate","deleteItemTemplate","getFeatures","getFeaturesOnClient","getFeaturesOnClientForAll","getAllFeatures","getBlogs","getBlog","getPublicBlog","createBlog","commentsEnabled","editors","saveBlog","deleteBlog","getBlogOverview","queryBlog","previousArticle","searchTag","sortBy","getArticles","blogID","getArticle","getArticleBySlug","slug","createArticle","title","saveArticle","author","deleteArticle","getNewsletters","createNewsletter","getNewsletter","updateNewsletter","sender","deleteNewsletter","joinNewsletter","confirmNewsletter","unsubscribeFromNewsletter","getNewsletterBlocks","getNewsletterBlock","createNewsletterBlock","updateNewsletterBlock","html","css","acceptsChildren","deleteNewsletterBlock","getNewsletterMails","newsletterID","getNewsletterMail","mailID","createNewsletterMail","updateNewsletterMail","generatePreviewNewsletterMail","sendTestNewsletter","recipientEmail","sendOutNewsletter","getPages","createPage","getPage","updatePage","deletePage","getPublicPage","setItemFlag","isStaffPick","featureWeight","isGame","replaceIndex","internalRating","getPublicAttachmentDownloadUrl","getPublicDownloadUrl","postFeedback"],"mappings":"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","x_google_ignoreList":[9,24,29,33,34,35,36,37,38,39,40,41,42,43,44,45,46,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92]}
|