{"version":3,"file":"vendor-825ee316.js","sources":["../../../ClientApp/node_modules/lodash.isequal/index.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/ErrorUtility.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerImpl.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerEventTypes.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerLogLevel.js","../../../ClientApp/node_modules/async-lock/lib/index.js","../../../ClientApp/node_modules/async-lock/index.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerEventPublisher.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerFetchInterceptor.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerLogger.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerSettings.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerState.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/UrlUtility.js","../../../ClientApp/__vite-browser-external","../../../ClientApp/node_modules/crypto-js/core.js","../../../ClientApp/node_modules/crypto-js/sha256.js","../../../ClientApp/node_modules/crypto-js/enc-base64.js","../../../ClientApp/node_modules/crypto-js/enc-utf8.js","../../../ClientApp/node_modules/jwt-decode/build/jwt-decode.esm.js","../../../ClientApp/node_modules/oidc-client-ts/dist/esm/oidc-client-ts.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/ProfileProxy.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/UserProxy.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/UserManagerProxy.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerTimeoutMonitor.js","../../../ClientApp/node_modules/@protolabs/enterprise-token-manager/dist/TokenManagerFactory.js","../../../ClientApp/node_modules/js-cookie/dist/js.cookie.mjs"],"sourcesContent":["/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\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/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\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\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\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\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\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\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\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 `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\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 array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\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 array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\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 a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\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 valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\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\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\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\n// Borrowed from https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript\nexport class ErrorUtility {\n getErrorMessage(error) {\n return this.toErrorWithMessage(error).message;\n }\n isErrorWithMessage(error) {\n return (typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof error.message === 'string');\n }\n toErrorWithMessage(maybeError) {\n if (this.isErrorWithMessage(maybeError)) {\n return maybeError;\n }\n try {\n return new Error(JSON.stringify(maybeError));\n }\n catch {\n // fallback in case there's an error stringifying the maybeError\n // like with circular references for example.\n return new Error(String(maybeError));\n }\n }\n}\n//# sourceMappingURL=ErrorUtility.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nimport isEqual from 'lodash.isequal';\nimport { ErrorUtility } from './ErrorUtility';\nclass TokenManagerImpl {\n constructor(settings, logger, lock, state, eventPublisher, userManager, timeoutMonitor) {\n this.inTokenRenewal = false;\n this.user = {};\n this.throwIfFalsy(settings, 'settings');\n this.throwIfFalsy(logger, 'logger');\n this.throwIfFalsy(lock, 'lock');\n this.throwIfFalsy(state, 'state');\n this.throwIfFalsy(eventPublisher, 'eventPublisher');\n this.throwIfFalsy(userManager, 'userManager');\n this.throwIfFalsy(timeoutMonitor, 'timeoutMonitor');\n this.errorUtility = new ErrorUtility();\n this.lock = lock;\n this.logger = logger;\n this.publisher = eventPublisher;\n this.settings = settings;\n this.state = state;\n this.userManager = userManager;\n this.timeoutManager = timeoutMonitor;\n this.registerUserManagerEvents();\n }\n get renewingToken() {\n return this.inTokenRenewal;\n }\n get claims() {\n const user = this.user;\n return user && user.profile ? user.profile : {};\n }\n isHandshaking() {\n return (window.location.href.toLowerCase().indexOf(this.settings.redirectUri.toLowerCase()) ===\n 0);\n }\n isOboSession() {\n const claims = this.claims;\n return !!claims && !!claims.amr && claims.amr.includes('obo');\n }\n isAuthenticated() {\n const user = this.user;\n return user && !!user.access_token;\n }\n /**\n * Initialize the tokenManager\n * @return {Promise} indicates if user is authenticated upon initialization\n */\n async initializeAsync() {\n const currentUser = await this.userManager.getUserAsync();\n if (!currentUser) {\n return false;\n }\n this.logger.info('TokenManager.initializeAsync: found existing user.');\n const oboId = new URLSearchParams(document.location.search).get(TokenManagerImpl.OboIndicator);\n if (oboId && oboId !== currentUser.profile.sub) {\n this.logger.info('TokenManager.initializeAsync: OBO customer changed. Existing session is invalid for the request.');\n await this.userManager.removeUserAsync();\n return false;\n }\n this.setUser(currentUser);\n return true;\n }\n /**\n * Begin the authentication process\n * @return {Promise} indicates if a redirect to auth has been trigggered\n */\n async startAuthenticationAsync(queryParams) {\n const currentUser = await this.userManager.getUserAsync();\n if (currentUser) {\n this.logger.info('TokenManager.startAuthenticationAsync: found existing user.');\n this.setUser(currentUser);\n return false;\n }\n if (this.state.signinAttempt === 0) {\n this.logger.info('TokenManager.startAuthenticationAsync: updating redirect route.');\n this.state.signinRedirect = this.determineActiveRoute();\n this.state.save();\n }\n this.logger.info('TokenManager.startAuthenticationAsync: starting signin.');\n const authArgs = this.getAuthenticationArgs(queryParams);\n await this.userManager.signinRedirectAsync(authArgs);\n return true;\n }\n /**\n * Complete the authentication process\n * @return {Promise}\n */\n async completeAuthenticationAsync() {\n let redirect;\n try {\n await this.userManager.signinCallbackAsync();\n redirect = this.state.signinRedirect;\n this.state.signinAttempt = 0;\n }\n catch (error) {\n this.logger.error(`TokenManager.completeAuthenticationAsync: ${this.errorUtility.getErrorMessage(error)}.`);\n if (this.state.signinAttempt <= this.settings.maxSigninAttempts) {\n this.logger.info('TokenManager.completeAuthenticationAsync: Attempting retry.');\n await this.userManager.removeUserAsync();\n redirect = this.state.signinRedirect;\n this.state.timeoutAt = undefined;\n this.state.signinAttempt++;\n }\n else {\n this.logger.error('TokenManager.completeAuthenticationAsync: All retries failed.');\n redirect = this.settings.errorRedirectUri;\n this.state.timeoutAt = undefined;\n this.state.signinAttempt = 0;\n }\n }\n finally {\n this.state.save();\n }\n return redirect;\n }\n /**\n * Get the access token\n * @return {Promise}\n */\n async getAccessTokenAsync(forceTokenRenew = false) {\n if (!this.user || !this.user.profile) {\n return '';\n }\n const currentUser = this.user;\n // If we're in the middle of renewing the token but the existing token is still valid, short circuit by returning the current/old token\n if (this.renewingToken &&\n currentUser.access_token &&\n currentUser.expires_in &&\n currentUser.expires_in > 1) {\n this.logger.info('TokenManager.getAccessTokenAsync: currently renewing; returning expiring but still valid token');\n return currentUser.access_token;\n }\n // Before we try to obtain a lock, check if we need to renew or not.\n if (forceTokenRenew ||\n !this.user.access_token ||\n (this.user.expires_in &&\n this.user.expires_in < this.settings.refreshAccessTokenExpireOffset)) {\n try {\n // We need to renew, try to obtain a lock.\n await this.lock.acquire(this.user.session_state, async () => {\n // Now that we have a lock, make sure we still need to renew.\n if (forceTokenRenew ||\n !this.user.access_token ||\n (this.user.expires_in &&\n this.user.expires_in < this.settings.refreshAccessTokenExpireOffset)) {\n const extraQueryParams = this.getAuthenticationArgs(null);\n try {\n this.inTokenRenewal = true;\n await this.userManager.signinSilentAsync(extraQueryParams);\n this.logger.info('TokenManager.getAccessTokenAsync: silently signed in.');\n this.updateUserTimeout();\n }\n catch (error) {\n const msg = this.errorUtility.getErrorMessage(error);\n if (msg === 'login_required') {\n if (this.timeoutManager.isTimedOut()) {\n this.logger.info('TokenManager.getAccessTokenAsync: login required, timing out.');\n await this.timeoutManager.timeout();\n }\n else {\n this.logger.info('TokenManager.getAccessTokenAsync: login required, signing out.');\n await this.signOutAsync();\n }\n }\n else if (msg === 'invalid_grant') {\n this.logger.info('TokenManager.getAccessTokenAsync: invalid grant, creating new session.');\n await this.userManager.removeUserAsync();\n await this.userManager.signinSilentAsync(extraQueryParams);\n this.logger.info('TokenManager.getAccessTokenAsync: invalid grant, silently signed in.');\n this.updateUserTimeout();\n }\n else {\n this.logger.error(`TokenManager.getAccessTokenAsync: silent signin failed - ${error}`);\n }\n }\n finally {\n this.inTokenRenewal = false;\n }\n }\n });\n }\n catch (err) {\n this.logger.error(`TokenManager.getAccessTokenAsync: Failed during lock acquisition - ${err}`);\n }\n }\n return this.user &&\n this.user.access_token &&\n this.user.expires_in &&\n this.user.expires_in > 0\n ? this.user.access_token\n : '';\n }\n /**\n * Sign out the user.\n * @param {String} redirect\n */\n async signOutAsync() {\n this.logger.info('TokenManager.signOutAsync: clearing timeout.');\n this.timeoutManager.clear();\n if (this.isOboSession()) {\n this.logger.info('TokenManager.signOutAsync: revoking access token for obo session');\n await this.userManager.revokeAccessTokenAsync();\n }\n else {\n this.logger.info('TokenManager.signOutAsync: begin signout redirect');\n await this.userManager.signoutRedirectAsync();\n }\n this.clearUser();\n }\n clearUser() {\n if (this.user.profile) {\n this.user = {};\n this.publisher.publishAuthenticationChanged(false);\n }\n }\n setUser(newUser) {\n let isNewUser = true;\n let hasUpdatedClaims = false;\n let hasNewRefreshToken = false;\n if (this.user && this.user.profile && newUser && newUser.profile) {\n isNewUser = this.user.profile.sub !== newUser.profile.sub;\n hasUpdatedClaims = !isEqual(this.user.profile, newUser.profile);\n hasNewRefreshToken = this.user.refresh_token !== newUser.refresh_token;\n }\n this.logger.info(`TokenManager.setUser: updating user (expires_in: ${newUser.expires_in})`);\n this.user = newUser;\n if (!this.timeoutManager.timeoutAt || hasNewRefreshToken) {\n this.updateUserTimeout();\n }\n if (isNewUser) {\n this.publisher.publishAuthenticationChanged(true);\n }\n if (hasUpdatedClaims) {\n this.publisher.publishClaimsUpdated();\n }\n }\n updateUserTimeout() {\n if (!this.user) {\n this.timeoutManager.clear();\n return;\n }\n this.logger.info('TokenManager.updateUserTimeout: updating timeout...');\n const profileTimeoutSecs = parseInt(this.user.profile.protolabs_timeout); // Assuming that protolabs_timeout is measured in seconds\n const actualTimeoutSecs = this.settings.maxRefreshTokenExpireSeconds\n ? Math.min(profileTimeoutSecs, this.settings.maxRefreshTokenExpireSeconds)\n : profileTimeoutSecs;\n this.timeoutManager.update(actualTimeoutSecs);\n }\n determineActiveRoute() {\n const params = new URLSearchParams(document.location.search);\n params.delete(TokenManagerImpl.OboIndicator);\n let search = params.toString();\n if (search.length > 0) {\n search = `?${search}`;\n }\n const route = `${document.location.pathname}${search}${document.location.hash || ''}`;\n this.logger.info(`TokenManager.determineActiveRoute - route is '${route}'`);\n return route;\n }\n getAuthenticationArgs(queryParams) {\n const extraQueryParams = queryParams || {};\n const params = new URLSearchParams(document.location.search);\n TokenManagerImpl.DefaultCopySearchParams.forEach((key) => {\n if (params.has(key)) {\n extraQueryParams[key] = params.get(key);\n }\n });\n if (this.isOboSession()) {\n extraQueryParams[TokenManagerImpl.OboIndicator] = this.user.profile.sub;\n }\n if (this.timeoutManager.isFlagged()) {\n extraQueryParams.timeout = true;\n }\n return {\n extraQueryParams: extraQueryParams,\n };\n }\n registerUserManagerEvents() {\n this.userManager.registerAddUserLoaded((loadedUser) => {\n this.setUser(loadedUser);\n });\n this.userManager.registerAddUserSignedOut(() => {\n if (!this.isOboSession()) {\n this.signOutAsync();\n }\n });\n this.userManager.registerAddUserUnloaded(() => {\n this.clearUser();\n });\n }\n throwIfFalsy(value, name) {\n if (!value) {\n throw Error(`${name} must be a valid object instance`);\n }\n }\n}\nTokenManagerImpl.OboIndicator = 'obo_id';\nTokenManagerImpl.DefaultCopySearchParams = [\n 'obo_id',\n 'lang',\n '_ga',\n 'utm_medium',\n 'utm_campaign',\n 'utm_source',\n 'utm_content',\n 'utm_term',\n];\nexport { TokenManagerImpl };\n//# sourceMappingURL=TokenManagerImpl.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nexport const TokenManagerEventTypes = {\n AuthenticationChanged: 'tokenManagerAuthenticationChanged',\n ClaimsUpdated: 'tokenManagerClaimsUpdated',\n};\n//# sourceMappingURL=TokenManagerEventTypes.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nexport const TokenManagerLogLevel = {\n None: 0,\n Error: 1,\n Warn: 2,\n Info: 3,\n Debug: 4,\n};\n//# sourceMappingURL=TokenManagerLogLevel.js.map","'use strict';\n\nvar AsyncLock = function (opts) {\n\topts = opts || {};\n\n\tthis.Promise = opts.Promise || Promise;\n\n\t// format: {key : [fn, fn]}\n\t// queues[key] = null indicates no job running for key\n\tthis.queues = Object.create(null);\n\n\t// lock is reentrant for same domain\n\tthis.domainReentrant = opts.domainReentrant || false;\n\tif (this.domainReentrant) {\n\t\tif (typeof process === 'undefined' || typeof process.domain === 'undefined') {\n\t\t\tthrow new Error(\n\t\t\t\t'Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, ' +\n\t\t\t\t'use a NodeJS version that still implements Domain, or install a browser polyfill.');\n\t\t}\n\t\t// domain of current running func {key : fn}\n\t\tthis.domains = Object.create(null);\n\t}\n\n\tthis.timeout = opts.timeout || AsyncLock.DEFAULT_TIMEOUT;\n\tthis.maxOccupationTime = opts.maxOccupationTime || AsyncLock.DEFAULT_MAX_OCCUPATION_TIME;\n\tif (opts.maxPending === Infinity || (Number.isInteger(opts.maxPending) && opts.maxPending >= 0)) {\n\t\tthis.maxPending = opts.maxPending;\n\t} else {\n\t\tthis.maxPending = AsyncLock.DEFAULT_MAX_PENDING;\n\t}\n};\n\nAsyncLock.DEFAULT_TIMEOUT = 0; //Never\nAsyncLock.DEFAULT_MAX_OCCUPATION_TIME = 0; //Never\nAsyncLock.DEFAULT_MAX_PENDING = 1000;\n\n/**\n * Acquire Locks\n *\n * @param {String|Array} key \tresource key or keys to lock\n * @param {function} fn \tasync function\n * @param {function} cb \tcallback function, otherwise will return a promise\n * @param {Object} opts \toptions\n */\nAsyncLock.prototype.acquire = function (key, fn, cb, opts) {\n\tif (Array.isArray(key)) {\n\t\treturn this._acquireBatch(key, fn, cb, opts);\n\t}\n\n\tif (typeof (fn) !== 'function') {\n\t\tthrow new Error('You must pass a function to execute');\n\t}\n\n\t// faux-deferred promise using new Promise() (as Promise.defer is deprecated)\n\tvar deferredResolve = null;\n\tvar deferredReject = null;\n\tvar deferred = null;\n\n\tif (typeof (cb) !== 'function') {\n\t\topts = cb;\n\t\tcb = null;\n\n\t\t// will return a promise\n\t\tdeferred = new this.Promise(function(resolve, reject) {\n\t\t\tdeferredResolve = resolve;\n\t\t\tdeferredReject = reject;\n\t\t});\n\t}\n\n\topts = opts || {};\n\n\tvar resolved = false;\n\tvar timer = null;\n\tvar occupationTimer = null;\n\tvar self = this;\n\n\tvar done = function (locked, err, ret) {\n\n\t\tif (occupationTimer) {\n\t\t\tclearTimeout(occupationTimer);\n\t\t\toccupationTimer = null;\n\t\t}\n\n\t\tif (locked) {\n\t\t\tif (!!self.queues[key] && self.queues[key].length === 0) {\n\t\t\t\tdelete self.queues[key];\n\t\t\t}\n\t\t\tif (self.domainReentrant) {\n\t\t\t\tdelete self.domains[key];\n\t\t\t}\n\t\t}\n\n\t\tif (!resolved) {\n\t\t\tif (!deferred) {\n\t\t\t\tif (typeof (cb) === 'function') {\n\t\t\t\t\tcb(err, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t//promise mode\n\t\t\t\tif (err) {\n\t\t\t\t\tdeferredReject(err);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdeferredResolve(ret);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolved = true;\n\t\t}\n\n\t\tif (locked) {\n\t\t\t//run next func\n\t\t\tif (!!self.queues[key] && self.queues[key].length > 0) {\n\t\t\t\tself.queues[key].shift()();\n\t\t\t}\n\t\t}\n\t};\n\n\tvar exec = function (locked) {\n\t\tif (resolved) { // may due to timed out\n\t\t\treturn done(locked);\n\t\t}\n\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\n\t\tif (self.domainReentrant && locked) {\n\t\t\tself.domains[key] = process.domain;\n\t\t}\n\n\t\t// Callback mode\n\t\tif (fn.length === 1) {\n\t\t\tvar called = false;\n\t\t\ttry {\n\t\t\t\tfn(function (err, ret) {\n\t\t\t\t\tif (!called) {\n\t\t\t\t\t\tcalled = true;\n\t\t\t\t\t\tdone(locked, err, ret);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\t// catching error thrown in user function fn\n\t\t\t\tif (!called) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tdone(locked, err);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Promise mode\n\t\t\tself._promiseTry(function () {\n\t\t\t\treturn fn();\n\t\t\t})\n\t\t\t.then(function(ret){\n\t\t\t\tdone(locked, undefined, ret);\n\t\t\t}, function(error){\n\t\t\t\tdone(locked, error);\n\t\t\t});\n\t\t}\n\t};\n\n\tif (self.domainReentrant && !!process.domain) {\n\t\texec = process.domain.bind(exec);\n\t}\n\n\tif (!self.queues[key]) {\n\t\tself.queues[key] = [];\n\t\texec(true);\n\t}\n\telse if (self.domainReentrant && !!process.domain && process.domain === self.domains[key]) {\n\t\t// If code is in the same domain of current running task, run it directly\n\t\t// Since lock is re-enterable\n\t\texec(false);\n\t}\n\telse if (self.queues[key].length >= self.maxPending) {\n\t\tdone(false, new Error('Too many pending tasks in queue ' + key));\n\t}\n\telse {\n\t\tvar taskFn = function () {\n\t\t\texec(true);\n\t\t};\n\t\tif (opts.skipQueue) {\n\t\t\tself.queues[key].unshift(taskFn);\n\t\t} else {\n\t\t\tself.queues[key].push(taskFn);\n\t\t}\n\n\t\tvar timeout = opts.timeout || self.timeout;\n\t\tif (timeout) {\n\t\t\ttimer = setTimeout(function () {\n\t\t\t\ttimer = null;\n\t\t\t\tdone(false, new Error('async-lock timed out in queue ' + key));\n\t\t\t}, timeout);\n\t\t}\n\t}\n\n\tvar maxOccupationTime = opts.maxOccupationTime || self.maxOccupationTime;\n\t\tif (maxOccupationTime) {\n\t\t\toccupationTimer = setTimeout(function () {\n\t\t\t\tif (!!self.queues[key]) {\n\t\t\t\t\tdone(false, new Error('Maximum occupation time is exceeded in queue ' + key));\n\t\t\t\t}\n\t\t\t}, maxOccupationTime);\n\t\t}\n\n\tif (deferred) {\n\t\treturn deferred;\n\t}\n};\n\n/*\n * Below is how this function works:\n *\n * Equivalent code:\n * self.acquire(key1, function(cb){\n * self.acquire(key2, function(cb){\n * self.acquire(key3, fn, cb);\n * }, cb);\n * }, cb);\n *\n * Equivalent code:\n * var fn3 = getFn(key3, fn);\n * var fn2 = getFn(key2, fn3);\n * var fn1 = getFn(key1, fn2);\n * fn1(cb);\n */\nAsyncLock.prototype._acquireBatch = function (keys, fn, cb, opts) {\n\tif (typeof (cb) !== 'function') {\n\t\topts = cb;\n\t\tcb = null;\n\t}\n\n\tvar self = this;\n\tvar getFn = function (key, fn) {\n\t\treturn function (cb) {\n\t\t\tself.acquire(key, fn, cb, opts);\n\t\t};\n\t};\n\n\tvar fnx = keys.reduceRight(function (prev, key) {\n\t\treturn getFn(key, prev);\n\t}, fn);\n\n\tif (typeof (cb) === 'function') {\n\t\tfnx(cb);\n\t}\n\telse {\n\t\treturn new this.Promise(function (resolve, reject) {\n\t\t\t// check for promise mode in case keys is empty array\n\t\t\tif (fnx.length === 1) {\n\t\t\t\tfnx(function (err, ret) {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(ret);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresolve(fnx());\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\n *\tWhether there is any running or pending asyncFunc\n *\n *\t@param {String} key\n */\nAsyncLock.prototype.isBusy = function (key) {\n\tif (!key) {\n\t\treturn Object.keys(this.queues).length > 0;\n\t}\n\telse {\n\t\treturn !!this.queues[key];\n\t}\n};\n\n/**\n * Promise.try() implementation to become independent of Q-specific methods\n */\nAsyncLock.prototype._promiseTry = function(fn) {\n\ttry {\n\t\treturn this.Promise.resolve(fn());\n\t} catch (e) {\n\t\treturn this.Promise.reject(e);\n\t}\n};\n\nmodule.exports = AsyncLock;\n","'use strict';\nmodule.exports = require('./lib');\n","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nimport { TokenManagerEventTypes } from './TokenManagerEventTypes';\nexport class TokenManagerEventPublisher {\n constructor(logger) {\n this.logger = logger;\n this.theWindow = window;\n }\n publishAuthenticationChanged(isAuthenticated) {\n this.logger.info(`TokenManagerEventPublisher.publishAuthenticationChanged: is authenticated is ${isAuthenticated}.`);\n this.publish(TokenManagerEventTypes.AuthenticationChanged, {\n isAuthenticated: isAuthenticated,\n });\n }\n publishClaimsUpdated() {\n this.logger.info('TokenManagerEventPublisher.publishClaimsUpdated.');\n this.publish(TokenManagerEventTypes.ClaimsUpdated);\n }\n publish(type, detail = {}) {\n this.theWindow.dispatchEvent(new CustomEvent(type, { detail }));\n }\n}\n//# sourceMappingURL=TokenManagerEventPublisher.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nexport class TokenManagerFetchInterceptor {\n constructor(tokenManager, logger, urlUtility, unauthenticatedDomains, registerGlobalFetch = true) {\n this.RetryStatusList = [401, 403];\n this.unauthenticatedDomains = [];\n this.originalFetch = window.fetch;\n this.tokenManager = tokenManager;\n this.logger = logger;\n this.urlUtility = urlUtility;\n this.unauthenticatedDomains = unauthenticatedDomains;\n if (registerGlobalFetch) {\n window.fetch = async (input, init) => window.tokenManagerFetchInterceptor.fetch(input, init);\n }\n }\n async fetch(input, init) {\n const url = input.url\n ? input.url.toLowerCase()\n : input.toString().toLowerCase();\n // The connect/ and .well-known paths are used by signinSilentAsync() during the token renewal process. They should not have an Authentication header.\n if (!this.tokenManager.isAuthenticated() ||\n (this.tokenManager.renewingToken &&\n (url.endsWith('connect/token') ||\n url.endsWith('connect/userinfo') ||\n url.endsWith('.well-known/openid-configuration'))) ||\n !this.urlUtility.isAuthenticatedDomain(input.toString(), this.unauthenticatedDomains)) {\n this.logger.info(`TokenManagerFetchInterceptor.fetch: unauthenticated or route designated as unauthenticated; skipping intercept for '${input}'.`);\n return this.originalFetch.call(window, input, init);\n }\n return this.fetchWithAuth(input, init);\n }\n async fetchWithAuth(input, init) {\n this.logger.info(`TokenManagerFetchInterceptor.fetchWithAuth: attempting fetch to route '${input}' with authentication header.`);\n const newInit = await this.prepareAuthenticatedRequestInit(init);\n let response = await this.originalFetch.call(window, input, newInit);\n if (this.RetryStatusList.includes(response.status)) {\n this.logger.warn(`TokenManagerFetchInterceptor.fetchWithAuth: retrying request due to HTTP ${response.status} response.`);\n response = await this.originalFetch.call(window, input, newInit);\n }\n return response;\n }\n async prepareAuthenticatedRequestInit(init) {\n init = init || {};\n init.headers = init.headers || {};\n let token = await this.tokenManager.getAccessTokenAsync(false);\n if (!token) {\n token = await this.tokenManager.getAccessTokenAsync(true);\n if (!token) {\n this.logger.error('TokenManagerFetchInterceptor.prepareAuthenticatedRequestInit: failed to get access token even after a forced refresh');\n return init;\n }\n }\n // @ts-ignore\n init.headers['Authorization'] = token ? `Bearer ${token}` : null;\n return init;\n }\n}\n//# sourceMappingURL=TokenManagerFetchInterceptor.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\n/* eslint-disable no-console */\nimport { TokenManagerLogLevel } from './TokenManagerLogLevel';\nexport class TokenManagerLogger {\n constructor(level) {\n this.level = TokenManagerLogLevel.Warn;\n this.setLevel(level);\n }\n getLevel() {\n return this.level;\n }\n setLevel(value) {\n if (TokenManagerLogLevel.None <= value && value <= TokenManagerLogLevel.Debug) {\n this.level = value;\n }\n else {\n this.level = TokenManagerLogLevel.Warn;\n }\n }\n debug(message) {\n if (this.level >= TokenManagerLogLevel.Debug) {\n console.debug(message);\n }\n }\n info(message) {\n if (this.level >= TokenManagerLogLevel.Info) {\n console.info(message);\n }\n }\n warn(message) {\n if (this.level >= TokenManagerLogLevel.Warn) {\n console.warn(message);\n }\n }\n error(message) {\n if (this.level >= TokenManagerLogLevel.Error) {\n console.error(message);\n }\n }\n}\n//# sourceMappingURL=TokenManagerLogger.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nimport { TokenManagerLogLevel } from './TokenManagerLogLevel';\nexport class TokenManagerSettings {\n constructor({ acrValues = 'idp:protolabs_okta', authority, clientId, logLevel = TokenManagerLogLevel.Warn, maxRefreshTokenExpireMinutes, monitorOnRedirectUri = true, postLogoutRedirectUri, redirectUri, refreshAccessTokenExpireOffset = 120, \n // The offline_access scope is present so the oidc-client User object gets a valid refresh_token upon login\n scope = 'openid profile email phone address offline_access global-api-access-scope', timeoutMonitorIntervalMilliseconds = 10000, filterProtocolClaims = true, }, logger, urlUtility) {\n this.automaticSilentRenew = false;\n this.monitorSession = true;\n this.responseType = 'code';\n this.loadUserInfo = true;\n this.revokeTokensOnSignout = true;\n this.stopCheckSessionOnError = false;\n this.maxRefreshTokenExpireSeconds = undefined;\n this.maxSigninAttempts = 2;\n this.monitorTimeout = true;\n this.throwIfInvalidString(authority, 'authority');\n this.throwIfInvalidString(clientId, 'clientId');\n this.throwIfInvalidString(postLogoutRedirectUri, 'postLogoutRedirectUri');\n this.throwIfInvalidString(redirectUri, 'redirectUri');\n this.throwIfInvalidString(scope, 'scope');\n this.logger = logger;\n this.urlUtility = urlUtility;\n this.acrValues = acrValues;\n this.authority = authority;\n this.clientId = clientId;\n this.logLevel = logLevel;\n this.maxRefreshTokenExpireSeconds = maxRefreshTokenExpireMinutes ? maxRefreshTokenExpireMinutes * 60 : undefined;\n this.monitorOnRedirectUri = !!monitorOnRedirectUri;\n this.postLogoutRedirectUri = postLogoutRedirectUri;\n this.redirectUri = redirectUri;\n this.refreshAccessTokenExpireOffset = refreshAccessTokenExpireOffset;\n this.scope = scope;\n this.timeoutMonitorIntervalMilliseconds = timeoutMonitorIntervalMilliseconds;\n this.filterProtocolClaims = filterProtocolClaims;\n if (!this.monitorOnRedirectUri && this.isAuthCallback()) {\n this.monitorSession = false;\n this.monitorTimeout = false;\n }\n if (this.monitorSession && !this.isSessionMonitoringSupported()) {\n this.logger.warn('TokenManagerSettings: disabling unsupported session monitoring.');\n this.monitorSession = false;\n }\n this.errorRedirectUri = `${new URL(this.authority).origin}/signin/error`;\n }\n throwIfInvalidString(value, name) {\n if (!(value === null || value === void 0 ? void 0 : value.trim())) {\n throw Error(`${name} cannot be null or empty and must be a string`);\n }\n }\n isAuthCallback() {\n return window.location.href.toLowerCase().startsWith(this.redirectUri.toLowerCase());\n }\n isSessionMonitoringSupported() {\n const authorityDomain = this.urlUtility.getDomain(this.authority);\n const redirectDomain = this.urlUtility.getDomain(this.redirectUri);\n this.logger.info(`TokenManagerSettings.isSessionMonitoringSupported: authority domain: ${authorityDomain}, redirect domain: ${redirectDomain}`);\n return authorityDomain === redirectDomain;\n }\n}\n//# sourceMappingURL=TokenManagerSettings.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nexport class TokenManagerState {\n constructor(clientId, logger, storage) {\n this.state = {};\n this.storageKey = `token-manager:${clientId}`;\n this.logger = logger;\n this.storage = storage;\n const text = this.storage.getItem(this.storageKey);\n if (text) {\n this.logger.debug('TokenManagerState.constructor: using state from storage.');\n this.state = JSON.parse(text);\n }\n }\n get signinAttempt() {\n return this.state.signin_attempt || 0;\n }\n set signinAttempt(value) {\n this.state.signin_attempt = value;\n }\n get signinRedirect() {\n return this.state.signin_redirect || '/';\n }\n set signinRedirect(value) {\n this.state.signin_redirect = value;\n }\n get timeoutAt() {\n return this.state.timeout_at || undefined;\n }\n set timeoutAt(value) {\n this.state.timeout_at = value;\n }\n save() {\n this.logger.debug('TokenManagerState.save: setting state in storage.');\n this.storage.setItem(this.storageKey, JSON.stringify(this.state));\n }\n clear() {\n this.state = {};\n this.storage.removeItem(this.storageKey);\n }\n}\n//# sourceMappingURL=TokenManagerState.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nclass UrlUtility {\n getDomain(url) {\n const hostname = this.getHostname(url);\n if (!hostname) {\n return '';\n }\n const splitHostName = hostname.split('.');\n if (splitHostName.length >= 2) {\n const secondToLastPieceOfDomain = splitHostName[splitHostName.length - 2];\n const lastPieceOfDomain = splitHostName[splitHostName.length - 1];\n return `${secondToLastPieceOfDomain}.${lastPieceOfDomain}`;\n }\n return '';\n }\n isAuthenticatedDomain(url, unauthenticatedDomains = []) {\n if (!url || url.length === 0) {\n return true;\n }\n const hostname = this.getHostname(url);\n if (url.includes('AWSAccessKeyId')) {\n return false;\n }\n if (!hostname) {\n return true;\n }\n if (unauthenticatedDomains.includes(hostname)) {\n return false;\n }\n for (const authDomain of UrlUtility.AuthenticatedDomains) {\n if (hostname.endsWith(authDomain)) {\n return true;\n }\n }\n return false;\n }\n getHostname(url) {\n try {\n const cleansedUrl = url.replace(/(\\t|\\r\\n|\\n|\\r)/gm, '');\n const parsedUrl = new URL(cleansedUrl);\n return parsedUrl.hostname.toLowerCase();\n }\n catch {\n return '';\n }\n }\n}\nUrlUtility.AuthenticatedDomains = [\n 'localhost',\n 'prlb.online',\n 'protolabs.io',\n 'protolabs.com',\n 'protolabs.co.uk',\n];\nexport { UrlUtility };\n//# sourceMappingURL=UrlUtility.js.map","export default {}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.enc.Utf8;\n\n}));","function e(e){this.message=e}e.prototype=new Error,e.prototype.name=\"InvalidCharacterError\";var r=\"undefined\"!=typeof window&&window.atob&&window.atob.bind(window)||function(r){var t=String(r).replace(/=+$/,\"\");if(t.length%4==1)throw new e(\"'atob' failed: The string to be decoded is not correctly encoded.\");for(var n,o,a=0,i=0,c=\"\";o=t.charAt(i++);~o&&(n=a%4?64*n+o:o,a++%4)?c+=String.fromCharCode(255&n>>(-2*a&6)):0)o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(o);return c};function t(e){var t=e.replace(/-/g,\"+\").replace(/_/g,\"/\");switch(t.length%4){case 0:break;case 2:t+=\"==\";break;case 3:t+=\"=\";break;default:throw\"Illegal base64url string!\"}try{return function(e){return decodeURIComponent(r(e).replace(/(.)/g,(function(e,r){var t=r.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t=\"0\"+t),\"%\"+t})))}(t)}catch(e){return r(t)}}function n(e){this.message=e}function o(e,r){if(\"string\"!=typeof e)throw new n(\"Invalid token specified\");var o=!0===(r=r||{}).header?0:1;try{return JSON.parse(t(e.split(\".\")[o]))}catch(e){throw new n(\"Invalid token specified: \"+e.message)}}n.prototype=new Error,n.prototype.name=\"InvalidTokenError\";export default o;export{n as InvalidTokenError};\n//# sourceMappingURL=jwt-decode.esm.js.map\n","// src/utils/CryptoUtils.ts\nimport CryptoJS from \"crypto-js/core.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport Base64 from \"crypto-js/enc-base64.js\";\nimport Utf8 from \"crypto-js/enc-utf8.js\";\n\n// src/utils/Logger.ts\nvar nopLogger = {\n debug: () => void 0,\n info: () => void 0,\n warn: () => void 0,\n error: () => void 0\n};\nvar level;\nvar logger;\nvar Log = /* @__PURE__ */ ((Log2) => {\n Log2[Log2[\"NONE\"] = 0] = \"NONE\";\n Log2[Log2[\"ERROR\"] = 1] = \"ERROR\";\n Log2[Log2[\"WARN\"] = 2] = \"WARN\";\n Log2[Log2[\"INFO\"] = 3] = \"INFO\";\n Log2[Log2[\"DEBUG\"] = 4] = \"DEBUG\";\n return Log2;\n})(Log || {});\n((Log2) => {\n function reset() {\n level = 3 /* INFO */;\n logger = nopLogger;\n }\n Log2.reset = reset;\n function setLevel(value) {\n if (!(0 /* NONE */ <= value && value <= 4 /* DEBUG */)) {\n throw new Error(\"Invalid log level\");\n }\n level = value;\n }\n Log2.setLevel = setLevel;\n function setLogger(value) {\n logger = value;\n }\n Log2.setLogger = setLogger;\n})(Log || (Log = {}));\nvar Logger = class {\n constructor(_name) {\n this._name = _name;\n }\n debug(...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(Logger._format(this._name, this._method), ...args);\n }\n }\n info(...args) {\n if (level >= 3 /* INFO */) {\n logger.info(Logger._format(this._name, this._method), ...args);\n }\n }\n warn(...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(Logger._format(this._name, this._method), ...args);\n }\n }\n error(...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(Logger._format(this._name, this._method), ...args);\n }\n }\n throw(err) {\n this.error(err);\n throw err;\n }\n create(method) {\n const methodLogger = Object.create(this);\n methodLogger._method = method;\n methodLogger.debug(\"begin\");\n return methodLogger;\n }\n static createStatic(name, staticMethod) {\n const staticLogger = new Logger(`${name}.${staticMethod}`);\n staticLogger.debug(\"begin\");\n return staticLogger;\n }\n static _format(name, method) {\n const prefix = `[${name}]`;\n return method ? `${prefix} ${method}:` : prefix;\n }\n // helpers for static class methods\n static debug(name, ...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(Logger._format(name), ...args);\n }\n }\n static info(name, ...args) {\n if (level >= 3 /* INFO */) {\n logger.info(Logger._format(name), ...args);\n }\n }\n static warn(name, ...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(Logger._format(name), ...args);\n }\n }\n static error(name, ...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(Logger._format(name), ...args);\n }\n }\n};\nLog.reset();\n\n// src/utils/CryptoUtils.ts\nvar UUID_V4_TEMPLATE = \"10000000-1000-4000-8000-100000000000\";\nvar CryptoUtils = class {\n static _randomWord() {\n return CryptoJS.lib.WordArray.random(1).words[0];\n }\n /**\n * Generates RFC4122 version 4 guid\n */\n static generateUUIDv4() {\n const uuid = UUID_V4_TEMPLATE.replace(\n /[018]/g,\n (c) => (+c ^ CryptoUtils._randomWord() & 15 >> +c / 4).toString(16)\n );\n return uuid.replace(/-/g, \"\");\n }\n /**\n * PKCE: Generate a code verifier\n */\n static generateCodeVerifier() {\n return CryptoUtils.generateUUIDv4() + CryptoUtils.generateUUIDv4() + CryptoUtils.generateUUIDv4();\n }\n /**\n * PKCE: Generate a code challenge\n */\n static generateCodeChallenge(code_verifier) {\n try {\n const hashed = sha256(code_verifier);\n return Base64.stringify(hashed).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n } catch (err) {\n Logger.error(\"CryptoUtils.generateCodeChallenge\", err);\n throw err;\n }\n }\n /**\n * Generates a base64-encoded string for a basic auth header\n */\n static generateBasicAuth(client_id, client_secret) {\n const basicAuth = Utf8.parse([client_id, client_secret].join(\":\"));\n return Base64.stringify(basicAuth);\n }\n};\n\n// src/utils/Event.ts\nvar Event = class {\n constructor(_name) {\n this._name = _name;\n this._logger = new Logger(`Event('${this._name}')`);\n this._callbacks = [];\n }\n addHandler(cb) {\n this._callbacks.push(cb);\n return () => this.removeHandler(cb);\n }\n removeHandler(cb) {\n const idx = this._callbacks.lastIndexOf(cb);\n if (idx >= 0) {\n this._callbacks.splice(idx, 1);\n }\n }\n raise(...ev) {\n this._logger.debug(\"raise:\", ...ev);\n for (const cb of this._callbacks) {\n void cb(...ev);\n }\n }\n};\n\n// src/utils/JwtUtils.ts\nimport jwt_decode from \"jwt-decode\";\nvar JwtUtils = class {\n // IMPORTANT: doesn't validate the token\n static decode(token) {\n try {\n return jwt_decode(token);\n } catch (err) {\n Logger.error(\"JwtUtils.decode\", err);\n throw err;\n }\n }\n};\n\n// src/utils/PopupUtils.ts\nvar PopupUtils = class {\n /**\n * Populates a map of window features with a placement centered in front of\n * the current window. If no explicit width is given, a default value is\n * binned into [800, 720, 600, 480, 360] based on the current window's width.\n */\n static center({ ...features }) {\n var _a, _b, _c;\n if (features.width == null)\n features.width = (_a = [800, 720, 600, 480].find((width) => width <= window.outerWidth / 1.618)) != null ? _a : 360;\n (_b = features.left) != null ? _b : features.left = Math.max(0, Math.round(window.screenX + (window.outerWidth - features.width) / 2));\n if (features.height != null)\n (_c = features.top) != null ? _c : features.top = Math.max(0, Math.round(window.screenY + (window.outerHeight - features.height) / 2));\n return features;\n }\n static serialize(features) {\n return Object.entries(features).filter(([, value]) => value != null).map(([key, value]) => `${key}=${typeof value !== \"boolean\" ? value : value ? \"yes\" : \"no\"}`).join(\",\");\n }\n};\n\n// src/utils/Timer.ts\nvar Timer = class extends Event {\n constructor() {\n super(...arguments);\n this._logger = new Logger(`Timer('${this._name}')`);\n this._timerHandle = null;\n this._expiration = 0;\n this._callback = () => {\n const diff = this._expiration - Timer.getEpochTime();\n this._logger.debug(\"timer completes in\", diff);\n if (this._expiration <= Timer.getEpochTime()) {\n this.cancel();\n super.raise();\n }\n };\n }\n // get the time\n static getEpochTime() {\n return Math.floor(Date.now() / 1e3);\n }\n init(durationInSeconds) {\n const logger2 = this._logger.create(\"init\");\n durationInSeconds = Math.max(Math.floor(durationInSeconds), 1);\n const expiration = Timer.getEpochTime() + durationInSeconds;\n if (this.expiration === expiration && this._timerHandle) {\n logger2.debug(\"skipping since already initialized for expiration at\", this.expiration);\n return;\n }\n this.cancel();\n logger2.debug(\"using duration\", durationInSeconds);\n this._expiration = expiration;\n const timerDurationInSeconds = Math.min(durationInSeconds, 5);\n this._timerHandle = setInterval(this._callback, timerDurationInSeconds * 1e3);\n }\n get expiration() {\n return this._expiration;\n }\n cancel() {\n this._logger.create(\"cancel\");\n if (this._timerHandle) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n};\n\n// src/utils/UrlUtils.ts\nvar UrlUtils = class {\n static readParams(url, responseMode = \"query\") {\n if (!url)\n throw new TypeError(\"Invalid URL\");\n const parsedUrl = new URL(url, \"http://127.0.0.1\");\n const params = parsedUrl[responseMode === \"fragment\" ? \"hash\" : \"search\"];\n return new URLSearchParams(params.slice(1));\n }\n};\n\n// src/errors/ErrorResponse.ts\nvar ErrorResponse = class extends Error {\n constructor(args, form) {\n var _a, _b, _c;\n super(args.error_description || args.error || \"\");\n this.form = form;\n /** Marker to detect class: \"ErrorResponse\" */\n this.name = \"ErrorResponse\";\n if (!args.error) {\n Logger.error(\"ErrorResponse\", \"No error passed\");\n throw new Error(\"No error passed\");\n }\n this.error = args.error;\n this.error_description = (_a = args.error_description) != null ? _a : null;\n this.error_uri = (_b = args.error_uri) != null ? _b : null;\n this.state = args.userState;\n this.session_state = (_c = args.session_state) != null ? _c : null;\n }\n};\n\n// src/errors/ErrorTimeout.ts\nvar ErrorTimeout = class extends Error {\n constructor(message) {\n super(message);\n /** Marker to detect class: \"ErrorTimeout\" */\n this.name = \"ErrorTimeout\";\n }\n};\n\n// src/AccessTokenEvents.ts\nvar AccessTokenEvents = class {\n constructor(args) {\n this._logger = new Logger(\"AccessTokenEvents\");\n this._expiringTimer = new Timer(\"Access token expiring\");\n this._expiredTimer = new Timer(\"Access token expired\");\n this._expiringNotificationTimeInSeconds = args.expiringNotificationTimeInSeconds;\n }\n load(container) {\n const logger2 = this._logger.create(\"load\");\n if (container.access_token && container.expires_in !== void 0) {\n const duration = container.expires_in;\n logger2.debug(\"access token present, remaining duration:\", duration);\n if (duration > 0) {\n let expiring = duration - this._expiringNotificationTimeInSeconds;\n if (expiring <= 0) {\n expiring = 1;\n }\n logger2.debug(\"registering expiring timer, raising in\", expiring, \"seconds\");\n this._expiringTimer.init(expiring);\n } else {\n logger2.debug(\"canceling existing expiring timer because we're past expiration.\");\n this._expiringTimer.cancel();\n }\n const expired = duration + 1;\n logger2.debug(\"registering expired timer, raising in\", expired, \"seconds\");\n this._expiredTimer.init(expired);\n } else {\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n }\n unload() {\n this._logger.debug(\"unload: canceling existing access token timers\");\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n /**\n * Add callback: Raised prior to the access token expiring.\n */\n addAccessTokenExpiring(cb) {\n return this._expiringTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised prior to the access token expiring.\n */\n removeAccessTokenExpiring(cb) {\n this._expiringTimer.removeHandler(cb);\n }\n /**\n * Add callback: Raised after the access token has expired.\n */\n addAccessTokenExpired(cb) {\n return this._expiredTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised after the access token has expired.\n */\n removeAccessTokenExpired(cb) {\n this._expiredTimer.removeHandler(cb);\n }\n};\n\n// src/CheckSessionIFrame.ts\nvar CheckSessionIFrame = class {\n constructor(_callback, _client_id, url, _intervalInSeconds, _stopOnError) {\n this._callback = _callback;\n this._client_id = _client_id;\n this._intervalInSeconds = _intervalInSeconds;\n this._stopOnError = _stopOnError;\n this._logger = new Logger(\"CheckSessionIFrame\");\n this._timer = null;\n this._session_state = null;\n this._message = (e) => {\n if (e.origin === this._frame_origin && e.source === this._frame.contentWindow) {\n if (e.data === \"error\") {\n this._logger.error(\"error message from check session op iframe\");\n if (this._stopOnError) {\n this.stop();\n }\n } else if (e.data === \"changed\") {\n this._logger.debug(\"changed message from check session op iframe\");\n this.stop();\n void this._callback();\n } else {\n this._logger.debug(e.data + \" message from check session op iframe\");\n }\n }\n };\n const parsedUrl = new URL(url);\n this._frame_origin = parsedUrl.origin;\n this._frame = window.document.createElement(\"iframe\");\n this._frame.style.visibility = \"hidden\";\n this._frame.style.position = \"fixed\";\n this._frame.style.left = \"-1000px\";\n this._frame.style.top = \"0\";\n this._frame.width = \"0\";\n this._frame.height = \"0\";\n this._frame.src = parsedUrl.href;\n }\n load() {\n return new Promise((resolve) => {\n this._frame.onload = () => {\n resolve();\n };\n window.document.body.appendChild(this._frame);\n window.addEventListener(\"message\", this._message, false);\n });\n }\n start(session_state) {\n if (this._session_state === session_state) {\n return;\n }\n this._logger.create(\"start\");\n this.stop();\n this._session_state = session_state;\n const send = () => {\n if (!this._frame.contentWindow || !this._session_state) {\n return;\n }\n this._frame.contentWindow.postMessage(this._client_id + \" \" + this._session_state, this._frame_origin);\n };\n send();\n this._timer = setInterval(send, this._intervalInSeconds * 1e3);\n }\n stop() {\n this._logger.create(\"stop\");\n this._session_state = null;\n if (this._timer) {\n clearInterval(this._timer);\n this._timer = null;\n }\n }\n};\n\n// src/InMemoryWebStorage.ts\nvar InMemoryWebStorage = class {\n constructor() {\n this._logger = new Logger(\"InMemoryWebStorage\");\n this._data = {};\n }\n clear() {\n this._logger.create(\"clear\");\n this._data = {};\n }\n getItem(key) {\n this._logger.create(`getItem('${key}')`);\n return this._data[key];\n }\n setItem(key, value) {\n this._logger.create(`setItem('${key}')`);\n this._data[key] = value;\n }\n removeItem(key) {\n this._logger.create(`removeItem('${key}')`);\n delete this._data[key];\n }\n get length() {\n return Object.getOwnPropertyNames(this._data).length;\n }\n key(index) {\n return Object.getOwnPropertyNames(this._data)[index];\n }\n};\n\n// src/JsonService.ts\nvar JsonService = class {\n constructor(additionalContentTypes = [], _jwtHandler = null, _extraHeaders = {}) {\n this._jwtHandler = _jwtHandler;\n this._extraHeaders = _extraHeaders;\n this._logger = new Logger(\"JsonService\");\n this._contentTypes = [];\n this._contentTypes.push(...additionalContentTypes, \"application/json\");\n if (_jwtHandler) {\n this._contentTypes.push(\"application/jwt\");\n }\n }\n async fetchWithTimeout(input, init = {}) {\n const { timeoutInSeconds, ...initFetch } = init;\n if (!timeoutInSeconds) {\n return await fetch(input, initFetch);\n }\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutInSeconds * 1e3);\n try {\n const response = await fetch(input, {\n ...init,\n signal: controller.signal\n });\n return response;\n } catch (err) {\n if (err instanceof DOMException && err.name === \"AbortError\") {\n throw new ErrorTimeout(\"Network timed out\");\n }\n throw err;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n async getJson(url, {\n token,\n credentials\n } = {}) {\n const logger2 = this._logger.create(\"getJson\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \")\n };\n if (token) {\n logger2.debug(\"token passed, setting Authorization header\");\n headers[\"Authorization\"] = \"Bearer \" + token;\n }\n this.appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"GET\", headers, credentials });\n } catch (err) {\n logger2.error(\"Network Error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n logger2.throw(new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`));\n }\n if (response.ok && this._jwtHandler && (contentType == null ? void 0 : contentType.startsWith(\"application/jwt\"))) {\n return await this._jwtHandler(await response.text());\n }\n let json;\n try {\n json = await response.json();\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok)\n throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n async postForm(url, {\n body,\n basicAuth,\n timeoutInSeconds,\n initCredentials\n }) {\n const logger2 = this._logger.create(\"postForm\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \"),\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n };\n if (basicAuth !== void 0) {\n headers[\"Authorization\"] = \"Basic \" + basicAuth;\n }\n this.appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"POST\", headers, body, timeoutInSeconds, credentials: initCredentials });\n } catch (err) {\n logger2.error(\"Network error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n throw new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`);\n }\n const responseText = await response.text();\n let json = {};\n if (responseText) {\n try {\n json = JSON.parse(responseText);\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok)\n throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json, body);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n appendExtraHeaders(headers) {\n const logger2 = this._logger.create(\"appendExtraHeaders\");\n const customKeys = Object.keys(this._extraHeaders);\n const protectedHeaders = [\n \"authorization\",\n \"accept\",\n \"content-type\"\n ];\n if (customKeys.length === 0) {\n return;\n }\n customKeys.forEach((headerName) => {\n if (protectedHeaders.includes(headerName.toLocaleLowerCase())) {\n logger2.warn(\"Protected header could not be overridden\", headerName, protectedHeaders);\n return;\n }\n const content = typeof this._extraHeaders[headerName] === \"function\" ? this._extraHeaders[headerName]() : this._extraHeaders[headerName];\n if (content && content !== \"\") {\n headers[headerName] = content;\n }\n });\n }\n};\n\n// src/MetadataService.ts\nvar MetadataService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"MetadataService\");\n this._signingKeys = null;\n this._metadata = null;\n this._metadataUrl = this._settings.metadataUrl;\n this._jsonService = new JsonService(\n [\"application/jwk-set+json\"],\n null,\n this._settings.extraHeaders\n );\n if (this._settings.signingKeys) {\n this._logger.debug(\"using signingKeys from settings\");\n this._signingKeys = this._settings.signingKeys;\n }\n if (this._settings.metadata) {\n this._logger.debug(\"using metadata from settings\");\n this._metadata = this._settings.metadata;\n }\n if (this._settings.fetchRequestCredentials) {\n this._logger.debug(\"using fetchRequestCredentials from settings\");\n this._fetchRequestCredentials = this._settings.fetchRequestCredentials;\n }\n }\n resetSigningKeys() {\n this._signingKeys = null;\n }\n async getMetadata() {\n const logger2 = this._logger.create(\"getMetadata\");\n if (this._metadata) {\n logger2.debug(\"using cached values\");\n return this._metadata;\n }\n if (!this._metadataUrl) {\n logger2.throw(new Error(\"No authority or metadataUrl configured on settings\"));\n throw null;\n }\n logger2.debug(\"getting metadata from\", this._metadataUrl);\n const metadata = await this._jsonService.getJson(this._metadataUrl, { credentials: this._fetchRequestCredentials });\n logger2.debug(\"merging remote JSON with seed metadata\");\n this._metadata = Object.assign({}, this._settings.metadataSeed, metadata);\n return this._metadata;\n }\n getIssuer() {\n return this._getMetadataProperty(\"issuer\");\n }\n getAuthorizationEndpoint() {\n return this._getMetadataProperty(\"authorization_endpoint\");\n }\n getUserInfoEndpoint() {\n return this._getMetadataProperty(\"userinfo_endpoint\");\n }\n getTokenEndpoint(optional = true) {\n return this._getMetadataProperty(\"token_endpoint\", optional);\n }\n getCheckSessionIframe() {\n return this._getMetadataProperty(\"check_session_iframe\", true);\n }\n getEndSessionEndpoint() {\n return this._getMetadataProperty(\"end_session_endpoint\", true);\n }\n getRevocationEndpoint(optional = true) {\n return this._getMetadataProperty(\"revocation_endpoint\", optional);\n }\n getKeysEndpoint(optional = true) {\n return this._getMetadataProperty(\"jwks_uri\", optional);\n }\n async _getMetadataProperty(name, optional = false) {\n const logger2 = this._logger.create(`_getMetadataProperty('${name}')`);\n const metadata = await this.getMetadata();\n logger2.debug(\"resolved\");\n if (metadata[name] === void 0) {\n if (optional === true) {\n logger2.warn(\"Metadata does not contain optional property\");\n return void 0;\n }\n logger2.throw(new Error(\"Metadata does not contain property \" + name));\n }\n return metadata[name];\n }\n async getSigningKeys() {\n const logger2 = this._logger.create(\"getSigningKeys\");\n if (this._signingKeys) {\n logger2.debug(\"returning signingKeys from cache\");\n return this._signingKeys;\n }\n const jwks_uri = await this.getKeysEndpoint(false);\n logger2.debug(\"got jwks_uri\", jwks_uri);\n const keySet = await this._jsonService.getJson(jwks_uri);\n logger2.debug(\"got key set\", keySet);\n if (!Array.isArray(keySet.keys)) {\n logger2.throw(new Error(\"Missing keys on keyset\"));\n throw null;\n }\n this._signingKeys = keySet.keys;\n return this._signingKeys;\n }\n};\n\n// src/WebStorageStateStore.ts\nvar WebStorageStateStore = class {\n constructor({\n prefix = \"oidc.\",\n store = localStorage\n } = {}) {\n this._logger = new Logger(\"WebStorageStateStore\");\n this._store = store;\n this._prefix = prefix;\n }\n async set(key, value) {\n this._logger.create(`set('${key}')`);\n key = this._prefix + key;\n await this._store.setItem(key, value);\n }\n async get(key) {\n this._logger.create(`get('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n return item;\n }\n async remove(key) {\n this._logger.create(`remove('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n await this._store.removeItem(key);\n return item;\n }\n async getAllKeys() {\n this._logger.create(\"getAllKeys\");\n const len = await this._store.length;\n const keys = [];\n for (let index = 0; index < len; index++) {\n const key = await this._store.key(index);\n if (key && key.indexOf(this._prefix) === 0) {\n keys.push(key.substr(this._prefix.length));\n }\n }\n return keys;\n }\n};\n\n// src/OidcClientSettings.ts\nvar DefaultResponseType = \"code\";\nvar DefaultScope = \"openid\";\nvar DefaultClientAuthentication = \"client_secret_post\";\nvar DefaultResponseMode = \"query\";\nvar DefaultStaleStateAgeInSeconds = 60 * 15;\nvar DefaultClockSkewInSeconds = 60 * 5;\nvar OidcClientSettingsStore = class {\n constructor({\n // metadata related\n authority,\n metadataUrl,\n metadata,\n signingKeys,\n metadataSeed,\n // client related\n client_id,\n client_secret,\n response_type = DefaultResponseType,\n scope = DefaultScope,\n redirect_uri,\n post_logout_redirect_uri,\n client_authentication = DefaultClientAuthentication,\n // optional protocol\n prompt,\n display,\n max_age,\n ui_locales,\n acr_values,\n resource,\n response_mode = DefaultResponseMode,\n // behavior flags\n filterProtocolClaims = true,\n loadUserInfo = false,\n staleStateAgeInSeconds = DefaultStaleStateAgeInSeconds,\n clockSkewInSeconds = DefaultClockSkewInSeconds,\n userInfoJwtIssuer = \"OP\",\n mergeClaims = false,\n disablePKCE = false,\n // other behavior\n stateStore,\n refreshTokenCredentials,\n revokeTokenAdditionalContentTypes,\n fetchRequestCredentials,\n refreshTokenAllowedScope,\n // extra\n extraQueryParams = {},\n extraTokenParams = {},\n extraHeaders = {}\n }) {\n this.authority = authority;\n if (metadataUrl) {\n this.metadataUrl = metadataUrl;\n } else {\n this.metadataUrl = authority;\n if (authority) {\n if (!this.metadataUrl.endsWith(\"/\")) {\n this.metadataUrl += \"/\";\n }\n this.metadataUrl += \".well-known/openid-configuration\";\n }\n }\n this.metadata = metadata;\n this.metadataSeed = metadataSeed;\n this.signingKeys = signingKeys;\n this.client_id = client_id;\n this.client_secret = client_secret;\n this.response_type = response_type;\n this.scope = scope;\n this.redirect_uri = redirect_uri;\n this.post_logout_redirect_uri = post_logout_redirect_uri;\n this.client_authentication = client_authentication;\n this.prompt = prompt;\n this.display = display;\n this.max_age = max_age;\n this.ui_locales = ui_locales;\n this.acr_values = acr_values;\n this.resource = resource;\n this.response_mode = response_mode;\n this.filterProtocolClaims = filterProtocolClaims != null ? filterProtocolClaims : true;\n this.loadUserInfo = !!loadUserInfo;\n this.staleStateAgeInSeconds = staleStateAgeInSeconds;\n this.clockSkewInSeconds = clockSkewInSeconds;\n this.userInfoJwtIssuer = userInfoJwtIssuer;\n this.mergeClaims = !!mergeClaims;\n this.disablePKCE = !!disablePKCE;\n this.revokeTokenAdditionalContentTypes = revokeTokenAdditionalContentTypes;\n if (fetchRequestCredentials && refreshTokenCredentials) {\n console.warn(\"Both fetchRequestCredentials and refreshTokenCredentials is set. Only fetchRequestCredentials will be used.\");\n }\n this.fetchRequestCredentials = fetchRequestCredentials ? fetchRequestCredentials : refreshTokenCredentials ? refreshTokenCredentials : \"same-origin\";\n if (stateStore) {\n this.stateStore = stateStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.localStorage : new InMemoryWebStorage();\n this.stateStore = new WebStorageStateStore({ store });\n }\n this.refreshTokenAllowedScope = refreshTokenAllowedScope;\n this.extraQueryParams = extraQueryParams;\n this.extraTokenParams = extraTokenParams;\n this.extraHeaders = extraHeaders;\n }\n};\n\n// src/UserInfoService.ts\nvar UserInfoService = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"UserInfoService\");\n this._getClaimsFromJwt = async (responseText) => {\n const logger2 = this._logger.create(\"_getClaimsFromJwt\");\n try {\n const payload = JwtUtils.decode(responseText);\n logger2.debug(\"JWT decoding successful\");\n return payload;\n } catch (err) {\n logger2.error(\"Error parsing JWT response\");\n throw err;\n }\n };\n this._jsonService = new JsonService(\n void 0,\n this._getClaimsFromJwt,\n this._settings.extraHeaders\n );\n }\n async getClaims(token) {\n const logger2 = this._logger.create(\"getClaims\");\n if (!token) {\n this._logger.throw(new Error(\"No token passed\"));\n }\n const url = await this._metadataService.getUserInfoEndpoint();\n logger2.debug(\"got userinfo url\", url);\n const claims = await this._jsonService.getJson(url, {\n token,\n credentials: this._settings.fetchRequestCredentials\n });\n logger2.debug(\"got claims\", claims);\n return claims;\n }\n};\n\n// src/TokenClient.ts\nvar TokenClient = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"TokenClient\");\n this._jsonService = new JsonService(\n this._settings.revokeTokenAdditionalContentTypes,\n null,\n this._settings.extraHeaders\n );\n }\n /**\n * Exchange code.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3\n */\n async exchangeCode({\n grant_type = \"authorization_code\",\n redirect_uri = this._settings.redirect_uri,\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCode\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!redirect_uri) {\n logger2.throw(new Error(\"A redirect_uri is required\"));\n }\n if (!args.code) {\n logger2.throw(new Error(\"A code is required\"));\n }\n const params = new URLSearchParams({ grant_type, redirect_uri });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange credentials.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2\n */\n async exchangeCredentials({\n grant_type = \"password\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n scope = this._settings.scope,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCredentials\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n const params = new URLSearchParams({ grant_type, scope });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange a refresh token.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-6\n */\n async exchangeRefreshToken({\n grant_type = \"refresh_token\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n timeoutInSeconds,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeRefreshToken\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!args.refresh_token) {\n logger2.throw(new Error(\"A refresh_token is required\"));\n }\n const params = new URLSearchParams({ grant_type });\n for (const [key, value] of Object.entries(args)) {\n if (Array.isArray(value)) {\n value.forEach((param) => params.append(key, param));\n } else if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Revoke an access or refresh token.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7009#section-2.1\n */\n async revoke(args) {\n var _a;\n const logger2 = this._logger.create(\"revoke\");\n if (!args.token) {\n logger2.throw(new Error(\"A token is required\"));\n }\n const url = await this._metadataService.getRevocationEndpoint(false);\n logger2.debug(`got revocation endpoint, revoking ${(_a = args.token_type_hint) != null ? _a : \"default token type\"}`);\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n params.set(\"client_id\", this._settings.client_id);\n if (this._settings.client_secret) {\n params.set(\"client_secret\", this._settings.client_secret);\n }\n await this._jsonService.postForm(url, { body: params });\n logger2.debug(\"got response\");\n }\n};\n\n// src/ResponseValidator.ts\nvar ResponseValidator = class {\n constructor(_settings, _metadataService, _claimsService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._claimsService = _claimsService;\n this._logger = new Logger(\"ResponseValidator\");\n this._userInfoService = new UserInfoService(this._settings, this._metadataService);\n this._tokenClient = new TokenClient(this._settings, this._metadataService);\n }\n async validateSigninResponse(response, state) {\n const logger2 = this._logger.create(\"validateSigninResponse\");\n this._processSigninState(response, state);\n logger2.debug(\"state processed\");\n await this._processCode(response, state);\n logger2.debug(\"code processed\");\n if (response.isOpenId) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, state == null ? void 0 : state.skipUserInfo, response.isOpenId);\n logger2.debug(\"claims processed\");\n }\n async validateCredentialsResponse(response, skipUserInfo) {\n const logger2 = this._logger.create(\"validateCredentialsResponse\");\n if (response.isOpenId) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, skipUserInfo, response.isOpenId);\n logger2.debug(\"claims processed\");\n }\n async validateRefreshResponse(response, state) {\n var _a, _b;\n const logger2 = this._logger.create(\"validateRefreshResponse\");\n response.userState = state.data;\n (_a = response.session_state) != null ? _a : response.session_state = state.session_state;\n (_b = response.scope) != null ? _b : response.scope = state.scope;\n if (response.isOpenId && !!response.id_token) {\n this._validateIdTokenAttributes(response, state.id_token);\n logger2.debug(\"ID Token validated\");\n }\n if (!response.id_token) {\n response.id_token = state.id_token;\n response.profile = state.profile;\n }\n const hasIdToken = response.isOpenId && !!response.id_token;\n await this._processClaims(response, false, hasIdToken);\n logger2.debug(\"claims processed\");\n }\n validateSignoutResponse(response, state) {\n const logger2 = this._logger.create(\"validateSignoutResponse\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n }\n _processSigninState(response, state) {\n var _a;\n const logger2 = this._logger.create(\"_processSigninState\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n if (!state.client_id) {\n logger2.throw(new Error(\"No client_id on state\"));\n }\n if (!state.authority) {\n logger2.throw(new Error(\"No authority on state\"));\n }\n if (this._settings.authority !== state.authority) {\n logger2.throw(new Error(\"authority mismatch on settings vs. signin state\"));\n }\n if (this._settings.client_id && this._settings.client_id !== state.client_id) {\n logger2.throw(new Error(\"client_id mismatch on settings vs. signin state\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n (_a = response.scope) != null ? _a : response.scope = state.scope;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n if (state.code_verifier && !response.code) {\n logger2.throw(new Error(\"Expected code in response\"));\n }\n }\n async _processClaims(response, skipUserInfo = false, validateSub = true) {\n const logger2 = this._logger.create(\"_processClaims\");\n response.profile = this._claimsService.filterProtocolClaims(response.profile);\n if (skipUserInfo || !this._settings.loadUserInfo || !response.access_token) {\n logger2.debug(\"not loading user info\");\n return;\n }\n logger2.debug(\"loading user info\");\n const claims = await this._userInfoService.getClaims(response.access_token);\n logger2.debug(\"user info claims received from user info endpoint\");\n if (validateSub && claims.sub !== response.profile.sub) {\n logger2.throw(new Error(\"subject from UserInfo response does not match subject in ID Token\"));\n }\n response.profile = this._claimsService.mergeClaims(response.profile, this._claimsService.filterProtocolClaims(claims));\n logger2.debug(\"user info claims received, updated profile:\", response.profile);\n }\n async _processCode(response, state) {\n const logger2 = this._logger.create(\"_processCode\");\n if (response.code) {\n logger2.debug(\"Validating code\");\n const tokenResponse = await this._tokenClient.exchangeCode({\n client_id: state.client_id,\n client_secret: state.client_secret,\n code: response.code,\n redirect_uri: state.redirect_uri,\n code_verifier: state.code_verifier,\n ...state.extraTokenParams\n });\n Object.assign(response, tokenResponse);\n } else {\n logger2.debug(\"No code to process\");\n }\n }\n _validateIdTokenAttributes(response, existingToken) {\n var _a;\n const logger2 = this._logger.create(\"_validateIdTokenAttributes\");\n logger2.debug(\"decoding ID Token JWT\");\n const incoming = JwtUtils.decode((_a = response.id_token) != null ? _a : \"\");\n if (!incoming.sub) {\n logger2.throw(new Error(\"ID Token is missing a subject claim\"));\n }\n if (existingToken) {\n const existing = JwtUtils.decode(existingToken);\n if (incoming.sub !== existing.sub) {\n logger2.throw(new Error(\"sub in id_token does not match current sub\"));\n }\n if (incoming.auth_time && incoming.auth_time !== existing.auth_time) {\n logger2.throw(new Error(\"auth_time in id_token does not match original auth_time\"));\n }\n if (incoming.azp && incoming.azp !== existing.azp) {\n logger2.throw(new Error(\"azp in id_token does not match original azp\"));\n }\n if (!incoming.azp && existing.azp) {\n logger2.throw(new Error(\"azp not in id_token, but present in original id_token\"));\n }\n }\n response.profile = incoming;\n }\n};\n\n// src/State.ts\nvar State = class {\n constructor(args) {\n this.id = args.id || CryptoUtils.generateUUIDv4();\n this.data = args.data;\n if (args.created && args.created > 0) {\n this.created = args.created;\n } else {\n this.created = Timer.getEpochTime();\n }\n this.request_type = args.request_type;\n }\n toStorageString() {\n new Logger(\"State\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"State\", \"fromStorageString\");\n return new State(JSON.parse(storageString));\n }\n static async clearStaleState(storage, age) {\n const logger2 = Logger.createStatic(\"State\", \"clearStaleState\");\n const cutoff = Timer.getEpochTime() - age;\n const keys = await storage.getAllKeys();\n logger2.debug(\"got keys\", keys);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const item = await storage.get(key);\n let remove = false;\n if (item) {\n try {\n const state = State.fromStorageString(item);\n logger2.debug(\"got item from key:\", key, state.created);\n if (state.created <= cutoff) {\n remove = true;\n }\n } catch (err) {\n logger2.error(\"Error parsing state for key:\", key, err);\n remove = true;\n }\n } else {\n logger2.debug(\"no item in storage for key:\", key);\n remove = true;\n }\n if (remove) {\n logger2.debug(\"removed item for key:\", key);\n void storage.remove(key);\n }\n }\n }\n};\n\n// src/SigninState.ts\nvar SigninState = class extends State {\n constructor(args) {\n super(args);\n if (args.code_verifier === true) {\n this.code_verifier = CryptoUtils.generateCodeVerifier();\n } else if (args.code_verifier) {\n this.code_verifier = args.code_verifier;\n }\n if (this.code_verifier) {\n this.code_challenge = CryptoUtils.generateCodeChallenge(this.code_verifier);\n }\n this.authority = args.authority;\n this.client_id = args.client_id;\n this.redirect_uri = args.redirect_uri;\n this.scope = args.scope;\n this.client_secret = args.client_secret;\n this.extraTokenParams = args.extraTokenParams;\n this.response_mode = args.response_mode;\n this.skipUserInfo = args.skipUserInfo;\n }\n toStorageString() {\n new Logger(\"SigninState\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n code_verifier: this.code_verifier,\n authority: this.authority,\n client_id: this.client_id,\n redirect_uri: this.redirect_uri,\n scope: this.scope,\n client_secret: this.client_secret,\n extraTokenParams: this.extraTokenParams,\n response_mode: this.response_mode,\n skipUserInfo: this.skipUserInfo\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"SigninState\", \"fromStorageString\");\n const data = JSON.parse(storageString);\n return new SigninState(data);\n }\n};\n\n// src/SigninRequest.ts\nvar SigninRequest = class {\n constructor({\n // mandatory\n url,\n authority,\n client_id,\n redirect_uri,\n response_type,\n scope,\n // optional\n state_data,\n response_mode,\n request_type,\n client_secret,\n nonce,\n resource,\n skipUserInfo,\n extraQueryParams,\n extraTokenParams,\n disablePKCE,\n ...optionalParams\n }) {\n this._logger = new Logger(\"SigninRequest\");\n if (!url) {\n this._logger.error(\"ctor: No url passed\");\n throw new Error(\"url\");\n }\n if (!client_id) {\n this._logger.error(\"ctor: No client_id passed\");\n throw new Error(\"client_id\");\n }\n if (!redirect_uri) {\n this._logger.error(\"ctor: No redirect_uri passed\");\n throw new Error(\"redirect_uri\");\n }\n if (!response_type) {\n this._logger.error(\"ctor: No response_type passed\");\n throw new Error(\"response_type\");\n }\n if (!scope) {\n this._logger.error(\"ctor: No scope passed\");\n throw new Error(\"scope\");\n }\n if (!authority) {\n this._logger.error(\"ctor: No authority passed\");\n throw new Error(\"authority\");\n }\n this.state = new SigninState({\n data: state_data,\n request_type,\n code_verifier: !disablePKCE,\n client_id,\n authority,\n redirect_uri,\n response_mode,\n client_secret,\n scope,\n extraTokenParams,\n skipUserInfo\n });\n const parsedUrl = new URL(url);\n parsedUrl.searchParams.append(\"client_id\", client_id);\n parsedUrl.searchParams.append(\"redirect_uri\", redirect_uri);\n parsedUrl.searchParams.append(\"response_type\", response_type);\n parsedUrl.searchParams.append(\"scope\", scope);\n if (nonce) {\n parsedUrl.searchParams.append(\"nonce\", nonce);\n }\n parsedUrl.searchParams.append(\"state\", this.state.id);\n if (this.state.code_challenge) {\n parsedUrl.searchParams.append(\"code_challenge\", this.state.code_challenge);\n parsedUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n }\n if (resource) {\n const resources = Array.isArray(resource) ? resource : [resource];\n resources.forEach((r) => parsedUrl.searchParams.append(\"resource\", r));\n }\n for (const [key, value] of Object.entries({ response_mode, ...optionalParams, ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n this.url = parsedUrl.href;\n }\n};\n\n// src/SigninResponse.ts\nvar OidcScope = \"openid\";\nvar SigninResponse = class {\n constructor(params) {\n /** @see {@link User.access_token} */\n this.access_token = \"\";\n /** @see {@link User.token_type} */\n this.token_type = \"\";\n /** @see {@link User.profile} */\n this.profile = {};\n this.state = params.get(\"state\");\n this.session_state = params.get(\"session_state\");\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n this.code = params.get(\"code\");\n }\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (typeof value === \"string\")\n value = Number(value);\n if (value !== void 0 && value >= 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n get isOpenId() {\n var _a;\n return ((_a = this.scope) == null ? void 0 : _a.split(\" \").includes(OidcScope)) || !!this.id_token;\n }\n};\n\n// src/SignoutRequest.ts\nvar SignoutRequest = class {\n constructor({\n url,\n state_data,\n id_token_hint,\n post_logout_redirect_uri,\n extraQueryParams,\n request_type,\n client_id\n }) {\n this._logger = new Logger(\"SignoutRequest\");\n if (!url) {\n this._logger.error(\"ctor: No url passed\");\n throw new Error(\"url\");\n }\n const parsedUrl = new URL(url);\n if (id_token_hint) {\n parsedUrl.searchParams.append(\"id_token_hint\", id_token_hint);\n }\n if (client_id) {\n parsedUrl.searchParams.append(\"client_id\", client_id);\n }\n if (post_logout_redirect_uri) {\n parsedUrl.searchParams.append(\"post_logout_redirect_uri\", post_logout_redirect_uri);\n if (state_data) {\n this.state = new State({ data: state_data, request_type });\n parsedUrl.searchParams.append(\"state\", this.state.id);\n }\n }\n for (const [key, value] of Object.entries({ ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n this.url = parsedUrl.href;\n }\n};\n\n// src/SignoutResponse.ts\nvar SignoutResponse = class {\n constructor(params) {\n this.state = params.get(\"state\");\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n }\n};\n\n// src/ClaimsService.ts\nvar DefaultProtocolClaims = [\n \"nbf\",\n \"jti\",\n \"auth_time\",\n \"nonce\",\n \"acr\",\n \"amr\",\n \"azp\",\n \"at_hash\"\n // https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken\n];\nvar InternalRequiredProtocolClaims = [\"sub\", \"iss\", \"aud\", \"exp\", \"iat\"];\nvar ClaimsService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"ClaimsService\");\n }\n filterProtocolClaims(claims) {\n const result = { ...claims };\n if (this._settings.filterProtocolClaims) {\n let protocolClaims;\n if (Array.isArray(this._settings.filterProtocolClaims)) {\n protocolClaims = this._settings.filterProtocolClaims;\n } else {\n protocolClaims = DefaultProtocolClaims;\n }\n for (const claim of protocolClaims) {\n if (!InternalRequiredProtocolClaims.includes(claim)) {\n delete result[claim];\n }\n }\n }\n return result;\n }\n mergeClaims(claims1, claims2) {\n const result = { ...claims1 };\n for (const [claim, values] of Object.entries(claims2)) {\n for (const value of Array.isArray(values) ? values : [values]) {\n const previousValue = result[claim];\n if (!previousValue) {\n result[claim] = value;\n } else if (Array.isArray(previousValue)) {\n if (!previousValue.includes(value)) {\n previousValue.push(value);\n }\n } else if (result[claim] !== value) {\n if (typeof value === \"object\" && this._settings.mergeClaims) {\n result[claim] = this.mergeClaims(previousValue, value);\n } else {\n result[claim] = [previousValue, value];\n }\n }\n }\n }\n return result;\n }\n};\n\n// src/OidcClient.ts\nvar OidcClient = class {\n constructor(settings, metadataService) {\n this._logger = new Logger(\"OidcClient\");\n this.settings = settings instanceof OidcClientSettingsStore ? settings : new OidcClientSettingsStore(settings);\n this.metadataService = metadataService != null ? metadataService : new MetadataService(this.settings);\n this._claimsService = new ClaimsService(this.settings);\n this._validator = new ResponseValidator(this.settings, this.metadataService, this._claimsService);\n this._tokenClient = new TokenClient(this.settings, this.metadataService);\n }\n async createSigninRequest({\n state,\n request,\n request_uri,\n request_type,\n id_token_hint,\n login_hint,\n skipUserInfo,\n nonce,\n response_type = this.settings.response_type,\n scope = this.settings.scope,\n redirect_uri = this.settings.redirect_uri,\n prompt = this.settings.prompt,\n display = this.settings.display,\n max_age = this.settings.max_age,\n ui_locales = this.settings.ui_locales,\n acr_values = this.settings.acr_values,\n resource = this.settings.resource,\n response_mode = this.settings.response_mode,\n extraQueryParams = this.settings.extraQueryParams,\n extraTokenParams = this.settings.extraTokenParams\n }) {\n const logger2 = this._logger.create(\"createSigninRequest\");\n if (response_type !== \"code\") {\n throw new Error(\"Only the Authorization Code flow (with PKCE) is supported\");\n }\n const url = await this.metadataService.getAuthorizationEndpoint();\n logger2.debug(\"Received authorization endpoint\", url);\n const signinRequest = new SigninRequest({\n url,\n authority: this.settings.authority,\n client_id: this.settings.client_id,\n redirect_uri,\n response_type,\n scope,\n state_data: state,\n prompt,\n display,\n max_age,\n ui_locales,\n id_token_hint,\n login_hint,\n acr_values,\n resource,\n request,\n request_uri,\n extraQueryParams,\n extraTokenParams,\n request_type,\n response_mode,\n client_secret: this.settings.client_secret,\n skipUserInfo,\n nonce,\n disablePKCE: this.settings.disablePKCE\n });\n await this.clearStaleState();\n const signinState = signinRequest.state;\n await this.settings.stateStore.set(signinState.id, signinState.toStorageString());\n return signinRequest;\n }\n async readSigninResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSigninResponseState\");\n const response = new SigninResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.throw(new Error(\"No state in response\"));\n throw null;\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = SigninState.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSigninResponse(url) {\n const logger2 = this._logger.create(\"processSigninResponse\");\n const { state, response } = await this.readSigninResponseState(url, true);\n logger2.debug(\"received state from storage; validating response\");\n await this._validator.validateSigninResponse(response, state);\n return response;\n }\n async processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo = false,\n extraTokenParams = {}\n }) {\n const tokenResponse = await this._tokenClient.exchangeCredentials({ username, password, ...extraTokenParams });\n const signinResponse = new SigninResponse(new URLSearchParams());\n Object.assign(signinResponse, tokenResponse);\n await this._validator.validateCredentialsResponse(signinResponse, skipUserInfo);\n return signinResponse;\n }\n async useRefreshToken({\n state,\n timeoutInSeconds\n }) {\n var _a;\n const logger2 = this._logger.create(\"useRefreshToken\");\n let scope;\n if (this.settings.refreshTokenAllowedScope === void 0) {\n scope = state.scope;\n } else {\n const allowableScopes = this.settings.refreshTokenAllowedScope.split(\" \");\n const providedScopes = ((_a = state.scope) == null ? void 0 : _a.split(\" \")) || [];\n scope = providedScopes.filter((s) => allowableScopes.includes(s)).join(\" \");\n }\n const result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n resource: state.resource,\n // provide the (possible filtered) scope list\n scope,\n timeoutInSeconds\n });\n const response = new SigninResponse(new URLSearchParams());\n Object.assign(response, result);\n logger2.debug(\"validating response\", response);\n await this._validator.validateRefreshResponse(response, {\n ...state,\n // overide the scope in the state handed over to the validator\n // so it can set the granted scope to the requested scope in case none is included in the response\n scope\n });\n return response;\n }\n async createSignoutRequest({\n state,\n id_token_hint,\n client_id,\n request_type,\n post_logout_redirect_uri = this.settings.post_logout_redirect_uri,\n extraQueryParams = this.settings.extraQueryParams\n } = {}) {\n const logger2 = this._logger.create(\"createSignoutRequest\");\n const url = await this.metadataService.getEndSessionEndpoint();\n if (!url) {\n logger2.throw(new Error(\"No end session endpoint\"));\n throw null;\n }\n logger2.debug(\"Received end session endpoint\", url);\n if (!client_id && post_logout_redirect_uri && !id_token_hint) {\n client_id = this.settings.client_id;\n }\n const request = new SignoutRequest({\n url,\n id_token_hint,\n client_id,\n post_logout_redirect_uri,\n state_data: state,\n extraQueryParams,\n request_type\n });\n await this.clearStaleState();\n const signoutState = request.state;\n if (signoutState) {\n logger2.debug(\"Signout request has state to persist\");\n await this.settings.stateStore.set(signoutState.id, signoutState.toStorageString());\n }\n return request;\n }\n async readSignoutResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSignoutResponseState\");\n const response = new SignoutResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.debug(\"No state in response\");\n if (response.error) {\n logger2.warn(\"Response was error:\", response.error);\n throw new ErrorResponse(response);\n }\n return { state: void 0, response };\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = State.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSignoutResponse(url) {\n const logger2 = this._logger.create(\"processSignoutResponse\");\n const { state, response } = await this.readSignoutResponseState(url, true);\n if (state) {\n logger2.debug(\"Received state from storage; validating response\");\n this._validator.validateSignoutResponse(response, state);\n } else {\n logger2.debug(\"No state from storage; skipping response validation\");\n }\n return response;\n }\n clearStaleState() {\n this._logger.create(\"clearStaleState\");\n return State.clearStaleState(this.settings.stateStore, this.settings.staleStateAgeInSeconds);\n }\n async revokeToken(token, type) {\n this._logger.create(\"revokeToken\");\n return await this._tokenClient.revoke({\n token,\n token_type_hint: type\n });\n }\n};\n\n// src/SessionMonitor.ts\nvar SessionMonitor = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SessionMonitor\");\n this._start = async (user) => {\n const session_state = user.session_state;\n if (!session_state) {\n return;\n }\n const logger2 = this._logger.create(\"_start\");\n if (user.profile) {\n this._sub = user.profile.sub;\n this._sid = user.profile.sid;\n logger2.debug(\"session_state\", session_state, \", sub\", this._sub);\n } else {\n this._sub = void 0;\n this._sid = void 0;\n logger2.debug(\"session_state\", session_state, \", anonymous user\");\n }\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.start(session_state);\n return;\n }\n try {\n const url = await this._userManager.metadataService.getCheckSessionIframe();\n if (url) {\n logger2.debug(\"initializing check session iframe\");\n const client_id = this._userManager.settings.client_id;\n const intervalInSeconds = this._userManager.settings.checkSessionIntervalInSeconds;\n const stopOnError = this._userManager.settings.stopCheckSessionOnError;\n const checkSessionIFrame = new CheckSessionIFrame(this._callback, client_id, url, intervalInSeconds, stopOnError);\n await checkSessionIFrame.load();\n this._checkSessionIFrame = checkSessionIFrame;\n checkSessionIFrame.start(session_state);\n } else {\n logger2.warn(\"no check session iframe found in the metadata\");\n }\n } catch (err) {\n logger2.error(\"Error from getCheckSessionIframe:\", err instanceof Error ? err.message : err);\n }\n };\n this._stop = () => {\n const logger2 = this._logger.create(\"_stop\");\n this._sub = void 0;\n this._sid = void 0;\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.stop();\n }\n if (this._userManager.settings.monitorAnonymousSession) {\n const timerHandle = setInterval(async () => {\n clearInterval(timerHandle);\n try {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub && session.sid ? {\n sub: session.sub,\n sid: session.sid\n } : null\n };\n void this._start(tmpUser);\n }\n } catch (err) {\n logger2.error(\"error from querySessionStatus\", err instanceof Error ? err.message : err);\n }\n }, 1e3);\n }\n };\n this._callback = async () => {\n const logger2 = this._logger.create(\"_callback\");\n try {\n const session = await this._userManager.querySessionStatus();\n let raiseEvent = true;\n if (session && this._checkSessionIFrame) {\n if (session.sub === this._sub) {\n raiseEvent = false;\n this._checkSessionIFrame.start(session.session_state);\n if (session.sid === this._sid) {\n logger2.debug(\"same sub still logged in at OP, restarting check session iframe; session_state\", session.session_state);\n } else {\n logger2.debug(\"same sub still logged in at OP, session state has changed, restarting check session iframe; session_state\", session.session_state);\n this._userManager.events._raiseUserSessionChanged();\n }\n } else {\n logger2.debug(\"different subject signed into OP\", session.sub);\n }\n } else {\n logger2.debug(\"subject no longer signed into OP\");\n }\n if (raiseEvent) {\n if (this._sub) {\n this._userManager.events._raiseUserSignedOut();\n } else {\n this._userManager.events._raiseUserSignedIn();\n }\n } else {\n logger2.debug(\"no change in session detected, no event to raise\");\n }\n } catch (err) {\n if (this._sub) {\n logger2.debug(\"Error calling queryCurrentSigninSession; raising signed out event\", err);\n this._userManager.events._raiseUserSignedOut();\n }\n }\n };\n if (!_userManager) {\n this._logger.throw(new Error(\"No user manager passed\"));\n }\n this._userManager.events.addUserLoaded(this._start);\n this._userManager.events.addUserUnloaded(this._stop);\n this._init().catch((err) => {\n this._logger.error(err);\n });\n }\n async _init() {\n this._logger.create(\"_init\");\n const user = await this._userManager.getUser();\n if (user) {\n void this._start(user);\n } else if (this._userManager.settings.monitorAnonymousSession) {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub && session.sid ? {\n sub: session.sub,\n sid: session.sid\n } : null\n };\n void this._start(tmpUser);\n }\n }\n }\n};\n\n// src/User.ts\nvar User = class {\n constructor(args) {\n var _a;\n this.id_token = args.id_token;\n this.session_state = (_a = args.session_state) != null ? _a : null;\n this.access_token = args.access_token;\n this.refresh_token = args.refresh_token;\n this.token_type = args.token_type;\n this.scope = args.scope;\n this.profile = args.profile;\n this.expires_at = args.expires_at;\n this.state = args.userState;\n }\n /** Computed number of seconds the access token has remaining. */\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (value !== void 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n /** Computed value indicating if the access token is expired. */\n get expired() {\n const expires_in = this.expires_in;\n if (expires_in === void 0) {\n return void 0;\n }\n return expires_in <= 0;\n }\n /** Array representing the parsed values from the `scope`. */\n get scopes() {\n var _a, _b;\n return (_b = (_a = this.scope) == null ? void 0 : _a.split(\" \")) != null ? _b : [];\n }\n toStorageString() {\n new Logger(\"User\").create(\"toStorageString\");\n return JSON.stringify({\n id_token: this.id_token,\n session_state: this.session_state,\n access_token: this.access_token,\n refresh_token: this.refresh_token,\n token_type: this.token_type,\n scope: this.scope,\n profile: this.profile,\n expires_at: this.expires_at\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"User\", \"fromStorageString\");\n return new User(JSON.parse(storageString));\n }\n};\n\n// src/navigators/AbstractChildWindow.ts\nvar messageSource = \"oidc-client\";\nvar AbstractChildWindow = class {\n constructor() {\n this._abort = new Event(\"Window navigation aborted\");\n this._disposeHandlers = /* @__PURE__ */ new Set();\n this._window = null;\n }\n async navigate(params) {\n const logger2 = this._logger.create(\"navigate\");\n if (!this._window) {\n throw new Error(\"Attempted to navigate on a disposed window\");\n }\n logger2.debug(\"setting URL in window\");\n this._window.location.replace(params.url);\n const { url, keepOpen } = await new Promise((resolve, reject) => {\n const listener = (e) => {\n var _a;\n const data = e.data;\n const origin = (_a = params.scriptOrigin) != null ? _a : window.location.origin;\n if (e.origin !== origin || (data == null ? void 0 : data.source) !== messageSource) {\n return;\n }\n try {\n const state = UrlUtils.readParams(data.url, params.response_mode).get(\"state\");\n if (!state) {\n logger2.warn(\"no state found in response url\");\n }\n if (e.source !== this._window && state !== params.state) {\n return;\n }\n } catch (err) {\n this._dispose();\n reject(new Error(\"Invalid response from window\"));\n }\n resolve(data);\n };\n window.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => window.removeEventListener(\"message\", listener, false));\n this._disposeHandlers.add(this._abort.addHandler((reason) => {\n this._dispose();\n reject(reason);\n }));\n });\n logger2.debug(\"got response from window\");\n this._dispose();\n if (!keepOpen) {\n this.close();\n }\n return { url };\n }\n _dispose() {\n this._logger.create(\"_dispose\");\n for (const dispose of this._disposeHandlers) {\n dispose();\n }\n this._disposeHandlers.clear();\n }\n static _notifyParent(parent, url, keepOpen = false, targetOrigin = window.location.origin) {\n parent.postMessage({\n source: messageSource,\n url,\n keepOpen\n }, targetOrigin);\n }\n};\n\n// src/UserManagerSettings.ts\nvar DefaultPopupWindowFeatures = {\n location: false,\n toolbar: false,\n height: 640\n};\nvar DefaultPopupTarget = \"_blank\";\nvar DefaultAccessTokenExpiringNotificationTimeInSeconds = 60;\nvar DefaultCheckSessionIntervalInSeconds = 2;\nvar DefaultSilentRequestTimeoutInSeconds = 10;\nvar UserManagerSettingsStore = class extends OidcClientSettingsStore {\n constructor(args) {\n const {\n popup_redirect_uri = args.redirect_uri,\n popup_post_logout_redirect_uri = args.post_logout_redirect_uri,\n popupWindowFeatures = DefaultPopupWindowFeatures,\n popupWindowTarget = DefaultPopupTarget,\n redirectMethod = \"assign\",\n redirectTarget = \"self\",\n iframeNotifyParentOrigin = args.iframeNotifyParentOrigin,\n iframeScriptOrigin = args.iframeScriptOrigin,\n silent_redirect_uri = args.redirect_uri,\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds,\n automaticSilentRenew = true,\n validateSubOnSilentRenew = true,\n includeIdTokenInSilentRenew = false,\n monitorSession = false,\n monitorAnonymousSession = false,\n checkSessionIntervalInSeconds = DefaultCheckSessionIntervalInSeconds,\n query_status_response_type = \"code\",\n stopCheckSessionOnError = true,\n revokeTokenTypes = [\"access_token\", \"refresh_token\"],\n revokeTokensOnSignout = false,\n includeIdTokenInSilentSignout = false,\n accessTokenExpiringNotificationTimeInSeconds = DefaultAccessTokenExpiringNotificationTimeInSeconds,\n userStore\n } = args;\n super(args);\n this.popup_redirect_uri = popup_redirect_uri;\n this.popup_post_logout_redirect_uri = popup_post_logout_redirect_uri;\n this.popupWindowFeatures = popupWindowFeatures;\n this.popupWindowTarget = popupWindowTarget;\n this.redirectMethod = redirectMethod;\n this.redirectTarget = redirectTarget;\n this.iframeNotifyParentOrigin = iframeNotifyParentOrigin;\n this.iframeScriptOrigin = iframeScriptOrigin;\n this.silent_redirect_uri = silent_redirect_uri;\n this.silentRequestTimeoutInSeconds = silentRequestTimeoutInSeconds;\n this.automaticSilentRenew = automaticSilentRenew;\n this.validateSubOnSilentRenew = validateSubOnSilentRenew;\n this.includeIdTokenInSilentRenew = includeIdTokenInSilentRenew;\n this.monitorSession = monitorSession;\n this.monitorAnonymousSession = monitorAnonymousSession;\n this.checkSessionIntervalInSeconds = checkSessionIntervalInSeconds;\n this.stopCheckSessionOnError = stopCheckSessionOnError;\n this.query_status_response_type = query_status_response_type;\n this.revokeTokenTypes = revokeTokenTypes;\n this.revokeTokensOnSignout = revokeTokensOnSignout;\n this.includeIdTokenInSilentSignout = includeIdTokenInSilentSignout;\n this.accessTokenExpiringNotificationTimeInSeconds = accessTokenExpiringNotificationTimeInSeconds;\n if (userStore) {\n this.userStore = userStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.sessionStorage : new InMemoryWebStorage();\n this.userStore = new WebStorageStateStore({ store });\n }\n }\n};\n\n// src/navigators/IFrameWindow.ts\nvar IFrameWindow = class extends AbstractChildWindow {\n constructor({\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds\n }) {\n super();\n this._logger = new Logger(\"IFrameWindow\");\n this._timeoutInSeconds = silentRequestTimeoutInSeconds;\n this._frame = IFrameWindow.createHiddenIframe();\n this._window = this._frame.contentWindow;\n }\n static createHiddenIframe() {\n const iframe = window.document.createElement(\"iframe\");\n iframe.style.visibility = \"hidden\";\n iframe.style.position = \"fixed\";\n iframe.style.left = \"-1000px\";\n iframe.style.top = \"0\";\n iframe.width = \"0\";\n iframe.height = \"0\";\n window.document.body.appendChild(iframe);\n return iframe;\n }\n async navigate(params) {\n this._logger.debug(\"navigate: Using timeout of:\", this._timeoutInSeconds);\n const timer = setTimeout(() => this._abort.raise(new ErrorTimeout(\"IFrame timed out without a response\")), this._timeoutInSeconds * 1e3);\n this._disposeHandlers.add(() => clearTimeout(timer));\n return await super.navigate(params);\n }\n close() {\n var _a;\n if (this._frame) {\n if (this._frame.parentNode) {\n this._frame.addEventListener(\"load\", (ev) => {\n var _a2;\n const frame = ev.target;\n (_a2 = frame.parentNode) == null ? void 0 : _a2.removeChild(frame);\n this._abort.raise(new Error(\"IFrame removed from DOM\"));\n }, true);\n (_a = this._frame.contentWindow) == null ? void 0 : _a.location.replace(\"about:blank\");\n }\n this._frame = null;\n }\n this._window = null;\n }\n static notifyParent(url, targetOrigin) {\n return super._notifyParent(window.parent, url, false, targetOrigin);\n }\n};\n\n// src/navigators/IFrameNavigator.ts\nvar IFrameNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"IFrameNavigator\");\n }\n async prepare({\n silentRequestTimeoutInSeconds = this._settings.silentRequestTimeoutInSeconds\n }) {\n return new IFrameWindow({ silentRequestTimeoutInSeconds });\n }\n async callback(url) {\n this._logger.create(\"callback\");\n IFrameWindow.notifyParent(url, this._settings.iframeNotifyParentOrigin);\n }\n};\n\n// src/navigators/PopupWindow.ts\nvar checkForPopupClosedInterval = 500;\nvar PopupWindow = class extends AbstractChildWindow {\n constructor({\n popupWindowTarget = DefaultPopupTarget,\n popupWindowFeatures = {}\n }) {\n super();\n this._logger = new Logger(\"PopupWindow\");\n const centeredPopup = PopupUtils.center({ ...DefaultPopupWindowFeatures, ...popupWindowFeatures });\n this._window = window.open(void 0, popupWindowTarget, PopupUtils.serialize(centeredPopup));\n }\n async navigate(params) {\n var _a;\n (_a = this._window) == null ? void 0 : _a.focus();\n const popupClosedInterval = setInterval(() => {\n if (!this._window || this._window.closed) {\n this._abort.raise(new Error(\"Popup closed by user\"));\n }\n }, checkForPopupClosedInterval);\n this._disposeHandlers.add(() => clearInterval(popupClosedInterval));\n return await super.navigate(params);\n }\n close() {\n if (this._window) {\n if (!this._window.closed) {\n this._window.close();\n this._abort.raise(new Error(\"Popup closed\"));\n }\n }\n this._window = null;\n }\n static notifyOpener(url, keepOpen) {\n if (!window.opener) {\n throw new Error(\"No window.opener. Can't complete notification.\");\n }\n return super._notifyParent(window.opener, url, keepOpen);\n }\n};\n\n// src/navigators/PopupNavigator.ts\nvar PopupNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"PopupNavigator\");\n }\n async prepare({\n popupWindowFeatures = this._settings.popupWindowFeatures,\n popupWindowTarget = this._settings.popupWindowTarget\n }) {\n return new PopupWindow({ popupWindowFeatures, popupWindowTarget });\n }\n async callback(url, keepOpen = false) {\n this._logger.create(\"callback\");\n PopupWindow.notifyOpener(url, keepOpen);\n }\n};\n\n// src/navigators/RedirectNavigator.ts\nvar RedirectNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"RedirectNavigator\");\n }\n async prepare({\n redirectMethod = this._settings.redirectMethod,\n redirectTarget = this._settings.redirectTarget\n }) {\n var _a;\n this._logger.create(\"prepare\");\n let targetWindow = window.self;\n if (redirectTarget === \"top\") {\n targetWindow = (_a = window.top) != null ? _a : window.self;\n }\n const redirect = targetWindow.location[redirectMethod].bind(targetWindow.location);\n let abort;\n return {\n navigate: async (params) => {\n this._logger.create(\"navigate\");\n const promise = new Promise((resolve, reject) => {\n abort = reject;\n });\n redirect(params.url);\n return await promise;\n },\n close: () => {\n this._logger.create(\"close\");\n abort == null ? void 0 : abort(new Error(\"Redirect aborted\"));\n targetWindow.stop();\n }\n };\n }\n};\n\n// src/UserManagerEvents.ts\nvar UserManagerEvents = class extends AccessTokenEvents {\n constructor(settings) {\n super({ expiringNotificationTimeInSeconds: settings.accessTokenExpiringNotificationTimeInSeconds });\n this._logger = new Logger(\"UserManagerEvents\");\n this._userLoaded = new Event(\"User loaded\");\n this._userUnloaded = new Event(\"User unloaded\");\n this._silentRenewError = new Event(\"Silent renew error\");\n this._userSignedIn = new Event(\"User signed in\");\n this._userSignedOut = new Event(\"User signed out\");\n this._userSessionChanged = new Event(\"User session changed\");\n }\n load(user, raiseEvent = true) {\n super.load(user);\n if (raiseEvent) {\n this._userLoaded.raise(user);\n }\n }\n unload() {\n super.unload();\n this._userUnloaded.raise();\n }\n /**\n * Add callback: Raised when a user session has been established (or re-established).\n */\n addUserLoaded(cb) {\n return this._userLoaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been established (or re-established).\n */\n removeUserLoaded(cb) {\n return this._userLoaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when a user session has been terminated.\n */\n addUserUnloaded(cb) {\n return this._userUnloaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been terminated.\n */\n removeUserUnloaded(cb) {\n return this._userUnloaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when the automatic silent renew has failed.\n */\n addSilentRenewError(cb) {\n return this._silentRenewError.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the automatic silent renew has failed.\n */\n removeSilentRenewError(cb) {\n return this._silentRenewError.removeHandler(cb);\n }\n /**\n * @internal\n */\n _raiseSilentRenewError(e) {\n this._silentRenewError.raise(e);\n }\n /**\n * Add callback: Raised when the user is signed in (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedIn(cb) {\n return this._userSignedIn.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user is signed in (when `monitorSession` is set).\n */\n removeUserSignedIn(cb) {\n this._userSignedIn.removeHandler(cb);\n }\n /**\n * @internal\n */\n _raiseUserSignedIn() {\n this._userSignedIn.raise();\n }\n /**\n * Add callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedOut(cb) {\n return this._userSignedOut.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n */\n removeUserSignedOut(cb) {\n this._userSignedOut.removeHandler(cb);\n }\n /**\n * @internal\n */\n _raiseUserSignedOut() {\n this._userSignedOut.raise();\n }\n /**\n * Add callback: Raised when the user session changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSessionChanged(cb) {\n return this._userSessionChanged.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user session changed (when `monitorSession` is set).\n */\n removeUserSessionChanged(cb) {\n this._userSessionChanged.removeHandler(cb);\n }\n /**\n * @internal\n */\n _raiseUserSessionChanged() {\n this._userSessionChanged.raise();\n }\n};\n\n// src/SilentRenewService.ts\nvar SilentRenewService = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SilentRenewService\");\n this._isStarted = false;\n this._retryTimer = new Timer(\"Retry Silent Renew\");\n this._tokenExpiring = async () => {\n const logger2 = this._logger.create(\"_tokenExpiring\");\n try {\n await this._userManager.signinSilent();\n logger2.debug(\"silent token renewal successful\");\n } catch (err) {\n if (err instanceof ErrorTimeout) {\n logger2.warn(\"ErrorTimeout from signinSilent:\", err, \"retry in 5s\");\n this._retryTimer.init(5);\n return;\n }\n logger2.error(\"Error from signinSilent:\", err);\n this._userManager.events._raiseSilentRenewError(err);\n }\n };\n }\n async start() {\n const logger2 = this._logger.create(\"start\");\n if (!this._isStarted) {\n this._isStarted = true;\n this._userManager.events.addAccessTokenExpiring(this._tokenExpiring);\n this._retryTimer.addHandler(this._tokenExpiring);\n try {\n await this._userManager.getUser();\n } catch (err) {\n logger2.error(\"getUser error\", err);\n }\n }\n }\n stop() {\n if (this._isStarted) {\n this._retryTimer.cancel();\n this._retryTimer.removeHandler(this._tokenExpiring);\n this._userManager.events.removeAccessTokenExpiring(this._tokenExpiring);\n this._isStarted = false;\n }\n }\n};\n\n// src/RefreshState.ts\nvar RefreshState = class {\n constructor(args, resource) {\n this.refresh_token = args.refresh_token;\n this.id_token = args.id_token;\n this.session_state = args.session_state;\n this.scope = args.scope;\n this.profile = args.profile;\n this.resource = resource;\n this.data = args.state;\n }\n};\n\n// src/UserManager.ts\nvar UserManager = class {\n constructor(settings) {\n this._logger = new Logger(\"UserManager\");\n this.settings = new UserManagerSettingsStore(settings);\n this._client = new OidcClient(settings);\n this._redirectNavigator = new RedirectNavigator(this.settings);\n this._popupNavigator = new PopupNavigator(this.settings);\n this._iframeNavigator = new IFrameNavigator(this.settings);\n this._events = new UserManagerEvents(this.settings);\n this._silentRenewService = new SilentRenewService(this);\n if (this.settings.automaticSilentRenew) {\n this.startSilentRenew();\n }\n this._sessionMonitor = null;\n if (this.settings.monitorSession) {\n this._sessionMonitor = new SessionMonitor(this);\n }\n }\n /** Returns an object used to register for events raised by the `UserManager`. */\n get events() {\n return this._events;\n }\n /** Returns an object used to access the metadata configuration of the OIDC provider. */\n get metadataService() {\n return this._client.metadataService;\n }\n /**\n * Returns promise to load the `User` object for the currently authenticated user.\n */\n async getUser() {\n const logger2 = this._logger.create(\"getUser\");\n const user = await this._loadUser();\n if (user) {\n logger2.info(\"user loaded\");\n this._events.load(user, false);\n return user;\n }\n logger2.info(\"user not found in storage\");\n return null;\n }\n /**\n * Returns promise to remove from any storage the currently authenticated user.\n */\n async removeUser() {\n const logger2 = this._logger.create(\"removeUser\");\n await this.storeUser(null);\n logger2.info(\"user removed from storage\");\n this._events.unload();\n }\n /**\n * Returns promise to trigger a redirect of the current window to the authorization endpoint.\n */\n async signinRedirect(args = {}) {\n this._logger.create(\"signinRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signinStart({\n request_type: \"si:r\",\n ...requestArgs\n }, handle);\n }\n /**\n * Returns promise to process response from the authorization endpoint. The result of the promise is the authenticated `User`.\n */\n async signinRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinRedirectCallback\");\n const user = await this._signinEnd(url);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Returns promise to process the signin with user/password. The result of the promise is the authenticated `User`.\n *\n * Throws an ErrorResponse in case of wrong authentication.\n */\n async signinResourceOwnerCredentials({\n username,\n password,\n skipUserInfo = false\n }) {\n const logger2 = this._logger.create(\"signinResourceOwnerCredential\");\n const signinResponse = await this._client.processResourceOwnerPasswordCredentials({ username, password, skipUserInfo, extraTokenParams: this.settings.extraTokenParams });\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Returns promise to trigger a request (via a popup window) to the authorization endpoint. The result of the promise is the authenticated `User`.\n */\n async signinPopup(args = {}) {\n const logger2 = this._logger.create(\"signinPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n ...requestArgs\n } = args;\n const url = this.settings.popup_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No popup_redirect_uri configured\"));\n }\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget });\n const user = await this._signin({\n request_type: \"si:p\",\n redirect_uri: url,\n display: \"popup\",\n ...requestArgs\n }, handle);\n if (user) {\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n /**\n * Returns promise to notify the opening window of response from the authorization endpoint.\n */\n async signinPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signinPopupCallback\");\n await this._popupNavigator.callback(url, keepOpen);\n logger2.info(\"success\");\n }\n /**\n * Returns promise to trigger a silent request (via an iframe) to the authorization endpoint.\n * The result of the promise is the authenticated `User`.\n */\n async signinSilent(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signinSilent\");\n const {\n silentRequestTimeoutInSeconds,\n resource,\n ...requestArgs\n } = args;\n let user = await this._loadUser();\n if (user == null ? void 0 : user.refresh_token) {\n logger2.debug(\"using refresh token\");\n const state = new RefreshState(user, resource);\n return await this._useRefreshToken(state);\n }\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n let verifySub;\n if (user && this.settings.validateSubOnSilentRenew) {\n logger2.debug(\"subject prior to silent renew:\", user.profile.sub);\n verifySub = user.profile.sub;\n }\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n user = await this._signin({\n request_type: \"si:s\",\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n ...requestArgs\n }, handle, verifySub);\n if (user) {\n if ((_a = user.profile) == null ? void 0 : _a.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n async _useRefreshToken(state) {\n const response = await this._client.useRefreshToken({\n state,\n timeoutInSeconds: this.settings.silentRequestTimeoutInSeconds\n });\n const user = new User({ ...state, ...response });\n await this.storeUser(user);\n this._events.load(user);\n return user;\n }\n /**\n * Returns promise to notify the parent window of response from the authorization endpoint.\n */\n async signinSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n async signinCallback(url = window.location.href) {\n const { state } = await this._client.readSigninResponseState(url);\n switch (state.request_type) {\n case \"si:r\":\n return await this.signinRedirectCallback(url);\n case \"si:p\":\n return await this.signinPopupCallback(url);\n case \"si:s\":\n return await this.signinSilentCallback(url);\n default:\n throw new Error(\"invalid response_type in state\");\n }\n }\n async signoutCallback(url = window.location.href, keepOpen = false) {\n const { state } = await this._client.readSignoutResponseState(url);\n if (!state) {\n return;\n }\n switch (state.request_type) {\n case \"so:r\":\n await this.signoutRedirectCallback(url);\n break;\n case \"so:p\":\n await this.signoutPopupCallback(url, keepOpen);\n break;\n case \"so:s\":\n await this.signoutSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid response_type in state\");\n }\n }\n /**\n * Returns promise to query OP for user's current signin status. Returns object with session_state and subject identifier.\n */\n async querySessionStatus(args = {}) {\n const logger2 = this._logger.create(\"querySessionStatus\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n const user = await this._loadUser();\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n const navResponse = await this._signinStart({\n request_type: \"si:s\",\n // this acts like a signin silent\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n response_type: this.settings.query_status_response_type,\n scope: \"openid\",\n skipUserInfo: true,\n ...requestArgs\n }, handle);\n try {\n const signinResponse = await this._client.processSigninResponse(navResponse.url);\n logger2.debug(\"got signin response\");\n if (signinResponse.session_state && signinResponse.profile.sub) {\n logger2.info(\"success for subject\", signinResponse.profile.sub);\n return {\n session_state: signinResponse.session_state,\n sub: signinResponse.profile.sub,\n sid: signinResponse.profile.sid\n };\n }\n logger2.info(\"success, user not authenticated\");\n return null;\n } catch (err) {\n if (this.settings.monitorAnonymousSession && err instanceof ErrorResponse) {\n switch (err.error) {\n case \"login_required\":\n case \"consent_required\":\n case \"interaction_required\":\n case \"account_selection_required\":\n logger2.info(\"success for anonymous user\");\n return {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n session_state: err.session_state\n };\n }\n }\n throw err;\n }\n }\n async _signin(args, handle, verifySub) {\n const navResponse = await this._signinStart(args, handle);\n return await this._signinEnd(navResponse.url, verifySub);\n }\n async _signinStart(args, handle) {\n const logger2 = this._logger.create(\"_signinStart\");\n try {\n const signinRequest = await this._client.createSigninRequest(args);\n logger2.debug(\"got signin request\");\n return await handle.navigate({\n url: signinRequest.url,\n state: signinRequest.state.id,\n response_mode: signinRequest.state.response_mode,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signinEnd(url, verifySub) {\n const logger2 = this._logger.create(\"_signinEnd\");\n const signinResponse = await this._client.processSigninResponse(url);\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse, verifySub);\n return user;\n }\n async _buildUser(signinResponse, verifySub) {\n const logger2 = this._logger.create(\"_buildUser\");\n const user = new User(signinResponse);\n if (verifySub) {\n if (verifySub !== user.profile.sub) {\n logger2.debug(\"current user does not match user returned from signin. sub from signin:\", user.profile.sub);\n throw new ErrorResponse({ ...signinResponse, error: \"login_required\" });\n }\n logger2.debug(\"current user matches user returned from signin\");\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n this._events.load(user);\n return user;\n }\n /**\n * Returns promise to trigger a redirect of the current window to the end session endpoint.\n */\n async signoutRedirect(args = {}) {\n const logger2 = this._logger.create(\"signoutRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signoutStart({\n request_type: \"so:r\",\n post_logout_redirect_uri: this.settings.post_logout_redirect_uri,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Returns promise to process response from the end session endpoint.\n */\n async signoutRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutRedirectCallback\");\n const response = await this._signoutEnd(url);\n logger2.info(\"success\");\n return response;\n }\n /**\n * Returns promise to trigger a redirect of a popup window window to the end session endpoint.\n */\n async signoutPopup(args = {}) {\n const logger2 = this._logger.create(\"signoutPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n ...requestArgs\n } = args;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget });\n await this._signout({\n request_type: \"so:p\",\n post_logout_redirect_uri: url,\n // we're putting a dummy entry in here because we\n // need a unique id from the state for notification\n // to the parent window, which is necessary if we\n // plan to return back to the client after signout\n // and so we can close the popup after signout\n state: url == null ? void 0 : {},\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Returns promise to process response from the end session endpoint from a popup window.\n */\n async signoutPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signoutPopupCallback\");\n await this._popupNavigator.callback(url, keepOpen);\n logger2.info(\"success\");\n }\n async _signout(args, handle) {\n const navResponse = await this._signoutStart(args, handle);\n return await this._signoutEnd(navResponse.url);\n }\n async _signoutStart(args = {}, handle) {\n var _a;\n const logger2 = this._logger.create(\"_signoutStart\");\n try {\n const user = await this._loadUser();\n logger2.debug(\"loaded current user from storage\");\n if (this.settings.revokeTokensOnSignout) {\n await this._revokeInternal(user);\n }\n const id_token = args.id_token_hint || user && user.id_token;\n if (id_token) {\n logger2.debug(\"setting id_token_hint in signout request\");\n args.id_token_hint = id_token;\n }\n await this.removeUser();\n logger2.debug(\"user removed, creating signout request\");\n const signoutRequest = await this._client.createSignoutRequest(args);\n logger2.debug(\"got signout request\");\n return await handle.navigate({\n url: signoutRequest.url,\n state: (_a = signoutRequest.state) == null ? void 0 : _a.id\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signoutEnd(url) {\n const logger2 = this._logger.create(\"_signoutEnd\");\n const signoutResponse = await this._client.processSignoutResponse(url);\n logger2.debug(\"got signout response\");\n return signoutResponse;\n }\n /**\n * Returns promise to trigger a silent request (via an iframe) to the end session endpoint.\n */\n async signoutSilent(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signoutSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const id_token_hint = this.settings.includeIdTokenInSilentSignout ? (_a = await this._loadUser()) == null ? void 0 : _a.id_token : void 0;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n await this._signout({\n request_type: \"so:s\",\n post_logout_redirect_uri: url,\n id_token_hint,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Returns promise to notify the parent window of response from the end session endpoint.\n */\n async signoutSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n async revokeTokens(types) {\n const user = await this._loadUser();\n await this._revokeInternal(user, types);\n }\n async _revokeInternal(user, types = this.settings.revokeTokenTypes) {\n const logger2 = this._logger.create(\"_revokeInternal\");\n if (!user)\n return;\n const typesPresent = types.filter((type) => typeof user[type] === \"string\");\n if (!typesPresent.length) {\n logger2.debug(\"no need to revoke due to no token(s)\");\n return;\n }\n for (const type of typesPresent) {\n await this._client.revokeToken(\n user[type],\n // eslint-disable-line @typescript-eslint/no-non-null-assertion\n type\n );\n logger2.info(`${type} revoked successfully`);\n if (type !== \"access_token\") {\n user[type] = null;\n }\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n this._events.load(user);\n }\n /**\n * Enables silent renew for the `UserManager`.\n */\n startSilentRenew() {\n this._logger.create(\"startSilentRenew\");\n void this._silentRenewService.start();\n }\n /**\n * Disables silent renew for the `UserManager`.\n */\n stopSilentRenew() {\n this._silentRenewService.stop();\n }\n get _userStoreKey() {\n return `user:${this.settings.authority}:${this.settings.client_id}`;\n }\n async _loadUser() {\n const logger2 = this._logger.create(\"_loadUser\");\n const storageString = await this.settings.userStore.get(this._userStoreKey);\n if (storageString) {\n logger2.debug(\"user storageString loaded\");\n return User.fromStorageString(storageString);\n }\n logger2.debug(\"no user storageString\");\n return null;\n }\n async storeUser(user) {\n const logger2 = this._logger.create(\"storeUser\");\n if (user) {\n logger2.debug(\"storing user\");\n const storageString = user.toStorageString();\n await this.settings.userStore.set(this._userStoreKey, storageString);\n } else {\n this._logger.debug(\"removing user\");\n await this.settings.userStore.remove(this._userStoreKey);\n }\n }\n /**\n * Removes stale state entries in storage for incomplete authorize requests.\n */\n async clearStaleState() {\n await this._client.clearStaleState();\n }\n};\n\n// package.json\nvar version = \"2.2.5\";\n\n// src/Version.ts\nvar Version = version;\nexport {\n AccessTokenEvents,\n CheckSessionIFrame,\n ErrorResponse,\n ErrorTimeout,\n InMemoryWebStorage,\n Log,\n Logger,\n MetadataService,\n OidcClient,\n OidcClientSettingsStore,\n SessionMonitor,\n SigninResponse,\n SigninState,\n SignoutResponse,\n State,\n User,\n UserManager,\n UserManagerSettingsStore,\n Version,\n WebStorageStateStore\n};\n//# sourceMappingURL=oidc-client-ts.js.map\n","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nexport class ProfileProxy {\n constructor(profile) {\n this.iss = '';\n this.sub = '';\n this.aud = '';\n this.exp = 0;\n this.iat = 0;\n Object.keys(profile).forEach((key) => {\n this[key] = profile[key];\n });\n }\n}\n//# sourceMappingURL=ProfileProxy.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nimport { ProfileProxy } from './ProfileProxy';\nexport class UserProxy {\n constructor(user) {\n this.user = user;\n this.userProfile = new ProfileProxy(user.profile);\n }\n get access_token() {\n return this.user.access_token;\n }\n get refresh_token() {\n return this.user.refresh_token;\n }\n get expires_in() {\n return this.user.expires_in;\n }\n get session_state() {\n return this.user.session_state;\n }\n get profile() {\n return this.userProfile;\n }\n}\n//# sourceMappingURL=UserProxy.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nimport { Log as OidcLog, UserManager as OidcUserManager, } from 'oidc-client-ts';\nimport { UserProxy } from './UserProxy';\nexport class UserManagerProxy {\n constructor(settings, logger) {\n this.userManager = new OidcUserManager(this.getAsUserManagerSettings(settings));\n OidcLog.setLogger(logger);\n OidcLog.setLevel(settings.logLevel);\n }\n async getUserAsync() {\n const origUser = await this.userManager.getUser();\n return origUser ? new UserProxy(origUser) : null;\n }\n removeUserAsync() {\n return this.userManager.removeUser();\n }\n revokeAccessTokenAsync() {\n return this.userManager.revokeTokens();\n }\n async signinCallbackAsync(url) {\n await this.userManager.signinCallback(url);\n }\n signinRedirectAsync(args) {\n return this.userManager.signinRedirect(args);\n }\n async signinSilentAsync(args) {\n await this.userManager.signinSilent(args);\n }\n signoutRedirectAsync(args) {\n return this.userManager.signoutRedirect(args);\n }\n registerAddUserLoaded(callback) {\n this.userManager.events.addUserLoaded((user) => {\n callback(new UserProxy(user));\n });\n }\n registerAddUserSignedOut(callback) {\n this.userManager.events.addUserSignedOut(callback);\n }\n registerAddUserUnloaded(callback) {\n this.userManager.events.addUserUnloaded(callback);\n }\n getAsUserManagerSettings(settings) {\n return {\n acr_values: settings.acrValues,\n authority: settings.authority,\n automaticSilentRenew: settings.automaticSilentRenew,\n client_id: settings.clientId,\n loadUserInfo: settings.loadUserInfo,\n monitorSession: settings.monitorSession,\n post_logout_redirect_uri: settings.postLogoutRedirectUri,\n redirect_uri: settings.redirectUri,\n response_type: settings.responseType,\n revokeTokensOnSignout: settings.revokeTokensOnSignout,\n scope: settings.scope,\n stopCheckSessionOnError: settings.stopCheckSessionOnError,\n filterProtocolClaims: settings.filterProtocolClaims,\n };\n }\n}\n//# sourceMappingURL=UserManagerProxy.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nexport class TokenManagerTimeoutMonitor {\n constructor(logger, settings, state, userManager, disableTimer = false) {\n this.interval = 0;\n this.monitoring = false;\n this.logger = logger;\n this.settings = settings;\n this.state = state;\n this.userManager = userManager;\n if (this.settings.monitorTimeout && !disableTimer) {\n this.startMonitor();\n }\n }\n get timeoutAt() {\n return this.state.timeoutAt;\n }\n isTimedOut() {\n if (!this.state.timeoutAt) {\n return false;\n }\n return this.state.timeoutAt < this.getBaseTimeInSeconds();\n }\n isFlagged() {\n const exists = document.cookie.includes('protolabs_timeout=true');\n this.logger.debug(`TokenManagerTimeoutMonitor.isFlagged: cookie exists = ${exists}.`);\n return exists;\n }\n update(userTimeoutSeconds) {\n this.state.timeoutAt = this.getBaseTimeInSeconds() + userTimeoutSeconds;\n this.logger.debug(`TokenManagerTimeoutMonitor.update: updating timeoutAt to ${this.state.timeoutAt}.`);\n this.state.save();\n }\n clear() {\n this.logger.debug('TokenManagerTimeoutMonitor.clear: clearing timeout date.');\n this.state.clear();\n }\n async timeout() {\n this.logger.debug('TokenManagerTimeoutMonitor.timeout: starting timeout.');\n this.clear();\n this.setCookie();\n await this.userManager.signoutRedirectAsync();\n }\n getBaseTimeInSeconds() {\n return Math.round(Date.now() / 1000);\n }\n startMonitor() {\n this.logger.debug('TokenManagerTimeoutMonitor.monitor: setting the interval.');\n this.interval = window.setInterval(async () => {\n if (this.isTimedOut()) {\n clearInterval(this.interval);\n this.monitoring = false;\n await this.timeout();\n }\n }, this.settings.timeoutMonitorIntervalMilliseconds);\n this.monitoring = true;\n }\n setCookie() {\n this.logger.debug('TokenManagerTimeoutMonitor.setCookie: setting 20s timeout cookie.');\n const d = new Date();\n d.setTime(d.getTime() + 20000);\n document.cookie = `protolabs_timeout=true;path=/;expires=${d.toUTCString()}`;\n }\n}\n//# sourceMappingURL=TokenManagerTimeoutMonitor.js.map","// Copyright (c) Proto Labs, Inc. All Rights Reserved.\nimport AsyncLock from 'async-lock';\nimport { TokenManagerEventPublisher } from './TokenManagerEventPublisher';\nimport { TokenManagerFetchInterceptor } from './TokenManagerFetchInterceptor';\nimport { TokenManagerImpl } from './TokenManagerImpl';\nimport { TokenManagerLogger } from './TokenManagerLogger';\nimport { TokenManagerSettings } from './TokenManagerSettings';\nimport { TokenManagerState } from './TokenManagerState';\nimport { UrlUtility } from './UrlUtility';\nimport { UserManagerProxy } from './UserManagerProxy';\nimport { TokenManagerTimeoutMonitor } from './TokenManagerTimeoutMonitor';\nexport class TokenManagerFactory {\n static getTokenManager() {\n return window.tokenManager;\n }\n // Create and attach TokenManager to global window object\n static getOrCreateTokenManager(config) {\n if (window.tokenManager) {\n return window.tokenManager;\n }\n const logger = new TokenManagerLogger(config.logLevel);\n logger.debug(`TokenManagerFactory: logging level is ${config.logLevel}.`);\n const lock = new AsyncLock({ timeout: 30000 });\n const settings = new TokenManagerSettings(config, logger, new UrlUtility());\n const state = new TokenManagerState(settings.clientId, logger, sessionStorage);\n const eventPublisher = new TokenManagerEventPublisher(logger);\n const userManager = new UserManagerProxy(settings, logger);\n const timeoutMonitor = new TokenManagerTimeoutMonitor(logger, settings, state, userManager);\n const tokenManagerImpl = new TokenManagerImpl(settings, logger, lock, state, eventPublisher, userManager, timeoutMonitor);\n window.tokenManager = tokenManagerImpl;\n window.tokenManagerFetchInterceptor = new TokenManagerFetchInterceptor(tokenManagerImpl, logger, new UrlUtility(), []);\n return window.tokenManager;\n }\n}\n//# sourceMappingURL=TokenManagerFactory.js.map","/*! js-cookie v3.0.1 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (key, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n key = encodeURIComponent(key)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n key + '=' + converter.write(value, key) + stringifiedAttributes)\n }\n\n function get (key) {\n if (typeof document === 'undefined' || (arguments.length && !key)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var foundKey = decodeURIComponent(parts[0]);\n jar[foundKey] = converter.read(value, foundKey);\n\n if (key === foundKey) {\n break\n }\n } catch (e) {}\n }\n\n return key ? jar[key] : jar\n }\n\n return Object.create(\n {\n set: set,\n get: get,\n remove: function (key, attributes) {\n set(\n key,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport default api;\n"],"names":["LARGE_ARRAY_SIZE","HASH_UNDEFINED","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","MAX_SAFE_INTEGER","argsTag","arrayTag","asyncTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reRegExpChar","reIsHostCtor","reIsUint","typedArrayTags","freeGlobal","global","freeSelf","root","freeExports","exports","freeModule","module","moduleExports","freeProcess","nodeUtil","nodeIsTypedArray","arrayFilter","array","predicate","index","length","resIndex","result","value","arrayPush","values","offset","arraySome","baseTimes","n","iteratee","baseUnary","func","cacheHas","cache","key","getValue","object","mapToArray","map","overArg","transform","arg","setToArray","set","arrayProto","funcProto","objectProto","coreJsData","funcToString","hasOwnProperty","maskSrcKey","uid","nativeObjectToString","reIsNative","Buffer","Symbol","Uint8Array","propertyIsEnumerable","splice","symToStringTag","nativeGetSymbols","nativeIsBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","Hash","entries","entry","hashClear","hashDelete","hashGet","data","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","size","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","isIndex","eq","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","getRawTag","objectToString","baseIsArguments","isObjectLike","baseIsEqual","other","bitmask","customizer","stack","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsNative","isObject","isMasked","pattern","isFunction","baseIsTypedArray","isLength","baseKeys","isPrototype","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","tag","convert","objProps","getAllKeys","objLength","othProps","skipCtor","objValue","objCtor","othCtor","keys","getSymbols","isKeyable","isOwn","unmasked","symbol","stubArray","Ctor","ctorString","type","proto","isArrayLike","stubFalse","isEqual","ErrorUtility","error","maybeError","TokenManagerImpl","settings","logger","lock","state","eventPublisher","userManager","timeoutMonitor","user","claims","currentUser","oboId","queryParams","authArgs","redirect","forceTokenRenew","extraQueryParams","msg","err","newUser","isNewUser","hasUpdatedClaims","hasNewRefreshToken","profileTimeoutSecs","actualTimeoutSecs","params","search","route","loadedUser","name","TokenManagerEventTypes","TokenManagerLogLevel","AsyncLock","opts","fn","cb","deferredResolve","deferredReject","deferred","resolve","reject","resolved","timer","occupationTimer","self","done","locked","ret","exec","called","taskFn","timeout","maxOccupationTime","getFn","fnx","prev","e","lib","asyncLock","require$$0","TokenManagerEventPublisher","isAuthenticated","detail","TokenManagerFetchInterceptor","tokenManager","urlUtility","unauthenticatedDomains","registerGlobalFetch","input","init","url","newInit","response","token","TokenManagerLogger","level","message","TokenManagerSettings","acrValues","authority","clientId","logLevel","maxRefreshTokenExpireMinutes","monitorOnRedirectUri","postLogoutRedirectUri","redirectUri","refreshAccessTokenExpireOffset","scope","timeoutMonitorIntervalMilliseconds","filterProtocolClaims","authorityDomain","redirectDomain","TokenManagerState","storage","text","UrlUtility","hostname","splitHostName","secondToLastPieceOfDomain","lastPieceOfDomain","authDomain","cleansedUrl","__viteBrowserExternal","factory","this","CryptoJS","Math","undefined","crypto","require","cryptoSecureRandomInt","create","F","obj","subtype","C","C_lib","Base","overrides","instance","properties","propertyName","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","i","thatByte","j","clone","nBytes","C_enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","utf8Str","BufferedBlockAlgorithm","doFlush","processedWords","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","nWordsReady","nBytesReady","cfg","messageUpdate","hash","hasher","C_algo","Hasher","H","K","isPrime","sqrtN","factor","getFractionalBits","nPrime","W","SHA256","M","a","b","c","d","f","g","h","gamma0x","gamma0","gamma1x","gamma1","ch","maj","sigma0","sigma1","t1","t2","nBitsTotal","nBitsLeft","base64Chars","byte1","byte2","byte3","triplet","paddingChar","base64Str","base64StrLength","reverseMap","paddingIndex","parseLoop","bits1","bits2","bitsCombined","r","o","t","nopLogger","Log","Log2","reset","setLevel","setLogger","Logger","_name","args","method","methodLogger","staticMethod","staticLogger","prefix","UUID_V4_TEMPLATE","CryptoUtils","code_verifier","hashed","sha256","Base64","client_id","client_secret","basicAuth","Event","idx","ev","JwtUtils","jwt_decode","PopupUtils","features","_a","_b","_c","width","Timer","diff","durationInSeconds","logger2","expiration","timerDurationInSeconds","UrlUtils","responseMode","ErrorResponse","form","ErrorTimeout","AccessTokenEvents","container","duration","expiring","expired","CheckSessionIFrame","_callback","_client_id","_intervalInSeconds","_stopOnError","parsedUrl","session_state","send","InMemoryWebStorage","JsonService","additionalContentTypes","_jwtHandler","_extraHeaders","timeoutInSeconds","initFetch","controller","timeoutId","credentials","headers","contentType","item","json","body","initCredentials","responseText","customKeys","protectedHeaders","headerName","content","MetadataService","_settings","metadata","optional","jwks_uri","keySet","WebStorageStateStore","store","len","DefaultResponseType","DefaultScope","DefaultClientAuthentication","DefaultResponseMode","DefaultStaleStateAgeInSeconds","DefaultClockSkewInSeconds","OidcClientSettingsStore","metadataUrl","signingKeys","metadataSeed","response_type","redirect_uri","post_logout_redirect_uri","client_authentication","prompt","display","max_age","ui_locales","acr_values","resource","response_mode","loadUserInfo","staleStateAgeInSeconds","clockSkewInSeconds","userInfoJwtIssuer","mergeClaims","disablePKCE","stateStore","refreshTokenCredentials","revokeTokenAdditionalContentTypes","fetchRequestCredentials","refreshTokenAllowedScope","extraTokenParams","extraHeaders","UserInfoService","_metadataService","payload","TokenClient","grant_type","param","ResponseValidator","_claimsService","skipUserInfo","hasIdToken","validateSub","tokenResponse","existingToken","incoming","existing","State","storageString","age","cutoff","remove","SigninState","SigninRequest","state_data","request_type","nonce","optionalParams","OidcScope","SigninResponse","SignoutRequest","id_token_hint","SignoutResponse","DefaultProtocolClaims","InternalRequiredProtocolClaims","ClaimsService","protocolClaims","claim","claims1","claims2","previousValue","OidcClient","metadataService","request","request_uri","login_hint","signinRequest","signinState","removeState","storedStateString","username","password","signinResponse","allowableScopes","s","signoutState","SessionMonitor","_userManager","intervalInSeconds","stopOnError","checkSessionIFrame","timerHandle","session","tmpUser","raiseEvent","User","expires_in","messageSource","AbstractChildWindow","keepOpen","listener","origin","reason","dispose","parent","targetOrigin","DefaultPopupWindowFeatures","DefaultPopupTarget","DefaultAccessTokenExpiringNotificationTimeInSeconds","DefaultCheckSessionIntervalInSeconds","DefaultSilentRequestTimeoutInSeconds","UserManagerSettingsStore","popup_redirect_uri","popup_post_logout_redirect_uri","popupWindowFeatures","popupWindowTarget","redirectMethod","redirectTarget","iframeNotifyParentOrigin","iframeScriptOrigin","silent_redirect_uri","silentRequestTimeoutInSeconds","automaticSilentRenew","validateSubOnSilentRenew","includeIdTokenInSilentRenew","monitorSession","monitorAnonymousSession","checkSessionIntervalInSeconds","query_status_response_type","stopCheckSessionOnError","revokeTokenTypes","revokeTokensOnSignout","includeIdTokenInSilentSignout","accessTokenExpiringNotificationTimeInSeconds","userStore","IFrameWindow","iframe","_a2","frame","IFrameNavigator","checkForPopupClosedInterval","PopupWindow","centeredPopup","popupClosedInterval","PopupNavigator","RedirectNavigator","targetWindow","abort","promise","UserManagerEvents","SilentRenewService","RefreshState","UserManager","requestArgs","handle","verifySub","navResponse","id_token","signoutRequest","signoutResponse","types","typesPresent","ProfileProxy","profile","UserProxy","UserManagerProxy","OidcUserManager","OidcLog","origUser","callback","TokenManagerTimeoutMonitor","disableTimer","exists","userTimeoutSeconds","TokenManagerFactory","config","tokenManagerImpl","assign","target","source","defaultConverter","converter","defaultAttributes","attributes","stringifiedAttributes","attributeName","get","cookies","jar","parts","foundKey","api"],"mappings":"qsBAUA,IAAIA,EAAmB,IAGnBC,EAAiB,4BAGjBC,EAAuB,EACvBC,EAAyB,EAGzBC,EAAmB,iBAGnBC,EAAU,qBACVC,EAAW,iBACXC,EAAW,yBACXC,EAAU,mBACVC,EAAU,gBACVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBACZC,EAAU,gBACVC,EAAY,kBACZC,EAAa,mBACbC,EAAW,iBACXC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBACZC,EAAe,qBACfC,EAAa,mBAEbC,EAAiB,uBACjBC,EAAc,oBACdC,GAAa,wBACbC,GAAa,wBACbC,GAAU,qBACVC,GAAW,sBACXC,GAAW,sBACXC,GAAW,sBACXC,GAAkB,6BAClBC,GAAY,uBACZC,GAAY,uBAMZC,GAAe,sBAGfC,GAAe,8BAGfC,GAAW,mBAGXC,EAAiB,CAAA,EACrBA,EAAeZ,EAAU,EAAIY,EAAeX,EAAU,EACtDW,EAAeV,EAAO,EAAIU,EAAeT,EAAQ,EACjDS,EAAeR,EAAQ,EAAIQ,EAAeP,EAAQ,EAClDO,EAAeN,EAAe,EAAIM,EAAeL,EAAS,EAC1DK,EAAeJ,EAAS,EAAI,GAC5BI,EAAelC,CAAO,EAAIkC,EAAejC,CAAQ,EACjDiC,EAAed,CAAc,EAAIc,EAAe/B,CAAO,EACvD+B,EAAeb,CAAW,EAAIa,EAAe9B,CAAO,EACpD8B,EAAe7B,CAAQ,EAAI6B,EAAe5B,CAAO,EACjD4B,EAAe1B,CAAM,EAAI0B,EAAezB,CAAS,EACjDyB,EAAevB,CAAS,EAAIuB,EAAepB,CAAS,EACpDoB,EAAenB,CAAM,EAAImB,EAAelB,CAAS,EACjDkB,EAAef,CAAU,EAAI,GAG7B,IAAIgB,GAAa,OAAOC,GAAU,UAAYA,GAAUA,EAAO,SAAW,QAAUA,EAGhFC,GAAW,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxEC,EAAOH,IAAcE,IAAY,SAAS,aAAa,EAAC,EAGxDE,GAA4CC,GAAW,CAACA,EAAQ,UAAYA,EAG5EC,GAAaF,IAAe,IAA6BG,GAAU,CAACA,EAAO,UAAYA,EAGvFC,GAAgBF,IAAcA,GAAW,UAAYF,GAGrDK,GAAcD,IAAiBR,GAAW,QAG1CU,GAAY,UAAW,CACzB,GAAI,CACF,OAAOD,IAAeA,GAAY,SAAWA,GAAY,QAAQ,MAAM,CAC3E,MAAc,CAAE,CACf,EAAA,EAGGE,GAAmBD,IAAYA,GAAS,aAW5C,SAASE,GAAYC,EAAOC,EAAW,CAMrC,QALIC,EAAQ,GACRC,EAASH,GAAS,KAAO,EAAIA,EAAM,OACnCI,EAAW,EACXC,EAAS,CAAA,EAEN,EAAEH,EAAQC,GAAQ,CACvB,IAAIG,EAAQN,EAAME,CAAK,EACnBD,EAAUK,EAAOJ,EAAOF,CAAK,IAC/BK,EAAOD,GAAU,EAAIE,EAExB,CACD,OAAOD,CACR,CAUD,SAASE,GAAUP,EAAOQ,EAAQ,CAKhC,QAJIN,EAAQ,GACRC,EAASK,EAAO,OAChBC,EAAST,EAAM,OAEZ,EAAEE,EAAQC,GACfH,EAAMS,EAASP,CAAK,EAAIM,EAAON,CAAK,EAEtC,OAAOF,CACR,CAYD,SAASU,GAAUV,EAAOC,EAAW,CAInC,QAHIC,EAAQ,GACRC,EAASH,GAAS,KAAO,EAAIA,EAAM,OAEhC,EAAEE,EAAQC,GACf,GAAIF,EAAUD,EAAME,CAAK,EAAGA,EAAOF,CAAK,EACtC,MAAO,GAGX,MAAO,EACR,CAWD,SAASW,GAAUC,EAAGC,EAAU,CAI9B,QAHIX,EAAQ,GACRG,EAAS,MAAMO,CAAC,EAEb,EAAEV,EAAQU,GACfP,EAAOH,CAAK,EAAIW,EAASX,CAAK,EAEhC,OAAOG,CACR,CASD,SAASS,GAAUC,EAAM,CACvB,OAAO,SAAST,EAAO,CACrB,OAAOS,EAAKT,CAAK,CACrB,CACC,CAUD,SAASU,GAASC,EAAOC,EAAK,CAC5B,OAAOD,EAAM,IAAIC,CAAG,CACrB,CAUD,SAASC,GAASC,EAAQF,EAAK,CAC7B,OAAOE,GAAU,KAAO,OAAYA,EAAOF,CAAG,CAC/C,CASD,SAASG,GAAWC,EAAK,CACvB,IAAIpB,EAAQ,GACRG,EAAS,MAAMiB,EAAI,IAAI,EAE3B,OAAAA,EAAI,QAAQ,SAAShB,EAAOY,EAAK,CAC/Bb,EAAO,EAAEH,CAAK,EAAI,CAACgB,EAAKZ,CAAK,CACjC,CAAG,EACMD,CACR,CAUD,SAASkB,GAAQR,EAAMS,EAAW,CAChC,OAAO,SAASC,EAAK,CACnB,OAAOV,EAAKS,EAAUC,CAAG,CAAC,CAC9B,CACC,CASD,SAASC,GAAWC,EAAK,CACvB,IAAIzB,EAAQ,GACRG,EAAS,MAAMsB,EAAI,IAAI,EAE3B,OAAAA,EAAI,QAAQ,SAASrB,EAAO,CAC1BD,EAAO,EAAEH,CAAK,EAAII,CACtB,CAAG,EACMD,CACR,CAGD,IAAIuB,GAAa,MAAM,UACnBC,GAAY,SAAS,UACrBC,GAAc,OAAO,UAGrBC,GAAazC,EAAK,oBAAoB,EAGtC0C,GAAeH,GAAU,SAGzBI,EAAiBH,GAAY,eAG7BI,GAAc,UAAW,CAC3B,IAAIC,EAAM,SAAS,KAAKJ,IAAcA,GAAW,MAAQA,GAAW,KAAK,UAAY,EAAE,EACvF,OAAOI,EAAO,iBAAmBA,EAAO,EACzC,EAAA,EAOGC,GAAuBN,GAAY,SAGnCO,GAAa,OAAO,IACtBL,GAAa,KAAKC,CAAc,EAAE,QAAQlD,GAAc,MAAM,EAC7D,QAAQ,yDAA0D,OAAO,EAAI,GAChF,EAGIuD,GAAS3C,GAAgBL,EAAK,OAAS,OACvCiD,GAASjD,EAAK,OACdkD,GAAalD,EAAK,WAClBmD,GAAuBX,GAAY,qBACnCY,GAASd,GAAW,OACpBe,GAAiBJ,GAASA,GAAO,YAAc,OAG/CK,GAAmB,OAAO,sBAC1BC,GAAiBP,GAASA,GAAO,SAAW,OAC5CQ,GAAavB,GAAQ,OAAO,KAAM,MAAM,EAGxCwB,GAAWC,GAAU1D,EAAM,UAAU,EACrC2D,GAAMD,GAAU1D,EAAM,KAAK,EAC3B4D,GAAUF,GAAU1D,EAAM,SAAS,EACnC6D,GAAMH,GAAU1D,EAAM,KAAK,EAC3B8D,GAAUJ,GAAU1D,EAAM,SAAS,EACnC+D,GAAeL,GAAU,OAAQ,QAAQ,EAGzCM,GAAqBC,GAASR,EAAQ,EACtCS,GAAgBD,GAASN,EAAG,EAC5BQ,GAAoBF,GAASL,EAAO,EACpCQ,GAAgBH,GAASJ,EAAG,EAC5BQ,GAAoBJ,GAASH,EAAO,EAGpCQ,GAAcrB,GAASA,GAAO,UAAY,OAC1CsB,GAAgBD,GAAcA,GAAY,QAAU,OASxD,SAASE,GAAKC,EAAS,CACrB,IAAI7D,EAAQ,GACRC,EAAS4D,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAE7D,EAAQC,GAAQ,CACvB,IAAI6D,EAAQD,EAAQ7D,CAAK,EACzB,KAAK,IAAI8D,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAC5B,CACF,CASD,SAASC,IAAY,CACnB,KAAK,SAAWZ,GAAeA,GAAa,IAAI,EAAI,CAAA,EACpD,KAAK,KAAO,CACb,CAYD,SAASa,GAAWhD,EAAK,CACvB,IAAIb,EAAS,KAAK,IAAIa,CAAG,GAAK,OAAO,KAAK,SAASA,CAAG,EACtD,YAAK,MAAQb,EAAS,EAAI,EACnBA,CACR,CAWD,SAAS8D,GAAQjD,EAAK,CACpB,IAAIkD,EAAO,KAAK,SAChB,GAAIf,GAAc,CAChB,IAAIhD,EAAS+D,EAAKlD,CAAG,EACrB,OAAOb,IAAWzD,EAAiB,OAAYyD,CAChD,CACD,OAAO4B,EAAe,KAAKmC,EAAMlD,CAAG,EAAIkD,EAAKlD,CAAG,EAAI,MACrD,CAWD,SAASmD,GAAQnD,EAAK,CACpB,IAAIkD,EAAO,KAAK,SAChB,OAAOf,GAAgBe,EAAKlD,CAAG,IAAM,OAAae,EAAe,KAAKmC,EAAMlD,CAAG,CAChF,CAYD,SAASoD,GAAQpD,EAAKZ,EAAO,CAC3B,IAAI8D,EAAO,KAAK,SAChB,YAAK,MAAQ,KAAK,IAAIlD,CAAG,EAAI,EAAI,EACjCkD,EAAKlD,CAAG,EAAKmC,IAAgB/C,IAAU,OAAa1D,EAAiB0D,EAC9D,IACR,CAGDwD,GAAK,UAAU,MAAQG,GACvBH,GAAK,UAAU,OAAYI,GAC3BJ,GAAK,UAAU,IAAMK,GACrBL,GAAK,UAAU,IAAMO,GACrBP,GAAK,UAAU,IAAMQ,GASrB,SAASC,GAAUR,EAAS,CAC1B,IAAI7D,EAAQ,GACRC,EAAS4D,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAE7D,EAAQC,GAAQ,CACvB,IAAI6D,EAAQD,EAAQ7D,CAAK,EACzB,KAAK,IAAI8D,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAC5B,CACF,CASD,SAASQ,IAAiB,CACxB,KAAK,SAAW,GAChB,KAAK,KAAO,CACb,CAWD,SAASC,GAAgBvD,EAAK,CAC5B,IAAIkD,EAAO,KAAK,SACZlE,EAAQwE,GAAaN,EAAMlD,CAAG,EAElC,GAAIhB,EAAQ,EACV,MAAO,GAET,IAAIyE,EAAYP,EAAK,OAAS,EAC9B,OAAIlE,GAASyE,EACXP,EAAK,IAAG,EAER1B,GAAO,KAAK0B,EAAMlE,EAAO,CAAC,EAE5B,EAAE,KAAK,KACA,EACR,CAWD,SAAS0E,GAAa1D,EAAK,CACzB,IAAIkD,EAAO,KAAK,SACZlE,EAAQwE,GAAaN,EAAMlD,CAAG,EAElC,OAAOhB,EAAQ,EAAI,OAAYkE,EAAKlE,CAAK,EAAE,CAAC,CAC7C,CAWD,SAAS2E,GAAa3D,EAAK,CACzB,OAAOwD,GAAa,KAAK,SAAUxD,CAAG,EAAI,EAC3C,CAYD,SAAS4D,GAAa5D,EAAKZ,EAAO,CAChC,IAAI8D,EAAO,KAAK,SACZlE,EAAQwE,GAAaN,EAAMlD,CAAG,EAElC,OAAIhB,EAAQ,GACV,EAAE,KAAK,KACPkE,EAAK,KAAK,CAAClD,EAAKZ,CAAK,CAAC,GAEtB8D,EAAKlE,CAAK,EAAE,CAAC,EAAII,EAEZ,IACR,CAGDiE,GAAU,UAAU,MAAQC,GAC5BD,GAAU,UAAU,OAAYE,GAChCF,GAAU,UAAU,IAAMK,GAC1BL,GAAU,UAAU,IAAMM,GAC1BN,GAAU,UAAU,IAAMO,GAS1B,SAASC,GAAShB,EAAS,CACzB,IAAI7D,EAAQ,GACRC,EAAS4D,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAE7D,EAAQC,GAAQ,CACvB,IAAI6D,EAAQD,EAAQ7D,CAAK,EACzB,KAAK,IAAI8D,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAC5B,CACF,CASD,SAASgB,IAAgB,CACvB,KAAK,KAAO,EACZ,KAAK,SAAW,CACd,KAAQ,IAAIlB,GACZ,IAAO,IAAKb,IAAOsB,IACnB,OAAU,IAAIT,EAClB,CACC,CAWD,SAASmB,GAAe/D,EAAK,CAC3B,IAAIb,EAAS6E,GAAW,KAAMhE,CAAG,EAAE,OAAUA,CAAG,EAChD,YAAK,MAAQb,EAAS,EAAI,EACnBA,CACR,CAWD,SAAS8E,GAAYjE,EAAK,CACxB,OAAOgE,GAAW,KAAMhE,CAAG,EAAE,IAAIA,CAAG,CACrC,CAWD,SAASkE,GAAYlE,EAAK,CACxB,OAAOgE,GAAW,KAAMhE,CAAG,EAAE,IAAIA,CAAG,CACrC,CAYD,SAASmE,GAAYnE,EAAKZ,EAAO,CAC/B,IAAI8D,EAAOc,GAAW,KAAMhE,CAAG,EAC3BoE,EAAOlB,EAAK,KAEhB,OAAAA,EAAK,IAAIlD,EAAKZ,CAAK,EACnB,KAAK,MAAQ8D,EAAK,MAAQkB,EAAO,EAAI,EAC9B,IACR,CAGDP,GAAS,UAAU,MAAQC,GAC3BD,GAAS,UAAU,OAAYE,GAC/BF,GAAS,UAAU,IAAMI,GACzBJ,GAAS,UAAU,IAAMK,GACzBL,GAAS,UAAU,IAAMM,GAUzB,SAASE,GAAS/E,EAAQ,CACxB,IAAIN,EAAQ,GACRC,EAASK,GAAU,KAAO,EAAIA,EAAO,OAGzC,IADA,KAAK,SAAW,IAAIuE,GACb,EAAE7E,EAAQC,GACf,KAAK,IAAIK,EAAON,CAAK,CAAC,CAEzB,CAYD,SAASsF,GAAYlF,EAAO,CAC1B,YAAK,SAAS,IAAIA,EAAO1D,CAAc,EAChC,IACR,CAWD,SAAS6I,GAAYnF,EAAO,CAC1B,OAAO,KAAK,SAAS,IAAIA,CAAK,CAC/B,CAGDiF,GAAS,UAAU,IAAMA,GAAS,UAAU,KAAOC,GACnDD,GAAS,UAAU,IAAME,GASzB,SAASC,GAAM3B,EAAS,CACtB,IAAIK,EAAO,KAAK,SAAW,IAAIG,GAAUR,CAAO,EAChD,KAAK,KAAOK,EAAK,IAClB,CASD,SAASuB,IAAa,CACpB,KAAK,SAAW,IAAIpB,GACpB,KAAK,KAAO,CACb,CAWD,SAASqB,GAAY1E,EAAK,CACxB,IAAIkD,EAAO,KAAK,SACZ/D,EAAS+D,EAAK,OAAUlD,CAAG,EAE/B,YAAK,KAAOkD,EAAK,KACV/D,CACR,CAWD,SAASwF,GAAS3E,EAAK,CACrB,OAAO,KAAK,SAAS,IAAIA,CAAG,CAC7B,CAWD,SAAS4E,GAAS5E,EAAK,CACrB,OAAO,KAAK,SAAS,IAAIA,CAAG,CAC7B,CAYD,SAAS6E,GAAS7E,EAAKZ,EAAO,CAC5B,IAAI8D,EAAO,KAAK,SAChB,GAAIA,aAAgBG,GAAW,CAC7B,IAAIyB,EAAQ5B,EAAK,SACjB,GAAI,CAACnB,IAAQ+C,EAAM,OAASrJ,EAAmB,EAC7C,OAAAqJ,EAAM,KAAK,CAAC9E,EAAKZ,CAAK,CAAC,EACvB,KAAK,KAAO,EAAE8D,EAAK,KACZ,KAETA,EAAO,KAAK,SAAW,IAAIW,GAASiB,CAAK,CAC1C,CACD,OAAA5B,EAAK,IAAIlD,EAAKZ,CAAK,EACnB,KAAK,KAAO8D,EAAK,KACV,IACR,CAGDsB,GAAM,UAAU,MAAQC,GACxBD,GAAM,UAAU,OAAYE,GAC5BF,GAAM,UAAU,IAAMG,GACtBH,GAAM,UAAU,IAAMI,GACtBJ,GAAM,UAAU,IAAMK,GAUtB,SAASE,GAAc3F,EAAO4F,EAAW,CACvC,IAAIC,EAAQC,GAAQ9F,CAAK,EACrB+F,EAAQ,CAACF,GAASG,GAAYhG,CAAK,EACnCiG,EAAS,CAACJ,GAAS,CAACE,GAASG,GAASlG,CAAK,EAC3CmG,EAAS,CAACN,GAAS,CAACE,GAAS,CAACE,GAAUG,GAAapG,CAAK,EAC1DqG,EAAcR,GAASE,GAASE,GAAUE,EAC1CpG,EAASsG,EAAchG,GAAUL,EAAM,OAAQ,MAAM,EAAI,CAAE,EAC3DH,EAASE,EAAO,OAEpB,QAASa,KAAOZ,GACT4F,GAAajE,EAAe,KAAK3B,EAAOY,CAAG,IAC5C,EAAEyF,IAECzF,GAAO,UAENqF,IAAWrF,GAAO,UAAYA,GAAO,WAErCuF,IAAWvF,GAAO,UAAYA,GAAO,cAAgBA,GAAO,eAE7D0F,GAAQ1F,EAAKf,CAAM,KAExBE,EAAO,KAAKa,CAAG,EAGnB,OAAOb,CACR,CAUD,SAASqE,GAAa1E,EAAOkB,EAAK,CAEhC,QADIf,EAASH,EAAM,OACZG,KACL,GAAI0G,GAAG7G,EAAMG,CAAM,EAAE,CAAC,EAAGe,CAAG,EAC1B,OAAOf,EAGX,MAAO,EACR,CAaD,SAAS2G,GAAe1F,EAAQ2F,EAAUC,EAAa,CACrD,IAAI3G,EAAS0G,EAAS3F,CAAM,EAC5B,OAAOgF,GAAQhF,CAAM,EAAIf,EAASE,GAAUF,EAAQ2G,EAAY5F,CAAM,CAAC,CACxE,CASD,SAAS6F,GAAW3G,EAAO,CACzB,OAAIA,GAAS,KACJA,IAAU,OAAYpC,EAAeR,EAEtCiF,IAAkBA,MAAkB,OAAOrC,CAAK,EACpD4G,GAAU5G,CAAK,EACf6G,GAAe7G,CAAK,CACzB,CASD,SAAS8G,GAAgB9G,EAAO,CAC9B,OAAO+G,GAAa/G,CAAK,GAAK2G,GAAW3G,CAAK,GAAKtD,CACpD,CAgBD,SAASsK,GAAYhH,EAAOiH,EAAOC,EAASC,EAAYC,EAAO,CAC7D,OAAIpH,IAAUiH,EACL,GAELjH,GAAS,MAAQiH,GAAS,MAAS,CAACF,GAAa/G,CAAK,GAAK,CAAC+G,GAAaE,CAAK,EACzEjH,IAAUA,GAASiH,IAAUA,EAE/BI,GAAgBrH,EAAOiH,EAAOC,EAASC,EAAYH,GAAaI,CAAK,CAC7E,CAgBD,SAASC,GAAgBvG,EAAQmG,EAAOC,EAASC,EAAYG,EAAWF,EAAO,CAC7E,IAAIG,EAAWzB,GAAQhF,CAAM,EACzB0G,EAAW1B,GAAQmB,CAAK,EACxBQ,EAASF,EAAW5K,EAAW+K,GAAO5G,CAAM,EAC5C6G,EAASH,EAAW7K,EAAW+K,GAAOT,CAAK,EAE/CQ,EAASA,GAAU/K,EAAUW,EAAYoK,EACzCE,EAASA,GAAUjL,EAAUW,EAAYsK,EAEzC,IAAIC,EAAWH,GAAUpK,EACrBwK,EAAWF,GAAUtK,EACrByK,EAAYL,GAAUE,EAE1B,GAAIG,GAAa5B,GAASpF,CAAM,EAAG,CACjC,GAAI,CAACoF,GAASe,CAAK,EACjB,MAAO,GAETM,EAAW,GACXK,EAAW,EACZ,CACD,GAAIE,GAAa,CAACF,EAChB,OAAAR,IAAUA,EAAQ,IAAIhC,IACdmC,GAAYnB,GAAatF,CAAM,EACnCiH,GAAYjH,EAAQmG,EAAOC,EAASC,EAAYG,EAAWF,CAAK,EAChEY,GAAWlH,EAAQmG,EAAOQ,EAAQP,EAASC,EAAYG,EAAWF,CAAK,EAE7E,GAAI,EAAEF,EAAU3K,GAAuB,CACrC,IAAI0L,EAAeL,GAAYjG,EAAe,KAAKb,EAAQ,aAAa,EACpEoH,EAAeL,GAAYlG,EAAe,KAAKsF,EAAO,aAAa,EAEvE,GAAIgB,GAAgBC,EAAc,CAChC,IAAIC,GAAeF,EAAenH,EAAO,MAAO,EAAGA,EAC/CsH,GAAeF,EAAejB,EAAM,MAAK,EAAKA,EAElD,OAAAG,IAAUA,EAAQ,IAAIhC,IACfkC,EAAUa,GAAcC,GAAclB,EAASC,EAAYC,CAAK,CACxE,CACF,CACD,OAAKU,GAGLV,IAAUA,EAAQ,IAAIhC,IACfiD,GAAavH,EAAQmG,EAAOC,EAASC,EAAYG,EAAWF,CAAK,GAH/D,EAIV,CAUD,SAASkB,GAAatI,EAAO,CAC3B,GAAI,CAACuI,GAASvI,CAAK,GAAKwI,GAASxI,CAAK,EACpC,MAAO,GAET,IAAIyI,EAAUC,GAAW1I,CAAK,EAAI+B,GAAarD,GAC/C,OAAO+J,EAAQ,KAAKxF,GAASjD,CAAK,CAAC,CACpC,CASD,SAAS2I,GAAiB3I,EAAO,CAC/B,OAAO+G,GAAa/G,CAAK,GACvB4I,GAAS5I,EAAM,MAAM,GAAK,CAAC,CAACpB,EAAe+H,GAAW3G,CAAK,CAAC,CAC/D,CASD,SAAS6I,GAAS/H,EAAQ,CACxB,GAAI,CAACgI,GAAYhI,CAAM,EACrB,OAAO0B,GAAW1B,CAAM,EAE1B,IAAIf,EAAS,CAAA,EACb,QAASa,KAAO,OAAOE,CAAM,EACvBa,EAAe,KAAKb,EAAQF,CAAG,GAAKA,GAAO,eAC7Cb,EAAO,KAAKa,CAAG,EAGnB,OAAOb,CACR,CAeD,SAASgI,GAAYrI,EAAOuH,EAAOC,EAASC,EAAYG,EAAWF,EAAO,CACxE,IAAI2B,EAAY7B,EAAU3K,EACtByM,EAAYtJ,EAAM,OAClBuJ,EAAYhC,EAAM,OAEtB,GAAI+B,GAAaC,GAAa,EAAEF,GAAaE,EAAYD,GACvD,MAAO,GAGT,IAAIE,EAAU9B,EAAM,IAAI1H,CAAK,EAC7B,GAAIwJ,GAAW9B,EAAM,IAAIH,CAAK,EAC5B,OAAOiC,GAAWjC,EAEpB,IAAIrH,EAAQ,GACRG,EAAS,GACToJ,EAAQjC,EAAU1K,EAA0B,IAAIyI,GAAW,OAM/D,IAJAmC,EAAM,IAAI1H,EAAOuH,CAAK,EACtBG,EAAM,IAAIH,EAAOvH,CAAK,EAGf,EAAEE,EAAQoJ,GAAW,CAC1B,IAAII,EAAW1J,EAAME,CAAK,EACtByJ,EAAWpC,EAAMrH,CAAK,EAE1B,GAAIuH,EACF,IAAImC,GAAWP,EACX5B,EAAWkC,EAAUD,EAAUxJ,EAAOqH,EAAOvH,EAAO0H,CAAK,EACzDD,EAAWiC,EAAUC,EAAUzJ,EAAOF,EAAOuH,EAAOG,CAAK,EAE/D,GAAIkC,KAAa,OAAW,CAC1B,GAAIA,GACF,SAEFvJ,EAAS,GACT,KACD,CAED,GAAIoJ,GACF,GAAI,CAAC/I,GAAU6G,EAAO,SAASoC,GAAUE,GAAU,CAC7C,GAAI,CAAC7I,GAASyI,EAAMI,EAAQ,IACvBH,IAAaC,IAAY/B,EAAU8B,EAAUC,GAAUnC,EAASC,EAAYC,CAAK,GACpF,OAAO+B,EAAK,KAAKI,EAAQ,CAEvC,CAAW,EAAG,CACNxJ,EAAS,GACT,KACD,UACQ,EACLqJ,IAAaC,GACX/B,EAAU8B,EAAUC,EAAUnC,EAASC,EAAYC,CAAK,GACzD,CACLrH,EAAS,GACT,KACD,CACF,CACD,OAAAqH,EAAM,OAAU1H,CAAK,EACrB0H,EAAM,OAAUH,CAAK,EACdlH,CACR,CAmBD,SAASiI,GAAWlH,EAAQmG,EAAOuC,EAAKtC,EAASC,EAAYG,EAAWF,EAAO,CAC7E,OAAQoC,EAAG,CACT,KAAKzL,EACH,GAAK+C,EAAO,YAAcmG,EAAM,YAC3BnG,EAAO,YAAcmG,EAAM,WAC9B,MAAO,GAETnG,EAASA,EAAO,OAChBmG,EAAQA,EAAM,OAEhB,KAAKnJ,EACH,MAAK,EAAAgD,EAAO,YAAcmG,EAAM,YAC5B,CAACK,EAAU,IAAIpF,GAAWpB,CAAM,EAAG,IAAIoB,GAAW+E,CAAK,CAAC,GAK9D,KAAKpK,EACL,KAAKC,EACL,KAAKK,EAGH,OAAOoJ,GAAG,CAACzF,EAAQ,CAACmG,CAAK,EAE3B,KAAKlK,EACH,OAAO+D,EAAO,MAAQmG,EAAM,MAAQnG,EAAO,SAAWmG,EAAM,QAE9D,KAAKzJ,EACL,KAAKE,EAIH,OAAOoD,GAAWmG,EAAQ,GAE5B,KAAK/J,EACH,IAAIuM,EAAU1I,GAEhB,KAAKtD,EACH,IAAIsL,EAAY7B,EAAU3K,EAG1B,GAFAkN,IAAYA,EAAUrI,IAElBN,EAAO,MAAQmG,EAAM,MAAQ,CAAC8B,EAChC,MAAO,GAGT,IAAIG,EAAU9B,EAAM,IAAItG,CAAM,EAC9B,GAAIoI,EACF,OAAOA,GAAWjC,EAEpBC,GAAW1K,EAGX4K,EAAM,IAAItG,EAAQmG,CAAK,EACvB,IAAIlH,EAASgI,GAAY0B,EAAQ3I,CAAM,EAAG2I,EAAQxC,CAAK,EAAGC,EAASC,EAAYG,EAAWF,CAAK,EAC/F,OAAAA,EAAM,OAAUtG,CAAM,EACff,EAET,KAAKpC,EACH,GAAI4F,GACF,OAAOA,GAAc,KAAKzC,CAAM,GAAKyC,GAAc,KAAK0D,CAAK,CAElE,CACD,MAAO,EACR,CAeD,SAASoB,GAAavH,EAAQmG,EAAOC,EAASC,EAAYG,EAAWF,EAAO,CAC1E,IAAI2B,EAAY7B,EAAU3K,EACtBmN,EAAWC,GAAW7I,CAAM,EAC5B8I,EAAYF,EAAS,OACrBG,EAAWF,GAAW1C,CAAK,EAC3BgC,EAAYY,EAAS,OAEzB,GAAID,GAAaX,GAAa,CAACF,EAC7B,MAAO,GAGT,QADInJ,EAAQgK,EACLhK,KAAS,CACd,IAAIgB,EAAM8I,EAAS9J,CAAK,EACxB,GAAI,EAAEmJ,EAAYnI,KAAOqG,EAAQtF,EAAe,KAAKsF,EAAOrG,CAAG,GAC7D,MAAO,EAEV,CAED,IAAIsI,EAAU9B,EAAM,IAAItG,CAAM,EAC9B,GAAIoI,GAAW9B,EAAM,IAAIH,CAAK,EAC5B,OAAOiC,GAAWjC,EAEpB,IAAIlH,EAAS,GACbqH,EAAM,IAAItG,EAAQmG,CAAK,EACvBG,EAAM,IAAIH,EAAOnG,CAAM,EAGvB,QADIgJ,GAAWf,EACR,EAAEnJ,EAAQgK,GAAW,CAC1BhJ,EAAM8I,EAAS9J,CAAK,EACpB,IAAImK,GAAWjJ,EAAOF,CAAG,EACrByI,GAAWpC,EAAMrG,CAAG,EAExB,GAAIuG,EACF,IAAImC,GAAWP,EACX5B,EAAWkC,GAAUU,GAAUnJ,EAAKqG,EAAOnG,EAAQsG,CAAK,EACxDD,EAAW4C,GAAUV,GAAUzI,EAAKE,EAAQmG,EAAOG,CAAK,EAG9D,GAAI,EAAEkC,KAAa,OACVS,KAAaV,IAAY/B,EAAUyC,GAAUV,GAAUnC,EAASC,EAAYC,CAAK,EAClFkC,IACD,CACLvJ,EAAS,GACT,KACD,CACD+J,KAAaA,GAAWlJ,GAAO,cAChC,CACD,GAAIb,GAAU,CAAC+J,GAAU,CACvB,IAAIE,GAAUlJ,EAAO,YACjBmJ,GAAUhD,EAAM,YAGhB+C,IAAWC,IACV,gBAAiBnJ,GAAU,gBAAiBmG,GAC7C,EAAE,OAAO+C,IAAW,YAAcA,cAAmBA,IACnD,OAAOC,IAAW,YAAcA,cAAmBA,MACvDlK,EAAS,GAEZ,CACD,OAAAqH,EAAM,OAAUtG,CAAM,EACtBsG,EAAM,OAAUH,CAAK,EACdlH,CACR,CASD,SAAS4J,GAAW7I,EAAQ,CAC1B,OAAO0F,GAAe1F,EAAQoJ,GAAMC,EAAU,CAC/C,CAUD,SAASvF,GAAW5D,EAAKJ,EAAK,CAC5B,IAAIkD,EAAO9C,EAAI,SACf,OAAOoJ,GAAUxJ,CAAG,EAChBkD,EAAK,OAAOlD,GAAO,SAAW,SAAW,MAAM,EAC/CkD,EAAK,GACV,CAUD,SAASpB,GAAU5B,EAAQF,EAAK,CAC9B,IAAIZ,EAAQa,GAASC,EAAQF,CAAG,EAChC,OAAO0H,GAAatI,CAAK,EAAIA,EAAQ,MACtC,CASD,SAAS4G,GAAU5G,EAAO,CACxB,IAAIqK,EAAQ1I,EAAe,KAAK3B,EAAOqC,EAAc,EACjDmH,EAAMxJ,EAAMqC,EAAc,EAE9B,GAAI,CACFrC,EAAMqC,EAAc,EAAI,OACxB,IAAIiI,EAAW,EACnB,MAAc,CAAE,CAEd,IAAIvK,EAAS+B,GAAqB,KAAK9B,CAAK,EAC5C,OAAIsK,IACED,EACFrK,EAAMqC,EAAc,EAAImH,EAExB,OAAOxJ,EAAMqC,EAAc,GAGxBtC,CACR,CASD,IAAIoK,GAAc7H,GAA+B,SAASxB,EAAQ,CAChE,OAAIA,GAAU,KACL,IAETA,EAAS,OAAOA,CAAM,EACfrB,GAAY6C,GAAiBxB,CAAM,EAAG,SAASyJ,EAAQ,CAC5D,OAAOpI,GAAqB,KAAKrB,EAAQyJ,CAAM,CACnD,CAAG,EACH,EARqCC,GAiBjC9C,GAASf,IAGRlE,IAAYiF,GAAO,IAAIjF,GAAS,IAAI,YAAY,CAAC,CAAC,CAAC,GAAK1E,GACxD4E,IAAO+E,GAAO,IAAI/E,EAAG,GAAKzF,GAC1B0F,IAAW8E,GAAO9E,GAAQ,QAAS,CAAA,GAAKtF,GACxCuF,IAAO6E,GAAO,IAAI7E,EAAG,GAAKpF,GAC1BqF,IAAW4E,GAAO,IAAI5E,EAAO,GAAKjF,KACrC6J,GAAS,SAAS1H,EAAO,CACvB,IAAID,EAAS4G,GAAW3G,CAAK,EACzByK,EAAO1K,GAAU1C,EAAY2C,EAAM,YAAc,OACjD0K,EAAaD,EAAOxH,GAASwH,CAAI,EAAI,GAEzC,GAAIC,EACF,OAAQA,EAAU,CAChB,KAAK1H,GAAoB,OAAOjF,EAChC,KAAKmF,GAAe,OAAOhG,EAC3B,KAAKiG,GAAmB,OAAO7F,EAC/B,KAAK8F,GAAe,OAAO3F,EAC3B,KAAK4F,GAAmB,OAAOxF,CAChC,CAEH,OAAOkC,CACX,GAWA,SAASuG,GAAQtG,EAAOH,EAAQ,CAC9B,OAAAA,EAASA,GAAiBpD,EACnB,CAAC,CAACoD,IACN,OAAOG,GAAS,UAAYrB,GAAS,KAAKqB,CAAK,IAC/CA,EAAQ,IAAMA,EAAQ,GAAK,GAAKA,EAAQH,CAC5C,CASD,SAASuK,GAAUpK,EAAO,CACxB,IAAI2K,EAAO,OAAO3K,EAClB,OAAQ2K,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,UACvE3K,IAAU,YACVA,IAAU,IAChB,CASD,SAASwI,GAAS/H,EAAM,CACtB,MAAO,CAAC,CAACmB,IAAeA,MAAcnB,CACvC,CASD,SAASqI,GAAY9I,EAAO,CAC1B,IAAIyK,EAAOzK,GAASA,EAAM,YACtB4K,EAAS,OAAOH,GAAQ,YAAcA,EAAK,WAAcjJ,GAE7D,OAAOxB,IAAU4K,CAClB,CASD,SAAS/D,GAAe7G,EAAO,CAC7B,OAAO8B,GAAqB,KAAK9B,CAAK,CACvC,CASD,SAASiD,GAASxC,EAAM,CACtB,GAAIA,GAAQ,KAAM,CAChB,GAAI,CACF,OAAOiB,GAAa,KAAKjB,CAAI,CACnC,MAAgB,CAAE,CACd,GAAI,CACF,OAAQA,EAAO,EACrB,MAAgB,CAAE,CACf,CACD,MAAO,EACR,CAkCD,SAAS8F,GAAGvG,EAAOiH,EAAO,CACxB,OAAOjH,IAAUiH,GAAUjH,IAAUA,GAASiH,IAAUA,CACzD,CAoBD,IAAIjB,GAAcc,GAAgB,UAAW,CAAE,OAAO,SAAU,GAAI,EAAIA,GAAkB,SAAS9G,EAAO,CACxG,OAAO+G,GAAa/G,CAAK,GAAK2B,EAAe,KAAK3B,EAAO,QAAQ,GAC/D,CAACmC,GAAqB,KAAKnC,EAAO,QAAQ,CAC9C,EAyBI8F,GAAU,MAAM,QA2BpB,SAAS+E,GAAY7K,EAAO,CAC1B,OAAOA,GAAS,MAAQ4I,GAAS5I,EAAM,MAAM,GAAK,CAAC0I,GAAW1I,CAAK,CACpE,CAmBD,IAAIkG,GAAW3D,IAAkBuI,GA8BjC,SAASC,GAAQ/K,EAAOiH,EAAO,CAC7B,OAAOD,GAAYhH,EAAOiH,CAAK,CAChC,CAmBD,SAASyB,GAAW1I,EAAO,CACzB,GAAI,CAACuI,GAASvI,CAAK,EACjB,MAAO,GAIT,IAAIwJ,EAAM7C,GAAW3G,CAAK,EAC1B,OAAOwJ,GAAOxM,GAAWwM,GAAOvM,GAAUuM,GAAO5M,GAAY4M,GAAOjM,CACrE,CA4BD,SAASqL,GAAS5I,EAAO,CACvB,OAAO,OAAOA,GAAS,UACrBA,EAAQ,IAAMA,EAAQ,GAAK,GAAKA,GAASvD,CAC5C,CA2BD,SAAS8L,GAASvI,EAAO,CACvB,IAAI2K,EAAO,OAAO3K,EAClB,OAAOA,GAAS,OAAS2K,GAAQ,UAAYA,GAAQ,WACtD,CA0BD,SAAS5D,GAAa/G,EAAO,CAC3B,OAAOA,GAAS,MAAQ,OAAOA,GAAS,QACzC,CAmBD,IAAIoG,GAAe5G,GAAmBgB,GAAUhB,EAAgB,EAAImJ,GA8BpE,SAASuB,GAAKpJ,EAAQ,CACpB,OAAO+J,GAAY/J,CAAM,EAAI6E,GAAc7E,CAAM,EAAI+H,GAAS/H,CAAM,CACrE,CAoBD,SAAS0J,IAAY,CACnB,MAAO,EACR,CAeD,SAASM,IAAY,CACnB,MAAO,EACR,CAED1L,EAAA,QAAiB2L,sDCrzDV,MAAMC,EAAa,CACtB,gBAAgBC,EAAO,CACnB,OAAO,KAAK,mBAAmBA,CAAK,EAAE,OACzC,CACD,mBAAmBA,EAAO,CACtB,OAAQ,OAAOA,GAAU,UACrBA,IAAU,MACV,YAAaA,GACb,OAAOA,EAAM,SAAY,QAChC,CACD,mBAAmBC,EAAY,CAC3B,GAAI,KAAK,mBAAmBA,CAAU,EAClC,OAAOA,EAEX,GAAI,CACA,OAAO,IAAI,MAAM,KAAK,UAAUA,CAAU,CAAC,CAC9C,MACK,CAGF,OAAO,IAAI,MAAM,OAAOA,CAAU,CAAC,CACtC,CACJ,CACL,CCtBA,MAAMC,EAAiB,CACnB,YAAYC,EAAUC,EAAQC,EAAMC,EAAOC,EAAgBC,EAAaC,EAAgB,CACpF,KAAK,eAAiB,GACtB,KAAK,KAAO,GACZ,KAAK,aAAaN,EAAU,UAAU,EACtC,KAAK,aAAaC,EAAQ,QAAQ,EAClC,KAAK,aAAaC,EAAM,MAAM,EAC9B,KAAK,aAAaC,EAAO,OAAO,EAChC,KAAK,aAAaC,EAAgB,gBAAgB,EAClD,KAAK,aAAaC,EAAa,aAAa,EAC5C,KAAK,aAAaC,EAAgB,gBAAgB,EAClD,KAAK,aAAe,IAAIV,GACxB,KAAK,KAAOM,EACZ,KAAK,OAASD,EACd,KAAK,UAAYG,EACjB,KAAK,SAAWJ,EAChB,KAAK,MAAQG,EACb,KAAK,YAAcE,EACnB,KAAK,eAAiBC,EACtB,KAAK,0BAAyB,CACjC,CACD,IAAI,eAAgB,CAChB,OAAO,KAAK,cACf,CACD,IAAI,QAAS,CACT,MAAMC,EAAO,KAAK,KAClB,OAAOA,GAAQA,EAAK,QAAUA,EAAK,QAAU,CAAA,CAChD,CACD,eAAgB,CACZ,OAAQ,OAAO,SAAS,KAAK,YAAa,EAAC,QAAQ,KAAK,SAAS,YAAY,aAAa,IACtF,CACP,CACD,cAAe,CACX,MAAMC,EAAS,KAAK,OACpB,MAAO,CAAC,CAACA,GAAU,CAAC,CAACA,EAAO,KAAOA,EAAO,IAAI,SAAS,KAAK,CAC/D,CACD,iBAAkB,CACd,MAAMD,EAAO,KAAK,KAClB,OAAOA,GAAQ,CAAC,CAACA,EAAK,YACzB,CAKD,MAAM,iBAAkB,CACpB,MAAME,EAAc,MAAM,KAAK,YAAY,aAAY,EACvD,GAAI,CAACA,EACD,MAAO,GAEX,KAAK,OAAO,KAAK,oDAAoD,EACrE,MAAMC,EAAQ,IAAI,gBAAgB,SAAS,SAAS,MAAM,EAAE,IAAIX,GAAiB,YAAY,EAC7F,OAAIW,GAASA,IAAUD,EAAY,QAAQ,KACvC,KAAK,OAAO,KAAK,kGAAkG,EACnH,MAAM,KAAK,YAAY,kBAChB,KAEX,KAAK,QAAQA,CAAW,EACjB,GACV,CAKD,MAAM,yBAAyBE,EAAa,CACxC,MAAMF,EAAc,MAAM,KAAK,YAAY,aAAY,EACvD,GAAIA,EACA,YAAK,OAAO,KAAK,6DAA6D,EAC9E,KAAK,QAAQA,CAAW,EACjB,GAEP,KAAK,MAAM,gBAAkB,IAC7B,KAAK,OAAO,KAAK,iEAAiE,EAClF,KAAK,MAAM,eAAiB,KAAK,qBAAoB,EACrD,KAAK,MAAM,QAEf,KAAK,OAAO,KAAK,yDAAyD,EAC1E,MAAMG,EAAW,KAAK,sBAAsBD,CAAW,EACvD,aAAM,KAAK,YAAY,oBAAoBC,CAAQ,EAC5C,EACV,CAKD,MAAM,6BAA8B,CAChC,IAAIC,EACJ,GAAI,CACA,MAAM,KAAK,YAAY,sBACvBA,EAAW,KAAK,MAAM,eACtB,KAAK,MAAM,cAAgB,CAC9B,OACMhB,EAAO,CACV,KAAK,OAAO,MAAM,6CAA6C,KAAK,aAAa,gBAAgBA,CAAK,CAAC,GAAG,EACtG,KAAK,MAAM,eAAiB,KAAK,SAAS,mBAC1C,KAAK,OAAO,KAAK,6DAA6D,EAC9E,MAAM,KAAK,YAAY,kBACvBgB,EAAW,KAAK,MAAM,eACtB,KAAK,MAAM,UAAY,OACvB,KAAK,MAAM,kBAGX,KAAK,OAAO,MAAM,+DAA+D,EACjFA,EAAW,KAAK,SAAS,iBACzB,KAAK,MAAM,UAAY,OACvB,KAAK,MAAM,cAAgB,EAElC,QACO,CACJ,KAAK,MAAM,MACd,CACD,OAAOA,CACV,CAKD,MAAM,oBAAoBC,EAAkB,GAAO,CAC/C,GAAI,CAAC,KAAK,MAAQ,CAAC,KAAK,KAAK,QACzB,MAAO,GAEX,MAAML,EAAc,KAAK,KAEzB,GAAI,KAAK,eACLA,EAAY,cACZA,EAAY,YACZA,EAAY,WAAa,EACzB,YAAK,OAAO,KAAK,gGAAgG,EAC1GA,EAAY,aAGvB,GAAIK,GACA,CAAC,KAAK,KAAK,cACV,KAAK,KAAK,YACP,KAAK,KAAK,WAAa,KAAK,SAAS,+BACzC,GAAI,CAEA,MAAM,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAe,SAAY,CAEzD,GAAIA,GACA,CAAC,KAAK,KAAK,cACV,KAAK,KAAK,YACP,KAAK,KAAK,WAAa,KAAK,SAAS,+BAAiC,CAC1E,MAAMC,EAAmB,KAAK,sBAAsB,IAAI,EACxD,GAAI,CACA,KAAK,eAAiB,GACtB,MAAM,KAAK,YAAY,kBAAkBA,CAAgB,EACzD,KAAK,OAAO,KAAK,uDAAuD,EACxE,KAAK,kBAAiB,CACzB,OACMlB,EAAO,CACV,MAAMmB,EAAM,KAAK,aAAa,gBAAgBnB,CAAK,EAC/CmB,IAAQ,iBACJ,KAAK,eAAe,cACpB,KAAK,OAAO,KAAK,+DAA+D,EAChF,MAAM,KAAK,eAAe,YAG1B,KAAK,OAAO,KAAK,gEAAgE,EACjF,MAAM,KAAK,gBAGVA,IAAQ,iBACb,KAAK,OAAO,KAAK,wEAAwE,EACzF,MAAM,KAAK,YAAY,kBACvB,MAAM,KAAK,YAAY,kBAAkBD,CAAgB,EACzD,KAAK,OAAO,KAAK,sEAAsE,EACvF,KAAK,kBAAiB,GAGtB,KAAK,OAAO,MAAM,4DAA4DlB,CAAK,EAAE,CAE5F,QACO,CACJ,KAAK,eAAiB,EACzB,CACJ,CACrB,CAAiB,CACJ,OACMoB,EAAK,CACR,KAAK,OAAO,MAAM,sEAAsEA,CAAG,EAAE,CAChG,CAEL,OAAO,KAAK,MACR,KAAK,KAAK,cACV,KAAK,KAAK,YACV,KAAK,KAAK,WAAa,EACrB,KAAK,KAAK,aACV,EACT,CAKD,MAAM,cAAe,CACjB,KAAK,OAAO,KAAK,8CAA8C,EAC/D,KAAK,eAAe,QAChB,KAAK,gBACL,KAAK,OAAO,KAAK,kEAAkE,EACnF,MAAM,KAAK,YAAY,2BAGvB,KAAK,OAAO,KAAK,mDAAmD,EACpE,MAAM,KAAK,YAAY,wBAE3B,KAAK,UAAS,CACjB,CACD,WAAY,CACJ,KAAK,KAAK,UACV,KAAK,KAAO,GACZ,KAAK,UAAU,6BAA6B,EAAK,EAExD,CACD,QAAQC,EAAS,CACb,IAAIC,EAAY,GACZC,EAAmB,GACnBC,EAAqB,GACrB,KAAK,MAAQ,KAAK,KAAK,SAAWH,GAAWA,EAAQ,UACrDC,EAAY,KAAK,KAAK,QAAQ,MAAQD,EAAQ,QAAQ,IACtDE,EAAmB,CAACzB,GAAQ,KAAK,KAAK,QAASuB,EAAQ,OAAO,EAC9DG,EAAqB,KAAK,KAAK,gBAAkBH,EAAQ,eAE7D,KAAK,OAAO,KAAK,oDAAoDA,EAAQ,UAAU,GAAG,EAC1F,KAAK,KAAOA,GACR,CAAC,KAAK,eAAe,WAAaG,IAClC,KAAK,kBAAiB,EAEtBF,GACA,KAAK,UAAU,6BAA6B,EAAI,EAEhDC,GACA,KAAK,UAAU,sBAEtB,CACD,mBAAoB,CAChB,GAAI,CAAC,KAAK,KAAM,CACZ,KAAK,eAAe,QACpB,MACH,CACD,KAAK,OAAO,KAAK,qDAAqD,EACtE,MAAME,EAAqB,SAAS,KAAK,KAAK,QAAQ,iBAAiB,EACjEC,EAAoB,KAAK,SAAS,6BAClC,KAAK,IAAID,EAAoB,KAAK,SAAS,4BAA4B,EACvEA,EACN,KAAK,eAAe,OAAOC,CAAiB,CAC/C,CACD,sBAAuB,CACnB,MAAMC,EAAS,IAAI,gBAAgB,SAAS,SAAS,MAAM,EAC3DA,EAAO,OAAOzB,GAAiB,YAAY,EAC3C,IAAI0B,EAASD,EAAO,WAChBC,EAAO,OAAS,IAChBA,EAAS,IAAIA,CAAM,IAEvB,MAAMC,EAAQ,GAAG,SAAS,SAAS,QAAQ,GAAGD,CAAM,GAAG,SAAS,SAAS,MAAQ,EAAE,GACnF,YAAK,OAAO,KAAK,iDAAiDC,CAAK,GAAG,EACnEA,CACV,CACD,sBAAsBf,EAAa,CAC/B,MAAMI,EAAmBJ,GAAe,GAClCa,EAAS,IAAI,gBAAgB,SAAS,SAAS,MAAM,EAC3D,OAAAzB,GAAiB,wBAAwB,QAASvK,GAAQ,CAClDgM,EAAO,IAAIhM,CAAG,IACduL,EAAiBvL,CAAG,EAAIgM,EAAO,IAAIhM,CAAG,EAEtD,CAAS,EACG,KAAK,iBACLuL,EAAiBhB,GAAiB,YAAY,EAAI,KAAK,KAAK,QAAQ,KAEpE,KAAK,eAAe,cACpBgB,EAAiB,QAAU,IAExB,CACH,iBAAkBA,CAC9B,CACK,CACD,2BAA4B,CACxB,KAAK,YAAY,sBAAuBY,GAAe,CACnD,KAAK,QAAQA,CAAU,CACnC,CAAS,EACD,KAAK,YAAY,yBAAyB,IAAM,CACvC,KAAK,gBACN,KAAK,aAAY,CAEjC,CAAS,EACD,KAAK,YAAY,wBAAwB,IAAM,CAC3C,KAAK,UAAS,CAC1B,CAAS,CACJ,CACD,aAAa/M,EAAOgN,EAAM,CACtB,GAAI,CAAChN,EACD,MAAM,MAAM,GAAGgN,CAAI,kCAAkC,CAE5D,CACL,CACA7B,GAAiB,aAAe,SAChCA,GAAiB,wBAA0B,CACvC,SACA,OACA,MACA,aACA,eACA,aACA,cACA,UACJ,ECjTO,MAAM8B,GAAyB,CAClC,sBAAuB,oCACvB,cAAe,2BACnB,ECHaC,GAAuB,CAChC,KAAM,EACN,MAAO,EACP,KAAM,EACN,KAAM,EACN,MAAO,CACX,ECLA,IAAIC,EAAY,SAAUC,EAAM,CAW/B,GAVAA,EAAOA,GAAQ,GAEf,KAAK,QAAUA,EAAK,SAAW,QAI/B,KAAK,OAAS,OAAO,OAAO,IAAI,EAGhC,KAAK,gBAAkBA,EAAK,iBAAmB,GAC3C,KAAK,gBAAiB,CACzB,GAAI,OAAO,QAAY,KAAe,OAAO,QAAQ,OAAW,IAC/D,MAAM,IAAI,MACT,yLACmF,EAGrF,KAAK,QAAU,OAAO,OAAO,IAAI,CACjC,CAED,KAAK,QAAUA,EAAK,SAAWD,EAAU,gBACzC,KAAK,kBAAoBC,EAAK,mBAAqBD,EAAU,4BACzDC,EAAK,aAAe,KAAa,OAAO,UAAUA,EAAK,UAAU,GAAKA,EAAK,YAAc,EAC5F,KAAK,WAAaA,EAAK,WAEvB,KAAK,WAAaD,EAAU,mBAE9B,EAEAA,EAAU,gBAAkB,EAC5BA,EAAU,4BAA8B,EACxCA,EAAU,oBAAsB,IAUhCA,EAAU,UAAU,QAAU,SAAUvM,EAAKyM,EAAIC,EAAIF,EAAM,CAC1D,GAAI,MAAM,QAAQxM,CAAG,EACpB,OAAO,KAAK,cAAcA,EAAKyM,EAAIC,EAAIF,CAAI,EAG5C,GAAI,OAAQC,GAAQ,WACnB,MAAM,IAAI,MAAM,qCAAqC,EAItD,IAAIE,EAAkB,KAClBC,EAAiB,KACjBC,EAAW,KAEX,OAAQH,GAAQ,aACnBF,EAAOE,EACPA,EAAK,KAGLG,EAAW,IAAI,KAAK,QAAQ,SAASC,EAASC,EAAQ,CACrDJ,EAAkBG,EAClBF,EAAiBG,CACpB,CAAG,GAGFP,EAAOA,GAAQ,GAEf,IAAIQ,EAAW,GACXC,EAAQ,KACRC,EAAkB,KAClBC,EAAO,KAEPC,EAAO,SAAUC,EAAQ5B,EAAK6B,EAAK,CAElCJ,IACH,aAAaA,CAAe,EAC5BA,EAAkB,MAGfG,IACGF,EAAK,OAAOnN,CAAG,GAAKmN,EAAK,OAAOnN,CAAG,EAAE,SAAW,GACrD,OAAOmN,EAAK,OAAOnN,CAAG,EAEnBmN,EAAK,iBACR,OAAOA,EAAK,QAAQnN,CAAG,GAIpBgN,IACCH,EAOApB,EACHmB,EAAenB,CAAG,EAGlBkB,EAAgBW,CAAG,EAVhB,OAAQZ,GAAQ,YACnBA,EAAGjB,EAAK6B,CAAG,EAYbN,EAAW,IAGRK,GAEGF,EAAK,OAAOnN,CAAG,GAAKmN,EAAK,OAAOnN,CAAG,EAAE,OAAS,GACnDmN,EAAK,OAAOnN,CAAG,EAAE,MAAO,EAAA,CAG5B,EAEKuN,EAAO,SAAUF,EAAQ,CAC5B,GAAIL,EACH,OAAOI,EAAKC,CAAM,EAanB,GAVIJ,IACH,aAAaA,CAAK,EAClBA,EAAQ,MAGLE,EAAK,iBAAmBE,IAC3BF,EAAK,QAAQnN,CAAG,EAAI,QAAQ,QAIzByM,EAAG,SAAW,EAAG,CACpB,IAAIe,EAAS,GACb,GAAI,CACHf,EAAG,SAAUhB,EAAK6B,EAAK,CACjBE,IACJA,EAAS,GACTJ,EAAKC,EAAQ5B,EAAK6B,CAAG,EAE3B,CAAK,CACD,OAAQ7B,EAAK,CAER+B,IACJA,EAAS,GACTJ,EAAKC,EAAQ5B,CAAG,EAEjB,CACD,MAGA0B,EAAK,YAAY,UAAY,CAC5B,OAAOV,EAAE,CACb,CAAI,EACA,KAAK,SAASa,EAAI,CAClBF,EAAKC,EAAQ,OAAWC,CAAG,CAC3B,EAAE,SAASjD,EAAM,CACjB+C,EAAKC,EAAQhD,CAAK,CACtB,CAAI,CAEJ,EAMC,GAJI8C,EAAK,iBAAqB,QAAQ,SACrCI,EAAO,QAAQ,OAAO,KAAKA,CAAI,GAG5B,CAACJ,EAAK,OAAOnN,CAAG,EACnBmN,EAAK,OAAOnN,CAAG,EAAI,GACnBuN,EAAK,EAAI,UAEDJ,EAAK,iBAAqB,QAAQ,QAAU,QAAQ,SAAWA,EAAK,QAAQnN,CAAG,EAGvFuN,EAAK,EAAK,UAEFJ,EAAK,OAAOnN,CAAG,EAAE,QAAUmN,EAAK,WACxCC,EAAK,GAAO,IAAI,MAAM,mCAAqCpN,CAAG,CAAC,MAE3D,CACJ,IAAIyN,EAAS,UAAY,CACxBF,EAAK,EAAI,CACZ,EACMf,EAAK,UACRW,EAAK,OAAOnN,CAAG,EAAE,QAAQyN,CAAM,EAE/BN,EAAK,OAAOnN,CAAG,EAAE,KAAKyN,CAAM,EAG7B,IAAIC,EAAUlB,EAAK,SAAWW,EAAK,QAC/BO,IACHT,EAAQ,WAAW,UAAY,CAC9BA,EAAQ,KACRG,EAAK,GAAO,IAAI,MAAM,iCAAmCpN,CAAG,CAAC,CAC7D,EAAE0N,CAAO,EAEX,CAED,IAAIC,EAAoBnB,EAAK,mBAAqBW,EAAK,kBASvD,GARKQ,IACHT,EAAkB,WAAW,UAAY,CAClCC,EAAK,OAAOnN,CAAG,GACpBoN,EAAK,GAAO,IAAI,MAAM,gDAAkDpN,CAAG,CAAC,CAE7E,EAAE2N,CAAiB,GAGlBd,EACH,OAAOA,CAET,EAkBAN,EAAU,UAAU,cAAgB,SAAUjD,EAAMmD,EAAIC,EAAIF,EAAM,CAC7D,OAAQE,GAAQ,aACnBF,EAAOE,EACPA,EAAK,MAGN,IAAIS,EAAO,KACPS,EAAQ,SAAU5N,EAAKyM,EAAI,CAC9B,OAAO,SAAUC,EAAI,CACpBS,EAAK,QAAQnN,EAAKyM,EAAIC,EAAIF,CAAI,CACjC,CACA,EAEKqB,EAAMvE,EAAK,YAAY,SAAUwE,EAAM9N,EAAK,CAC/C,OAAO4N,EAAM5N,EAAK8N,CAAI,CACtB,EAAErB,CAAE,EAEL,GAAI,OAAQC,GAAQ,WACnBmB,EAAInB,CAAE,MAGN,QAAO,IAAI,KAAK,QAAQ,SAAUI,EAASC,EAAQ,CAE9Cc,EAAI,SAAW,EAClBA,EAAI,SAAUpC,EAAK6B,EAAK,CACnB7B,EACHsB,EAAOtB,CAAG,EAGVqB,EAAQQ,CAAG,CAEjB,CAAK,EAEDR,EAAQe,EAAG,CAAE,CAEjB,CAAG,CAEH,EAOAtB,EAAU,UAAU,OAAS,SAAUvM,EAAK,CAC3C,OAAKA,EAIG,CAAC,CAAC,KAAK,OAAOA,CAAG,EAHjB,OAAO,KAAK,KAAK,MAAM,EAAE,OAAS,CAK3C,EAKAuM,EAAU,UAAU,YAAc,SAASE,EAAI,CAC9C,GAAI,CACH,OAAO,KAAK,QAAQ,QAAQA,EAAI,CAAA,CAChC,OAAQsB,EAAG,CACX,OAAO,KAAK,QAAQ,OAAOA,CAAC,CAC5B,CACF,EAEA,IAAAC,GAAiBzB,ECnSjB0B,GAAiBC,mBCCV,MAAMC,EAA2B,CACpC,YAAY1D,EAAQ,CAChB,KAAK,OAASA,EACd,KAAK,UAAY,MACpB,CACD,6BAA6B2D,EAAiB,CAC1C,KAAK,OAAO,KAAK,gFAAgFA,CAAe,GAAG,EACnH,KAAK,QAAQ/B,GAAuB,sBAAuB,CACvD,gBAAiB+B,CAC7B,CAAS,CACJ,CACD,sBAAuB,CACnB,KAAK,OAAO,KAAK,kDAAkD,EACnE,KAAK,QAAQ/B,GAAuB,aAAa,CACpD,CACD,QAAQtC,EAAMsE,EAAS,GAAI,CACvB,KAAK,UAAU,cAAc,IAAI,YAAYtE,EAAM,CAAE,OAAAsE,CAAQ,CAAA,CAAC,CACjE,CACL,CCnBO,MAAMC,EAA6B,CACtC,YAAYC,EAAc9D,EAAQ+D,EAAYC,EAAwBC,EAAsB,GAAM,CAC9F,KAAK,gBAAkB,CAAC,IAAK,GAAG,EAChC,KAAK,uBAAyB,GAC9B,KAAK,cAAgB,OAAO,MAC5B,KAAK,aAAeH,EACpB,KAAK,OAAS9D,EACd,KAAK,WAAa+D,EAClB,KAAK,uBAAyBC,EAC1BC,IACA,OAAO,MAAQ,MAAOC,EAAOC,IAAS,OAAO,6BAA6B,MAAMD,EAAOC,CAAI,EAElG,CACD,MAAM,MAAMD,EAAOC,EAAM,CACrB,MAAMC,EAAMF,EAAM,IACZA,EAAM,IAAI,YAAa,EACvBA,EAAM,WAAW,cAEvB,MAAI,CAAC,KAAK,aAAa,gBAAiB,GACnC,KAAK,aAAa,gBACdE,EAAI,SAAS,eAAe,GACzBA,EAAI,SAAS,kBAAkB,GAC/BA,EAAI,SAAS,kCAAkC,IACvD,CAAC,KAAK,WAAW,sBAAsBF,EAAM,WAAY,KAAK,sBAAsB,GACpF,KAAK,OAAO,KAAK,uHAAuHA,CAAK,IAAI,EAC1I,KAAK,cAAc,KAAK,OAAQA,EAAOC,CAAI,GAE/C,KAAK,cAAcD,EAAOC,CAAI,CACxC,CACD,MAAM,cAAcD,EAAOC,EAAM,CAC7B,KAAK,OAAO,KAAK,0EAA0ED,CAAK,+BAA+B,EAC/H,MAAMG,EAAU,MAAM,KAAK,gCAAgCF,CAAI,EAC/D,IAAIG,EAAW,MAAM,KAAK,cAAc,KAAK,OAAQJ,EAAOG,CAAO,EACnE,OAAI,KAAK,gBAAgB,SAASC,EAAS,MAAM,IAC7C,KAAK,OAAO,KAAK,4EAA4EA,EAAS,MAAM,YAAY,EACxHA,EAAW,MAAM,KAAK,cAAc,KAAK,OAAQJ,EAAOG,CAAO,GAE5DC,CACV,CACD,MAAM,gCAAgCH,EAAM,CACxCA,EAAOA,GAAQ,GACfA,EAAK,QAAUA,EAAK,SAAW,CAAA,EAC/B,IAAII,EAAQ,MAAM,KAAK,aAAa,oBAAoB,EAAK,EAC7D,MAAI,CAACA,IACDA,EAAQ,MAAM,KAAK,aAAa,oBAAoB,EAAI,EACpD,CAACA,IACD,KAAK,OAAO,MAAM,sHAAsH,EACjIJ,IAIfA,EAAK,QAAQ,cAAmBI,EAAQ,UAAUA,CAAK,GAAK,KACrDJ,EACV,CACL,CCpDO,MAAMK,EAAmB,CAC5B,YAAYC,EAAO,CACf,KAAK,MAAQ5C,GAAqB,KAClC,KAAK,SAAS4C,CAAK,CACtB,CACD,UAAW,CACP,OAAO,KAAK,KACf,CACD,SAAS9P,EAAO,CACRkN,GAAqB,MAAQlN,GAASA,GAASkN,GAAqB,MACpE,KAAK,MAAQlN,EAGb,KAAK,MAAQkN,GAAqB,IAEzC,CACD,MAAM6C,EAAS,CACP,KAAK,OAAS7C,GAAqB,OACnC,QAAQ,MAAM6C,CAAO,CAE5B,CACD,KAAKA,EAAS,CACN,KAAK,OAAS7C,GAAqB,MACnC,QAAQ,KAAK6C,CAAO,CAE3B,CACD,KAAKA,EAAS,CACN,KAAK,OAAS7C,GAAqB,MACnC,QAAQ,KAAK6C,CAAO,CAE3B,CACD,MAAMA,EAAS,CACP,KAAK,OAAS7C,GAAqB,OACnC,QAAQ,MAAM6C,CAAO,CAE5B,CACL,CCrCO,MAAMC,EAAqB,CAC9B,YAAY,CAAE,UAAAC,EAAY,qBAAsB,UAAAC,EAAW,SAAAC,EAAU,SAAAC,EAAWlD,GAAqB,KAAM,6BAAAmD,EAA8B,qBAAAC,EAAuB,GAAM,sBAAAC,EAAuB,YAAAC,EAAa,+BAAAC,EAAiC,IAE3O,MAAAC,EAAQ,4EAA6E,mCAAAC,EAAqC,IAAO,qBAAAC,EAAuB,EAAO,EAAEvF,EAAQ+D,EAAY,CACjL,KAAK,qBAAuB,GAC5B,KAAK,eAAiB,GACtB,KAAK,aAAe,OACpB,KAAK,aAAe,GACpB,KAAK,sBAAwB,GAC7B,KAAK,wBAA0B,GAC/B,KAAK,6BAA+B,OACpC,KAAK,kBAAoB,EACzB,KAAK,eAAiB,GACtB,KAAK,qBAAqBc,EAAW,WAAW,EAChD,KAAK,qBAAqBC,EAAU,UAAU,EAC9C,KAAK,qBAAqBI,EAAuB,uBAAuB,EACxE,KAAK,qBAAqBC,EAAa,aAAa,EACpD,KAAK,qBAAqBE,EAAO,OAAO,EACxC,KAAK,OAASrF,EACd,KAAK,WAAa+D,EAClB,KAAK,UAAYa,EACjB,KAAK,UAAYC,EACjB,KAAK,SAAWC,EAChB,KAAK,SAAWC,EAChB,KAAK,6BAA+BC,EAA+BA,EAA+B,GAAK,OACvG,KAAK,qBAAuB,CAAC,CAACC,EAC9B,KAAK,sBAAwBC,EAC7B,KAAK,YAAcC,EACnB,KAAK,+BAAiCC,EACtC,KAAK,MAAQC,EACb,KAAK,mCAAqCC,EAC1C,KAAK,qBAAuBC,EACxB,CAAC,KAAK,sBAAwB,KAAK,eAAc,IACjD,KAAK,eAAiB,GACtB,KAAK,eAAiB,IAEtB,KAAK,gBAAkB,CAAC,KAAK,6BAA4B,IACzD,KAAK,OAAO,KAAK,iEAAiE,EAClF,KAAK,eAAiB,IAE1B,KAAK,iBAAmB,GAAG,IAAI,IAAI,KAAK,SAAS,EAAE,MAAM,eAC5D,CACD,qBAAqB5Q,EAAOgN,EAAM,CAC9B,GAAI,EAAEhN,GAAU,MAAoCA,EAAM,KAAI,GAC1D,MAAM,MAAM,GAAGgN,CAAI,+CAA+C,CAEzE,CACD,gBAAiB,CACb,OAAO,OAAO,SAAS,KAAK,YAAW,EAAG,WAAW,KAAK,YAAY,YAAW,CAAE,CACtF,CACD,8BAA+B,CAC3B,MAAM6D,EAAkB,KAAK,WAAW,UAAU,KAAK,SAAS,EAC1DC,EAAiB,KAAK,WAAW,UAAU,KAAK,WAAW,EACjE,YAAK,OAAO,KAAK,wEAAwED,CAAe,sBAAsBC,CAAc,EAAE,EACvID,IAAoBC,CAC9B,CACL,CCzDO,MAAMC,EAAkB,CAC3B,YAAYZ,EAAU9E,EAAQ2F,EAAS,CACnC,KAAK,MAAQ,GACb,KAAK,WAAa,iBAAiBb,CAAQ,GAC3C,KAAK,OAAS9E,EACd,KAAK,QAAU2F,EACf,MAAMC,EAAO,KAAK,QAAQ,QAAQ,KAAK,UAAU,EAC7CA,IACA,KAAK,OAAO,MAAM,0DAA0D,EAC5E,KAAK,MAAQ,KAAK,MAAMA,CAAI,EAEnC,CACD,IAAI,eAAgB,CAChB,OAAO,KAAK,MAAM,gBAAkB,CACvC,CACD,IAAI,cAAcjR,EAAO,CACrB,KAAK,MAAM,eAAiBA,CAC/B,CACD,IAAI,gBAAiB,CACjB,OAAO,KAAK,MAAM,iBAAmB,GACxC,CACD,IAAI,eAAeA,EAAO,CACtB,KAAK,MAAM,gBAAkBA,CAChC,CACD,IAAI,WAAY,CACZ,OAAO,KAAK,MAAM,YAAc,MACnC,CACD,IAAI,UAAUA,EAAO,CACjB,KAAK,MAAM,WAAaA,CAC3B,CACD,MAAO,CACH,KAAK,OAAO,MAAM,mDAAmD,EACrE,KAAK,QAAQ,QAAQ,KAAK,WAAY,KAAK,UAAU,KAAK,KAAK,CAAC,CACnE,CACD,OAAQ,CACJ,KAAK,MAAQ,GACb,KAAK,QAAQ,WAAW,KAAK,UAAU,CAC1C,CACL,CCtCA,MAAMkR,EAAW,CACb,UAAUzB,EAAK,CACX,MAAM0B,EAAW,KAAK,YAAY1B,CAAG,EACrC,GAAI,CAAC0B,EACD,MAAO,GAEX,MAAMC,EAAgBD,EAAS,MAAM,GAAG,EACxC,GAAIC,EAAc,QAAU,EAAG,CAC3B,MAAMC,EAA4BD,EAAcA,EAAc,OAAS,CAAC,EAClEE,EAAoBF,EAAcA,EAAc,OAAS,CAAC,EAChE,MAAO,GAAGC,CAAyB,IAAIC,CAAiB,EAC3D,CACD,MAAO,EACV,CACD,sBAAsB7B,EAAKJ,EAAyB,GAAI,CACpD,GAAI,CAACI,GAAOA,EAAI,SAAW,EACvB,MAAO,GAEX,MAAM0B,EAAW,KAAK,YAAY1B,CAAG,EACrC,GAAIA,EAAI,SAAS,gBAAgB,EAC7B,MAAO,GAEX,GAAI,CAAC0B,EACD,MAAO,GAEX,GAAI9B,EAAuB,SAAS8B,CAAQ,EACxC,MAAO,GAEX,UAAWI,KAAcL,GAAW,qBAChC,GAAIC,EAAS,SAASI,CAAU,EAC5B,MAAO,GAGf,MAAO,EACV,CACD,YAAY9B,EAAK,CACb,GAAI,CACA,MAAM+B,EAAc/B,EAAI,QAAQ,oBAAqB,EAAE,EAEvD,OADkB,IAAI,IAAI+B,CAAW,EACpB,SAAS,aAC7B,MACK,CACF,MAAO,EACV,CACJ,CACL,CACAN,GAAW,qBAAuB,CAC9B,YACA,cACA,eACA,gBACA,iBACJ,sPCrDA,MAAeO,GAAA,CAAA,qICAb,SAAUzS,EAAM0S,EAAS,CAGzBtS,EAAiB,QAAUsS,GAU5B,GAACC,EAAM,UAAY,CAOnB,IAAIC,EAAWA,GAAa,SAAUC,EAAMC,EAAW,CAEnD,IAAIC,EA4BJ,GAzBI,OAAO,OAAW,KAAe,OAAO,SACxCA,EAAS,OAAO,QAIhB,OAAO,KAAS,KAAe,KAAK,SACpCA,EAAS,KAAK,QAId,OAAO,WAAe,KAAe,WAAW,SAChDA,EAAS,WAAW,QAIpB,CAACA,GAAU,OAAO,OAAW,KAAe,OAAO,WACnDA,EAAS,OAAO,UAIhB,CAACA,GAAU,OAAOjT,EAAW,KAAeA,EAAO,SACnDiT,EAASjT,EAAO,QAIhB,CAACiT,GAAU,OAAOC,IAAY,WAC9B,GAAI,CACAD,EAASjD,EACtB,MAAuB,CAAE,CAQpB,IAAImD,EAAwB,UAAY,CACpC,GAAIF,EAAQ,CAER,GAAI,OAAOA,EAAO,iBAAoB,WAClC,GAAI,CACA,OAAOA,EAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CACxE,MAA+B,CAAE,CAIpB,GAAI,OAAOA,EAAO,aAAgB,WAC9B,GAAI,CACA,OAAOA,EAAO,YAAY,CAAC,EAAE,YAAW,CAC7D,MAA+B,CAAE,CAEvB,CAED,MAAM,IAAI,MAAM,qEAAqE,CAC9F,EAMSG,EAAS,OAAO,QAAW,UAAY,CACvC,SAASC,GAAI,CAAE,CAEf,OAAO,SAAUC,EAAK,CAClB,IAAIC,EAEJ,OAAAF,EAAE,UAAYC,EAEdC,EAAU,IAAIF,EAEdA,EAAE,UAAY,KAEPE,CACpB,CACM,EAAA,EAKGC,EAAI,CAAA,EAKJC,EAAQD,EAAE,IAAM,GAKhBE,EAAOD,EAAM,KAAQ,UAAY,CAGjC,MAAO,CAmBH,OAAQ,SAAUE,EAAW,CAEzB,IAAIJ,EAAUH,EAAO,IAAI,EAGzB,OAAIO,GACAJ,EAAQ,MAAMI,CAAS,GAIvB,CAACJ,EAAQ,eAAe,MAAM,GAAK,KAAK,OAASA,EAAQ,QACzDA,EAAQ,KAAO,UAAY,CACvBA,EAAQ,OAAO,KAAK,MAAM,KAAM,SAAS,CAClE,GAIiBA,EAAQ,KAAK,UAAYA,EAGzBA,EAAQ,OAAS,KAEVA,CACV,EAcD,OAAQ,UAAY,CAChB,IAAIK,EAAW,KAAK,SACpB,OAAAA,EAAS,KAAK,MAAMA,EAAU,SAAS,EAEhCA,CACV,EAcD,KAAM,UAAY,CACjB,EAaD,MAAO,SAAUC,EAAY,CACzB,QAASC,KAAgBD,EACjBA,EAAW,eAAeC,CAAY,IACtC,KAAKA,CAAY,EAAID,EAAWC,CAAY,GAKhDD,EAAW,eAAe,UAAU,IACpC,KAAK,SAAWA,EAAW,SAElC,EAWD,MAAO,UAAY,CACf,OAAO,KAAK,KAAK,UAAU,OAAO,IAAI,CACzC,CACd,CACM,EAAA,EAQGE,EAAYN,EAAM,UAAYC,EAAK,OAAO,CAa1C,KAAM,SAAUM,EAAOC,EAAU,CAC7BD,EAAQ,KAAK,MAAQA,GAAS,CAAA,EAE1BC,GAAYjB,EACZ,KAAK,SAAWiB,EAEhB,KAAK,SAAWD,EAAM,OAAS,CAEtC,EAeD,SAAU,SAAUE,EAAS,CACzB,OAAQA,GAAWC,GAAK,UAAU,IAAI,CACzC,EAaD,OAAQ,SAAUC,EAAW,CAEzB,IAAIC,EAAY,KAAK,MACjBC,EAAYF,EAAU,MACtBG,EAAe,KAAK,SACpBC,EAAeJ,EAAU,SAM7B,GAHA,KAAK,MAAK,EAGNG,EAAe,EAEf,QAASE,EAAI,EAAGA,EAAID,EAAcC,IAAK,CACnC,IAAIC,EAAYJ,EAAUG,IAAM,CAAC,IAAO,GAAMA,EAAI,EAAK,EAAM,IAC7DJ,EAAWE,EAAeE,IAAO,CAAC,GAAKC,GAAa,IAAOH,EAAeE,GAAK,EAAK,CACvF,KAGD,SAASE,EAAI,EAAGA,EAAIH,EAAcG,GAAK,EACnCN,EAAWE,EAAeI,IAAO,CAAC,EAAIL,EAAUK,IAAM,CAAC,EAG/D,YAAK,UAAYH,EAGV,IACV,EASD,MAAO,UAAY,CAEf,IAAIR,EAAQ,KAAK,MACbC,EAAW,KAAK,SAGpBD,EAAMC,IAAa,CAAC,GAAK,YAAe,GAAMA,EAAW,EAAK,EAC9DD,EAAM,OAASjB,EAAK,KAAKkB,EAAW,CAAC,CACxC,EAWD,MAAO,UAAY,CACf,IAAIW,EAAQlB,EAAK,MAAM,KAAK,IAAI,EAChC,OAAAkB,EAAM,MAAQ,KAAK,MAAM,MAAM,CAAC,EAEzBA,CACV,EAeD,OAAQ,SAAUC,EAAQ,CAGtB,QAFIb,EAAQ,CAAA,EAEHS,EAAI,EAAGA,EAAII,EAAQJ,GAAK,EAC7BT,EAAM,KAAKb,EAAqB,CAAE,EAGtC,OAAO,IAAIY,EAAU,KAAKC,EAAOa,CAAM,CAC1C,CACV,CAAM,EAKGC,EAAQtB,EAAE,IAAM,GAKhBW,EAAMW,EAAM,IAAM,CAclB,UAAW,SAAUV,EAAW,CAO5B,QALIJ,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SAGrBW,EAAW,CAAA,EACNN,EAAI,EAAGA,EAAIR,EAAUQ,IAAK,CAC/B,IAAIO,EAAQhB,EAAMS,IAAM,CAAC,IAAO,GAAMA,EAAI,EAAK,EAAM,IACrDM,EAAS,MAAMC,IAAS,GAAG,SAAS,EAAE,CAAC,EACvCD,EAAS,MAAMC,EAAO,IAAM,SAAS,EAAE,CAAC,CAC3C,CAED,OAAOD,EAAS,KAAK,EAAE,CAC1B,EAeD,MAAO,SAAUE,EAAQ,CAMrB,QAJIC,EAAeD,EAAO,OAGtBjB,EAAQ,CAAA,EACHS,EAAI,EAAGA,EAAIS,EAAcT,GAAK,EACnCT,EAAMS,IAAM,CAAC,GAAK,SAASQ,EAAO,OAAOR,EAAG,CAAC,EAAG,EAAE,GAAM,GAAMA,EAAI,EAAK,EAG3E,OAAO,IAAIV,EAAU,KAAKC,EAAOkB,EAAe,CAAC,CACpD,CACV,EAKSC,EAASL,EAAM,OAAS,CAcxB,UAAW,SAAUV,EAAW,CAO5B,QALIJ,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SAGrBgB,EAAc,CAAA,EACTX,EAAI,EAAGA,EAAIR,EAAUQ,IAAK,CAC/B,IAAIO,EAAQhB,EAAMS,IAAM,CAAC,IAAO,GAAMA,EAAI,EAAK,EAAM,IACrDW,EAAY,KAAK,OAAO,aAAaJ,CAAI,CAAC,CAC7C,CAED,OAAOI,EAAY,KAAK,EAAE,CAC7B,EAeD,MAAO,SAAUC,EAAW,CAMxB,QAJIC,EAAkBD,EAAU,OAG5BrB,EAAQ,CAAA,EACHS,EAAI,EAAGA,EAAIa,EAAiBb,IACjCT,EAAMS,IAAM,CAAC,IAAMY,EAAU,WAAWZ,CAAC,EAAI,MAAU,GAAMA,EAAI,EAAK,EAG1E,OAAO,IAAIV,EAAU,KAAKC,EAAOsB,CAAe,CACnD,CACV,EAKSC,EAAOT,EAAM,KAAO,CAcpB,UAAW,SAAUV,EAAW,CAC5B,GAAI,CACA,OAAO,mBAAmB,OAAOe,EAAO,UAAUf,CAAS,CAAC,CAAC,CAChE,MAAW,CACR,MAAM,IAAI,MAAM,sBAAsB,CACzC,CACJ,EAeD,MAAO,SAAUoB,EAAS,CACtB,OAAOL,EAAO,MAAM,SAAS,mBAAmBK,CAAO,CAAC,CAAC,CAC5D,CACV,EASSC,EAAyBhC,EAAM,uBAAyBC,EAAK,OAAO,CAQpE,MAAO,UAAY,CAEf,KAAK,MAAQ,IAAIK,EAAU,KAC3B,KAAK,YAAc,CACtB,EAYD,QAAS,SAAU/O,EAAM,CAEjB,OAAOA,GAAQ,WACfA,EAAOuQ,EAAK,MAAMvQ,CAAI,GAI1B,KAAK,MAAM,OAAOA,CAAI,EACtB,KAAK,aAAeA,EAAK,QAC5B,EAgBD,SAAU,SAAU0Q,EAAS,CACzB,IAAIC,EAGA3Q,EAAO,KAAK,MACZ4Q,EAAY5Q,EAAK,MACjB6Q,EAAe7Q,EAAK,SACpB8Q,EAAY,KAAK,UACjBC,EAAiBD,EAAY,EAG7BE,EAAeH,EAAeE,EAC9BL,EAEAM,EAAejD,EAAK,KAAKiD,CAAY,EAIrCA,EAAejD,EAAK,KAAKiD,EAAe,GAAK,KAAK,eAAgB,CAAC,EAIvE,IAAIC,EAAcD,EAAeF,EAG7BI,EAAcnD,EAAK,IAAIkD,EAAc,EAAGJ,CAAY,EAGxD,GAAII,EAAa,CACb,QAAS5U,EAAS,EAAGA,EAAS4U,EAAa5U,GAAUyU,EAEjD,KAAK,gBAAgBF,EAAWvU,CAAM,EAI1CsU,EAAiBC,EAAU,OAAO,EAAGK,CAAW,EAChDjR,EAAK,UAAYkR,CACpB,CAGD,OAAO,IAAInC,EAAU,KAAK4B,EAAgBO,CAAW,CACxD,EAWD,MAAO,UAAY,CACf,IAAItB,EAAQlB,EAAK,MAAM,KAAK,IAAI,EAChC,OAAAkB,EAAM,MAAQ,KAAK,MAAM,MAAK,EAEvBA,CACV,EAED,eAAgB,CACzB,CAAM,EAOYnB,EAAM,OAASgC,EAAuB,OAAO,CAItD,IAAK/B,EAAK,OAAQ,EAWlB,KAAM,SAAUyC,EAAK,CAEjB,KAAK,IAAM,KAAK,IAAI,OAAOA,CAAG,EAG9B,KAAK,MAAK,CACb,EASD,MAAO,UAAY,CAEfV,EAAuB,MAAM,KAAK,IAAI,EAGtC,KAAK,SAAQ,CAChB,EAcD,OAAQ,SAAUW,EAAe,CAE7B,YAAK,QAAQA,CAAa,EAG1B,KAAK,SAAQ,EAGN,IACV,EAgBD,SAAU,SAAUA,EAAe,CAE3BA,GACA,KAAK,QAAQA,CAAa,EAI9B,IAAIC,EAAO,KAAK,cAEhB,OAAOA,CACV,EAED,UAAW,GAeX,cAAe,SAAUC,EAAQ,CAC7B,OAAO,SAAUrF,EAASkF,EAAK,CAC3B,OAAO,IAAIG,EAAO,KAAKH,CAAG,EAAE,SAASlF,CAAO,CAC7D,CACU,EAeD,kBAAmB,SAAUqF,EAAQ,CACjC,OAAO,SAAUrF,EAASnP,EAAK,CAC3B,OAAO,IAAIyU,EAAO,KAAK,KAAKD,EAAQxU,CAAG,EAAE,SAASmP,CAAO,CAC1E,CACU,CACV,CAAM,EAKD,IAAIsF,EAAS/C,EAAE,KAAO,GAEtB,OAAOA,CACZ,EAAG,IAAI,EAGN,OAAOV,CAER,CAAC,8ECtyBC,SAAU5S,EAAM0S,EAAS,CAGzBtS,UAA2BsS,EAAQ5C,EAAiB,CAUtD,GAAE6C,EAAM,SAAUC,EAAU,CAE3B,OAAC,SAAUC,EAAM,CAEb,IAAIS,EAAIV,EACJW,EAAQD,EAAE,IACVO,EAAYN,EAAM,UAClB+C,EAAS/C,EAAM,OACf8C,EAAS/C,EAAE,KAGXiD,EAAI,CAAA,EACJC,EAAI,CAAA,GAGP,UAAY,CACT,SAASC,EAAQnV,EAAG,CAEhB,QADIoV,EAAQ7D,EAAK,KAAKvR,CAAC,EACdqV,EAAS,EAAGA,GAAUD,EAAOC,IAClC,GAAI,EAAErV,EAAIqV,GACN,MAAO,GAIf,MAAO,EACV,CAED,SAASC,EAAkBtV,EAAG,CAC1B,OAASA,GAAKA,EAAI,IAAM,WAAe,CAC1C,CAID,QAFIA,EAAI,EACJuV,EAAS,EACNA,EAAS,IACRJ,EAAQnV,CAAC,IACLuV,EAAS,IACTN,EAAEM,CAAM,EAAID,EAAkB/D,EAAK,IAAIvR,EAAG,EAAI,CAAC,CAAC,GAEpDkV,EAAEK,CAAM,EAAID,EAAkB/D,EAAK,IAAIvR,EAAG,EAAI,CAAC,CAAC,EAEhDuV,KAGJvV,GAEb,KAGK,IAAIwV,EAAI,CAAA,EAKJC,EAASV,EAAO,OAASC,EAAO,OAAO,CACvC,SAAU,UAAY,CAClB,KAAK,MAAQ,IAAIzC,EAAU,KAAK0C,EAAE,MAAM,CAAC,CAAC,CAC7C,EAED,gBAAiB,SAAUS,EAAG7V,EAAQ,CAelC,QAbIoV,EAAI,KAAK,MAAM,MAGfU,EAAIV,EAAE,CAAC,EACPW,EAAIX,EAAE,CAAC,EACPY,EAAIZ,EAAE,CAAC,EACPa,EAAIb,EAAE,CAAC,EACP5G,EAAI4G,EAAE,CAAC,EACPc,EAAId,EAAE,CAAC,EACPe,EAAIf,EAAE,CAAC,EACPgB,EAAIhB,EAAE,CAAC,EAGFhC,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,GAAIA,EAAI,GACJuC,EAAEvC,CAAC,EAAIyC,EAAE7V,EAASoT,CAAC,EAAI,MACpB,CACH,IAAIiD,EAAUV,EAAEvC,EAAI,EAAE,EAClBkD,GAAYD,GAAW,GAAOA,IAAY,IAC9BA,GAAW,GAAOA,IAAY,IAC9BA,IAAY,EAExBE,EAAUZ,EAAEvC,EAAI,CAAC,EACjBoD,GAAYD,GAAW,GAAOA,IAAY,KAC9BA,GAAW,GAAOA,IAAY,IAC9BA,IAAY,GAE5BZ,EAAEvC,CAAC,EAAIkD,EAASX,EAAEvC,EAAI,CAAC,EAAIoD,EAASb,EAAEvC,EAAI,EAAE,CAC/C,CAED,IAAIqD,GAAOjI,EAAI0H,EAAM,CAAC1H,EAAI2H,EACtBO,GAAOZ,EAAIC,EAAMD,EAAIE,EAAMD,EAAIC,EAE/BW,IAAWb,GAAK,GAAOA,IAAM,IAAQA,GAAK,GAAOA,IAAM,KAASA,GAAK,GAAOA,IAAM,IAClFc,IAAWpI,GAAK,GAAOA,IAAM,IAAQA,GAAK,GAAOA,IAAM,KAASA,GAAK,EAAOA,IAAM,IAElFqI,GAAKT,EAAIQ,GAASH,GAAKpB,EAAEjC,CAAC,EAAIuC,EAAEvC,CAAC,EACjC0D,GAAKH,GAASD,GAElBN,EAAID,EACJA,EAAID,EACJA,EAAI1H,EACJA,EAAKyH,EAAIY,GAAM,EACfZ,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKe,GAAKC,GAAM,CACnB,CAGD1B,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIU,EAAK,EACpBV,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIW,EAAK,EACpBX,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIY,EAAK,EACpBZ,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIa,EAAK,EACpBb,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAI5G,EAAK,EACpB4G,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIc,EAAK,EACpBd,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIe,EAAK,EACpBf,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIgB,EAAK,CACvB,EAED,YAAa,UAAY,CAErB,IAAIzS,EAAO,KAAK,MACZ4Q,EAAY5Q,EAAK,MAEjBoT,EAAa,KAAK,YAAc,EAChCC,EAAYrT,EAAK,SAAW,EAGhC,OAAA4Q,EAAUyC,IAAc,CAAC,GAAK,KAAS,GAAKA,EAAY,GACxDzC,GAAayC,EAAY,KAAQ,GAAM,GAAK,EAAE,EAAItF,EAAK,MAAMqF,EAAa,UAAW,EACrFxC,GAAayC,EAAY,KAAQ,GAAM,GAAK,EAAE,EAAID,EAClDpT,EAAK,SAAW4Q,EAAU,OAAS,EAGnC,KAAK,SAAQ,EAGN,KAAK,KACf,EAED,MAAO,UAAY,CACf,IAAIhB,EAAQ4B,EAAO,MAAM,KAAK,IAAI,EAClC,OAAA5B,EAAM,MAAQ,KAAK,MAAM,MAAK,EAEvBA,CACV,CACV,CAAM,EAgBDpB,EAAE,OAASgD,EAAO,cAAcS,CAAM,EAgBtCzD,EAAE,WAAagD,EAAO,kBAAkBS,CAAM,CACjD,EAAC,IAAI,EAGCnE,EAAS,MAEjB,CAAC,8ECtMC,SAAU5S,EAAM0S,EAAS,CAGzBtS,UAA2BsS,EAAQ5C,EAAiB,CAUtD,GAAE6C,EAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,IAAIU,EAAIV,EACJW,EAAQD,EAAE,IACVO,EAAYN,EAAM,UAClBqB,EAAQtB,EAAE,IAKDsB,EAAM,OAAS,CAcxB,UAAW,SAAUV,EAAW,CAE5B,IAAIJ,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SACrBlS,EAAM,KAAK,KAGfkS,EAAU,MAAK,EAIf,QADIkE,EAAc,CAAA,EACT7D,EAAI,EAAGA,EAAIR,EAAUQ,GAAK,EAO/B,QANI8D,EAASvE,EAAMS,IAAM,CAAC,IAAa,GAAMA,EAAI,EAAK,EAAY,IAC9D+D,EAASxE,EAAOS,EAAI,IAAO,CAAC,IAAO,IAAOA,EAAI,GAAK,EAAK,EAAM,IAC9DgE,EAASzE,EAAOS,EAAI,IAAO,CAAC,IAAO,IAAOA,EAAI,GAAK,EAAK,EAAM,IAE9DiE,EAAWH,GAAS,GAAOC,GAAS,EAAKC,EAEpC9D,EAAI,EAAIA,EAAI,GAAOF,EAAIE,EAAI,IAAOV,EAAWU,IAClD2D,EAAY,KAAKpW,EAAI,OAAQwW,IAAa,GAAK,EAAI/D,GAAO,EAAI,CAAC,EAKvE,IAAIgE,EAAczW,EAAI,OAAO,EAAE,EAC/B,GAAIyW,EACA,KAAOL,EAAY,OAAS,GACxBA,EAAY,KAAKK,CAAW,EAIpC,OAAOL,EAAY,KAAK,EAAE,CAC7B,EAeD,MAAO,SAAUM,EAAW,CAExB,IAAIC,EAAkBD,EAAU,OAC5B1W,EAAM,KAAK,KACX4W,EAAa,KAAK,YAEtB,GAAI,CAACA,EAAY,CACTA,EAAa,KAAK,YAAc,GAChC,QAASnE,EAAI,EAAGA,EAAIzS,EAAI,OAAQyS,IAC5BmE,EAAW5W,EAAI,WAAWyS,CAAC,CAAC,EAAIA,CAE3C,CAGD,IAAIgE,EAAczW,EAAI,OAAO,EAAE,EAC/B,GAAIyW,EAAa,CACb,IAAII,EAAeH,EAAU,QAAQD,CAAW,EAC5CI,IAAiB,KACjBF,EAAkBE,EAEzB,CAGD,OAAOC,EAAUJ,EAAWC,EAAiBC,CAAU,CAE1D,EAED,KAAM,mEACR,EAEF,SAASE,EAAUJ,EAAWC,EAAiBC,EAAY,CAGzD,QAFI9E,EAAQ,CAAA,EACRa,EAAS,EACJJ,EAAI,EAAGA,EAAIoE,EAAiBpE,IACjC,GAAIA,EAAI,EAAG,CACP,IAAIwE,EAAQH,EAAWF,EAAU,WAAWnE,EAAI,CAAC,CAAC,GAAOA,EAAI,EAAK,EAC9DyE,EAAQJ,EAAWF,EAAU,WAAWnE,CAAC,CAAC,IAAO,EAAKA,EAAI,EAAK,EAC/D0E,EAAeF,EAAQC,EAC3BlF,EAAMa,IAAW,CAAC,GAAKsE,GAAiB,GAAMtE,EAAS,EAAK,EAC5DA,GACH,CAEL,OAAOd,EAAU,OAAOC,EAAOa,CAAM,CACtC,CACN,IAGQ/B,EAAS,IAAI,MAErB,CAAC,8ECvIC,SAAU5S,EAAM0S,EAAS,CAGzBtS,UAA2BsS,EAAQ5C,EAAiB,CAUtD,GAAE6C,EAAM,SAAUC,EAAU,CAE3B,OAAOA,EAAS,IAAI,IAErB,CAAC,0CCjBD,SAASjD,GAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,CAACA,GAAE,UAAU,IAAI,MAAMA,GAAE,UAAU,KAAK,wBAAwB,IAAIuJ,GAAe,OAAO,OAApB,KAA4B,OAAO,MAAM,OAAO,KAAK,KAAK,MAAM,GAAG,SAASA,EAAE,CAAC,IAAI,EAAE,OAAOA,CAAC,EAAE,QAAQ,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,MAAM,IAAIvJ,GAAE,mEAAmE,EAAE,QAAQrO,EAAE6X,EAAElC,EAAE,EAAE1C,EAAE,EAAE,EAAE,GAAG4E,EAAE,EAAE,OAAO5E,GAAG,EAAE,CAAC4E,IAAI7X,EAAE2V,EAAE,EAAE,GAAG3V,EAAE6X,EAAEA,EAAElC,IAAI,GAAG,GAAG,OAAO,aAAa,IAAI3V,IAAI,GAAG2V,EAAE,EAAE,EAAE,EAAEkC,EAAE,oEAAoE,QAAQA,CAAC,EAAE,OAAO,CAAC,EAAE,SAASC,GAAE,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,GAAG,EAAE,OAAO,EAAE,OAAO,EAAG,CAAA,IAAK,GAAE,MAAM,IAAK,GAAE,GAAG,KAAK,MAAM,IAAK,GAAE,GAAG,IAAI,MAAM,QAAQ,KAAK,2BAA2B,CAAC,GAAG,CAAC,OAAO,SAASzJ,EAAE,CAAC,OAAO,mBAAmBuJ,GAAEvJ,CAAC,EAAE,QAAQ,OAAQ,SAASA,EAAEuJ,EAAE,CAAC,IAAIE,EAAEF,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAW,EAAG,OAAOE,EAAE,OAAO,IAAIA,EAAE,IAAIA,GAAG,IAAIA,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,MAAS,CAAC,OAAOF,GAAE,CAAC,CAAC,CAAC,CAAC,SAAS5X,GAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,SAAS6X,GAAE,EAAED,EAAE,CAAC,GAAa,OAAO,GAAjB,SAAmB,MAAM,IAAI5X,GAAE,yBAAyB,EAAE,IAAI6X,GAAQD,EAAEA,GAAG,CAAE,GAAE,SAAf,GAAsB,EAAE,EAAE,GAAG,CAAC,OAAO,KAAK,MAAME,GAAE,EAAE,MAAM,GAAG,EAAED,CAAC,CAAC,CAAC,CAAC,OAAOxJ,EAAE,CAAC,MAAM,IAAIrO,GAAE,4BAA4BqO,EAAE,OAAO,CAAC,CAAC,CAACrO,GAAE,UAAU,IAAI,MAAMA,GAAE,UAAU,KAAK,oBCOxoC,IAAI+X,GAAY,CACd,MAAO,IAAM,GACb,KAAM,IAAM,GACZ,KAAM,IAAM,GACZ,MAAO,IAAM,EACf,EACIvI,EACAzE,EACAiN,IAAwBC,IAC1BA,EAAKA,EAAK,KAAU,CAAC,EAAI,OACzBA,EAAKA,EAAK,MAAW,CAAC,EAAI,QAC1BA,EAAKA,EAAK,KAAU,CAAC,EAAI,OACzBA,EAAKA,EAAK,KAAU,CAAC,EAAI,OACzBA,EAAKA,EAAK,MAAW,CAAC,EAAI,QACnBA,IACND,IAAO,CAAA,CAAE,GACVC,GAAS,CACT,SAASC,GAAQ,CACf1I,EAAQ,EACRzE,EAASgN,EACV,CACDE,EAAK,MAAQC,EACb,SAASC,EAASzY,EAAO,CACvB,GAAI,EAAE,GAAgBA,GAASA,GAAS,GACtC,MAAM,IAAI,MAAM,mBAAmB,EAErC8P,EAAQ9P,CACT,CACDuY,EAAK,SAAWE,EAChB,SAASC,EAAU1Y,EAAO,CACxBqL,EAASrL,CACV,CACDuY,EAAK,UAAYG,CACnB,GAAGJ,KAAQA,GAAM,CAAE,EAAC,EACpB,IAAIK,EAAS,KAAM,CACjB,YAAYC,EAAO,CACjB,KAAK,MAAQA,CACd,CACD,SAASC,EAAM,CACT/I,GAAS,GACXzE,EAAO,MAAMsN,EAAO,QAAQ,KAAK,MAAO,KAAK,OAAO,EAAG,GAAGE,CAAI,CAEjE,CACD,QAAQA,EAAM,CACR/I,GAAS,GACXzE,EAAO,KAAKsN,EAAO,QAAQ,KAAK,MAAO,KAAK,OAAO,EAAG,GAAGE,CAAI,CAEhE,CACD,QAAQA,EAAM,CACR/I,GAAS,GACXzE,EAAO,KAAKsN,EAAO,QAAQ,KAAK,MAAO,KAAK,OAAO,EAAG,GAAGE,CAAI,CAEhE,CACD,SAASA,EAAM,CACT/I,GAAS,GACXzE,EAAO,MAAMsN,EAAO,QAAQ,KAAK,MAAO,KAAK,OAAO,EAAG,GAAGE,CAAI,CAEjE,CACD,MAAMxM,EAAK,CACT,WAAK,MAAMA,CAAG,EACRA,CACP,CACD,OAAOyM,EAAQ,CACb,MAAMC,EAAe,OAAO,OAAO,IAAI,EACvC,OAAAA,EAAa,QAAUD,EACvBC,EAAa,MAAM,OAAO,EACnBA,CACR,CACD,OAAO,aAAa/L,EAAMgM,EAAc,CACtC,MAAMC,EAAe,IAAIN,EAAO,GAAG3L,CAAI,IAAIgM,CAAY,EAAE,EACzD,OAAAC,EAAa,MAAM,OAAO,EACnBA,CACR,CACD,OAAO,QAAQjM,EAAM8L,EAAQ,CAC3B,MAAMI,EAAS,IAAIlM,CAAI,IACvB,OAAO8L,EAAS,GAAGI,CAAM,IAAIJ,CAAM,IAAMI,CAC1C,CAED,OAAO,MAAMlM,KAAS6L,EAAM,CACtB/I,GAAS,GACXzE,EAAO,MAAMsN,EAAO,QAAQ3L,CAAI,EAAG,GAAG6L,CAAI,CAE7C,CACD,OAAO,KAAK7L,KAAS6L,EAAM,CACrB/I,GAAS,GACXzE,EAAO,KAAKsN,EAAO,QAAQ3L,CAAI,EAAG,GAAG6L,CAAI,CAE5C,CACD,OAAO,KAAK7L,KAAS6L,EAAM,CACrB/I,GAAS,GACXzE,EAAO,KAAKsN,EAAO,QAAQ3L,CAAI,EAAG,GAAG6L,CAAI,CAE5C,CACD,OAAO,MAAM7L,KAAS6L,EAAM,CACtB/I,GAAS,GACXzE,EAAO,MAAMsN,EAAO,QAAQ3L,CAAI,EAAG,GAAG6L,CAAI,CAE7C,CACH,EACAP,GAAI,MAAK,EAGT,IAAIa,GAAmB,uCACnBC,EAAc,KAAM,CACtB,OAAO,aAAc,CACnB,OAAOxH,GAAS,IAAI,UAAU,OAAO,CAAC,EAAE,MAAM,CAAC,CAChD,CAID,OAAO,gBAAiB,CAKtB,OAJauH,GAAiB,QAC5B,SACChD,IAAO,CAACA,EAAIiD,EAAY,YAAW,EAAK,IAAM,CAACjD,EAAI,GAAG,SAAS,EAAE,CACxE,EACgB,QAAQ,KAAM,EAAE,CAC7B,CAID,OAAO,sBAAuB,CAC5B,OAAOiD,EAAY,iBAAmBA,EAAY,iBAAmBA,EAAY,gBAClF,CAID,OAAO,sBAAsBC,EAAe,CAC1C,GAAI,CACF,MAAMC,EAASC,GAAOF,CAAa,EACnC,OAAOG,GAAO,UAAUF,CAAM,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,CAC1F,OAAQjN,EAAK,CACZ,MAAAsM,EAAO,MAAM,oCAAqCtM,CAAG,EAC/CA,CACP,CACF,CAID,OAAO,kBAAkBoN,EAAWC,EAAe,CACjD,MAAMC,EAAYtF,GAAK,MAAM,CAACoF,EAAWC,CAAa,EAAE,KAAK,GAAG,CAAC,EACjE,OAAOF,GAAO,UAAUG,CAAS,CAClC,CACH,EAGIC,GAAQ,KAAM,CAChB,YAAYhB,EAAO,CACjB,KAAK,MAAQA,EACb,KAAK,QAAU,IAAID,EAAO,UAAU,KAAK,KAAK,IAAI,EAClD,KAAK,WAAa,EACnB,CACD,WAAWrL,EAAI,CACb,YAAK,WAAW,KAAKA,CAAE,EAChB,IAAM,KAAK,cAAcA,CAAE,CACnC,CACD,cAAcA,EAAI,CAChB,MAAMuM,EAAM,KAAK,WAAW,YAAYvM,CAAE,EACtCuM,GAAO,GACT,KAAK,WAAW,OAAOA,EAAK,CAAC,CAEhC,CACD,SAASC,EAAI,CACX,KAAK,QAAQ,MAAM,SAAU,GAAGA,CAAE,EAClC,UAAWxM,KAAM,KAAK,WACfA,EAAG,GAAGwM,CAAE,CAEhB,CACH,EAIIC,GAAW,KAAM,CAEnB,OAAO,OAAOnK,EAAO,CACnB,GAAI,CACF,OAAOoK,GAAWpK,CAAK,CACxB,OAAQvD,EAAK,CACZ,MAAAsM,EAAO,MAAM,kBAAmBtM,CAAG,EAC7BA,CACP,CACF,CACH,EAGI4N,GAAa,KAAM,CAMrB,OAAO,OAAO,CAAE,GAAGC,GAAY,CAC7B,IAAIC,EAAIC,EAAIC,EACZ,OAAIH,EAAS,OAAS,OACpBA,EAAS,OAASC,EAAK,CAAC,IAAK,IAAK,IAAK,GAAG,EAAE,KAAMG,GAAUA,GAAS,OAAO,WAAa,KAAK,IAAM,KAAOH,EAAK,MACjHC,EAAKF,EAAS,OAAS,OAAYA,EAAS,KAAO,KAAK,IAAI,EAAG,KAAK,MAAM,OAAO,SAAW,OAAO,WAAaA,EAAS,OAAS,CAAC,CAAC,GACjIA,EAAS,QAAU,QACpBG,EAAKH,EAAS,MAAQ,OAAYA,EAAS,IAAM,KAAK,IAAI,EAAG,KAAK,MAAM,OAAO,SAAW,OAAO,YAAcA,EAAS,QAAU,CAAC,CAAC,IAChIA,CACR,CACD,OAAO,UAAUA,EAAU,CACzB,OAAO,OAAO,QAAQA,CAAQ,EAAE,OAAO,CAAC,CAAA,CAAGla,CAAK,IAAMA,GAAS,IAAI,EAAE,IAAI,CAAC,CAACY,EAAKZ,CAAK,IAAM,GAAGY,CAAG,IAAI,OAAOZ,GAAU,UAAYA,EAAQA,EAAQ,MAAQ,IAAI,EAAE,EAAE,KAAK,GAAG,CAC3K,CACH,EAGIua,EAAQ,cAAcX,EAAM,CAC9B,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,QAAU,IAAIjB,EAAO,UAAU,KAAK,KAAK,IAAI,EAClD,KAAK,aAAe,KACpB,KAAK,YAAc,EACnB,KAAK,UAAY,IAAM,CACrB,MAAM6B,EAAO,KAAK,YAAcD,EAAM,aAAY,EAClD,KAAK,QAAQ,MAAM,qBAAsBC,CAAI,EACzC,KAAK,aAAeD,EAAM,aAAY,IACxC,KAAK,OAAM,EACX,MAAM,MAAK,EAEnB,CACG,CAED,OAAO,cAAe,CACpB,OAAO,KAAK,MAAM,KAAK,IAAK,EAAG,GAAG,CACnC,CACD,KAAKE,EAAmB,CACtB,MAAMC,EAAU,KAAK,QAAQ,OAAO,MAAM,EAC1CD,EAAoB,KAAK,IAAI,KAAK,MAAMA,CAAiB,EAAG,CAAC,EAC7D,MAAME,EAAaJ,EAAM,aAAY,EAAKE,EAC1C,GAAI,KAAK,aAAeE,GAAc,KAAK,aAAc,CACvDD,EAAQ,MAAM,uDAAwD,KAAK,UAAU,EACrF,MACD,CACD,KAAK,OAAM,EACXA,EAAQ,MAAM,iBAAkBD,CAAiB,EACjD,KAAK,YAAcE,EACnB,MAAMC,EAAyB,KAAK,IAAIH,EAAmB,CAAC,EAC5D,KAAK,aAAe,YAAY,KAAK,UAAWG,EAAyB,GAAG,CAC7E,CACD,IAAI,YAAa,CACf,OAAO,KAAK,WACb,CACD,QAAS,CACP,KAAK,QAAQ,OAAO,QAAQ,EACxB,KAAK,eACP,cAAc,KAAK,YAAY,EAC/B,KAAK,aAAe,KAEvB,CACH,EAGIC,GAAW,KAAM,CACnB,OAAO,WAAWpL,EAAKqL,EAAe,QAAS,CAC7C,GAAI,CAACrL,EACH,MAAM,IAAI,UAAU,aAAa,EAEnC,MAAM7C,EADY,IAAI,IAAI6C,EAAK,kBAAkB,EACxBqL,IAAiB,WAAa,OAAS,QAAQ,EACxE,OAAO,IAAI,gBAAgBlO,EAAO,MAAM,CAAC,CAAC,CAC3C,CACH,EAGImO,GAAgB,cAAc,KAAM,CACtC,YAAYlC,EAAMmC,EAAM,CACtB,IAAIb,EAAIC,EAAIC,EAKZ,GAJA,MAAMxB,EAAK,mBAAqBA,EAAK,OAAS,EAAE,EAChD,KAAK,KAAOmC,EAEZ,KAAK,KAAO,gBACR,CAACnC,EAAK,MACR,MAAAF,EAAO,MAAM,gBAAiB,iBAAiB,EACzC,IAAI,MAAM,iBAAiB,EAEnC,KAAK,MAAQE,EAAK,MAClB,KAAK,mBAAqBsB,EAAKtB,EAAK,oBAAsB,KAAOsB,EAAK,KACtE,KAAK,WAAaC,EAAKvB,EAAK,YAAc,KAAOuB,EAAK,KACtD,KAAK,MAAQvB,EAAK,UAClB,KAAK,eAAiBwB,EAAKxB,EAAK,gBAAkB,KAAOwB,EAAK,IAC/D,CACH,EAGIY,GAAe,cAAc,KAAM,CACrC,YAAYlL,EAAS,CACnB,MAAMA,CAAO,EAEb,KAAK,KAAO,cACb,CACH,EAGImL,GAAoB,KAAM,CAC5B,YAAYrC,EAAM,CAChB,KAAK,QAAU,IAAIF,EAAO,mBAAmB,EAC7C,KAAK,eAAiB,IAAI4B,EAAM,uBAAuB,EACvD,KAAK,cAAgB,IAAIA,EAAM,sBAAsB,EACrD,KAAK,mCAAqC1B,EAAK,iCAChD,CACD,KAAKsC,EAAW,CACd,MAAMT,EAAU,KAAK,QAAQ,OAAO,MAAM,EAC1C,GAAIS,EAAU,cAAgBA,EAAU,aAAe,OAAQ,CAC7D,MAAMC,EAAWD,EAAU,WAE3B,GADAT,EAAQ,MAAM,4CAA6CU,CAAQ,EAC/DA,EAAW,EAAG,CAChB,IAAIC,EAAWD,EAAW,KAAK,mCAC3BC,GAAY,IACdA,EAAW,GAEbX,EAAQ,MAAM,yCAA0CW,EAAU,SAAS,EAC3E,KAAK,eAAe,KAAKA,CAAQ,CACzC,MACQX,EAAQ,MAAM,kEAAkE,EAChF,KAAK,eAAe,SAEtB,MAAMY,EAAUF,EAAW,EAC3BV,EAAQ,MAAM,wCAAyCY,EAAS,SAAS,EACzE,KAAK,cAAc,KAAKA,CAAO,CACrC,MACM,KAAK,eAAe,SACpB,KAAK,cAAc,QAEtB,CACD,QAAS,CACP,KAAK,QAAQ,MAAM,gDAAgD,EACnE,KAAK,eAAe,SACpB,KAAK,cAAc,QACpB,CAID,uBAAuBhO,EAAI,CACzB,OAAO,KAAK,eAAe,WAAWA,CAAE,CACzC,CAID,0BAA0BA,EAAI,CAC5B,KAAK,eAAe,cAAcA,CAAE,CACrC,CAID,sBAAsBA,EAAI,CACxB,OAAO,KAAK,cAAc,WAAWA,CAAE,CACxC,CAID,yBAAyBA,EAAI,CAC3B,KAAK,cAAc,cAAcA,CAAE,CACpC,CACH,EAGIiO,GAAqB,KAAM,CAC7B,YAAYC,EAAWC,EAAYhM,EAAKiM,EAAoBC,EAAc,CACxE,KAAK,UAAYH,EACjB,KAAK,WAAaC,EAClB,KAAK,mBAAqBC,EAC1B,KAAK,aAAeC,EACpB,KAAK,QAAU,IAAIhD,EAAO,oBAAoB,EAC9C,KAAK,OAAS,KACd,KAAK,eAAiB,KACtB,KAAK,SAAYhK,GAAM,CACjBA,EAAE,SAAW,KAAK,eAAiBA,EAAE,SAAW,KAAK,OAAO,gBAC1DA,EAAE,OAAS,SACb,KAAK,QAAQ,MAAM,4CAA4C,EAC3D,KAAK,cACP,KAAK,KAAI,GAEFA,EAAE,OAAS,WACpB,KAAK,QAAQ,MAAM,8CAA8C,EACjE,KAAK,KAAI,EACJ,KAAK,aAEV,KAAK,QAAQ,MAAMA,EAAE,KAAO,uCAAuC,EAG7E,EACI,MAAMiN,EAAY,IAAI,IAAInM,CAAG,EAC7B,KAAK,cAAgBmM,EAAU,OAC/B,KAAK,OAAS,OAAO,SAAS,cAAc,QAAQ,EACpD,KAAK,OAAO,MAAM,WAAa,SAC/B,KAAK,OAAO,MAAM,SAAW,QAC7B,KAAK,OAAO,MAAM,KAAO,UACzB,KAAK,OAAO,MAAM,IAAM,IACxB,KAAK,OAAO,MAAQ,IACpB,KAAK,OAAO,OAAS,IACrB,KAAK,OAAO,IAAMA,EAAU,IAC7B,CACD,MAAO,CACL,OAAO,IAAI,QAASlO,GAAY,CAC9B,KAAK,OAAO,OAAS,IAAM,CACzBA,GACR,EACM,OAAO,SAAS,KAAK,YAAY,KAAK,MAAM,EAC5C,OAAO,iBAAiB,UAAW,KAAK,SAAU,EAAK,CAC7D,CAAK,CACF,CACD,MAAMmO,EAAe,CACnB,GAAI,KAAK,iBAAmBA,EAC1B,OAEF,KAAK,QAAQ,OAAO,OAAO,EAC3B,KAAK,KAAI,EACT,KAAK,eAAiBA,EACtB,MAAMC,EAAO,IAAM,CACb,CAAC,KAAK,OAAO,eAAiB,CAAC,KAAK,gBAGxC,KAAK,OAAO,cAAc,YAAY,KAAK,WAAa,IAAM,KAAK,eAAgB,KAAK,aAAa,CAC3G,EACIA,IACA,KAAK,OAAS,YAAYA,EAAM,KAAK,mBAAqB,GAAG,CAC9D,CACD,MAAO,CACL,KAAK,QAAQ,OAAO,MAAM,EAC1B,KAAK,eAAiB,KAClB,KAAK,SACP,cAAc,KAAK,MAAM,EACzB,KAAK,OAAS,KAEjB,CACH,EAGIC,GAAqB,KAAM,CAC7B,aAAc,CACZ,KAAK,QAAU,IAAIpD,EAAO,oBAAoB,EAC9C,KAAK,MAAQ,EACd,CACD,OAAQ,CACN,KAAK,QAAQ,OAAO,OAAO,EAC3B,KAAK,MAAQ,EACd,CACD,QAAQ/X,EAAK,CACX,YAAK,QAAQ,OAAO,YAAYA,CAAG,IAAI,EAChC,KAAK,MAAMA,CAAG,CACtB,CACD,QAAQA,EAAKZ,EAAO,CAClB,KAAK,QAAQ,OAAO,YAAYY,CAAG,IAAI,EACvC,KAAK,MAAMA,CAAG,EAAIZ,CACnB,CACD,WAAWY,EAAK,CACd,KAAK,QAAQ,OAAO,eAAeA,CAAG,IAAI,EAC1C,OAAO,KAAK,MAAMA,CAAG,CACtB,CACD,IAAI,QAAS,CACX,OAAO,OAAO,oBAAoB,KAAK,KAAK,EAAE,MAC/C,CACD,IAAIhB,EAAO,CACT,OAAO,OAAO,oBAAoB,KAAK,KAAK,EAAEA,CAAK,CACpD,CACH,EAGIoc,GAAc,KAAM,CACtB,YAAYC,EAAyB,CAAE,EAAEC,EAAc,KAAMC,EAAgB,GAAI,CAC/E,KAAK,YAAcD,EACnB,KAAK,cAAgBC,EACrB,KAAK,QAAU,IAAIxD,EAAO,aAAa,EACvC,KAAK,cAAgB,GACrB,KAAK,cAAc,KAAK,GAAGsD,EAAwB,kBAAkB,EACjEC,GACF,KAAK,cAAc,KAAK,iBAAiB,CAE5C,CACD,MAAM,iBAAiB3M,EAAOC,EAAO,GAAI,CACvC,KAAM,CAAE,iBAAA4M,EAAkB,GAAGC,CAAS,EAAK7M,EAC3C,GAAI,CAAC4M,EACH,OAAO,MAAM,MAAM7M,EAAO8M,CAAS,EAErC,MAAMC,EAAa,IAAI,gBACjBC,EAAY,WAAW,IAAMD,EAAW,QAASF,EAAmB,GAAG,EAC7E,GAAI,CAKF,OAJiB,MAAM,MAAM7M,EAAO,CAClC,GAAGC,EACH,OAAQ8M,EAAW,MAC3B,CAAO,CAEF,OAAQjQ,EAAK,CACZ,MAAIA,aAAe,cAAgBA,EAAI,OAAS,aACxC,IAAI4O,GAAa,mBAAmB,EAEtC5O,CACZ,QAAc,CACR,aAAakQ,CAAS,CACvB,CACF,CACD,MAAM,QAAQ9M,EAAK,CACjB,MAAAG,EACA,YAAA4M,CACD,EAAG,GAAI,CACN,MAAM9B,EAAU,KAAK,QAAQ,OAAO,SAAS,EACvC+B,EAAU,CACd,OAAU,KAAK,cAAc,KAAK,IAAI,CAC5C,EACQ7M,IACF8K,EAAQ,MAAM,4CAA4C,EAC1D+B,EAAQ,cAAmB,UAAY7M,GAEzC,KAAK,mBAAmB6M,CAAO,EAC/B,IAAI9M,EACJ,GAAI,CACF+K,EAAQ,MAAM,OAAQjL,CAAG,EACzBE,EAAW,MAAM,KAAK,iBAAiBF,EAAK,CAAE,OAAQ,MAAO,QAAAgN,EAAS,YAAAD,CAAW,CAAE,CACpF,OAAQnQ,EAAK,CACZ,MAAAqO,EAAQ,MAAM,eAAe,EACvBrO,CACP,CACDqO,EAAQ,MAAM,iCAAkC/K,EAAS,MAAM,EAC/D,MAAM+M,EAAc/M,EAAS,QAAQ,IAAI,cAAc,EAIvD,GAHI+M,GAAe,CAAC,KAAK,cAAc,KAAMC,GAASD,EAAY,WAAWC,CAAI,CAAC,GAChFjC,EAAQ,MAAM,IAAI,MAAM,kCAAkCgC,GAAoC,WAAW,eAAejN,CAAG,EAAE,CAAC,EAE5HE,EAAS,IAAM,KAAK,cAAgB+M,GAAe,MAAgBA,EAAY,WAAW,iBAAiB,GAC7G,OAAO,MAAM,KAAK,YAAY,MAAM/M,EAAS,KAAM,CAAA,EAErD,IAAIiN,EACJ,GAAI,CACFA,EAAO,MAAMjN,EAAS,MACvB,OAAQtD,EAAK,CAEZ,MADAqO,EAAQ,MAAM,8BAA+BrO,CAAG,EAC5CsD,EAAS,GACLtD,EACF,IAAI,MAAM,GAAGsD,EAAS,UAAU,KAAKA,EAAS,MAAM,GAAG,CAC9D,CACD,GAAI,CAACA,EAAS,GAEZ,MADA+K,EAAQ,MAAM,qBAAsBkC,CAAI,EACpCA,EAAK,MACD,IAAI7B,GAAc6B,CAAI,EAExB,IAAI,MAAM,GAAGjN,EAAS,UAAU,KAAKA,EAAS,MAAM,MAAM,KAAK,UAAUiN,CAAI,CAAC,EAAE,EAExF,OAAOA,CACR,CACD,MAAM,SAASnN,EAAK,CAClB,KAAAoN,EACA,UAAAlD,EACA,iBAAAyC,EACA,gBAAAU,CACJ,EAAK,CACD,MAAMpC,EAAU,KAAK,QAAQ,OAAO,UAAU,EACxC+B,EAAU,CACd,OAAU,KAAK,cAAc,KAAK,IAAI,EACtC,eAAgB,mCACtB,EACQ9C,IAAc,SAChB8C,EAAQ,cAAmB,SAAW9C,GAExC,KAAK,mBAAmB8C,CAAO,EAC/B,IAAI9M,EACJ,GAAI,CACF+K,EAAQ,MAAM,OAAQjL,CAAG,EACzBE,EAAW,MAAM,KAAK,iBAAiBF,EAAK,CAAE,OAAQ,OAAQ,QAAAgN,EAAS,KAAAI,EAAM,iBAAAT,EAAkB,YAAaU,CAAiB,CAAA,CAC9H,OAAQzQ,EAAK,CACZ,MAAAqO,EAAQ,MAAM,eAAe,EACvBrO,CACP,CACDqO,EAAQ,MAAM,iCAAkC/K,EAAS,MAAM,EAC/D,MAAM+M,EAAc/M,EAAS,QAAQ,IAAI,cAAc,EACvD,GAAI+M,GAAe,CAAC,KAAK,cAAc,KAAMC,GAASD,EAAY,WAAWC,CAAI,CAAC,EAChF,MAAM,IAAI,MAAM,kCAAkCD,GAAoC,WAAW,eAAejN,CAAG,EAAE,EAEvH,MAAMsN,EAAe,MAAMpN,EAAS,OACpC,IAAIiN,EAAO,CAAA,EACX,GAAIG,EACF,GAAI,CACFH,EAAO,KAAK,MAAMG,CAAY,CAC/B,OAAQ1Q,EAAK,CAEZ,MADAqO,EAAQ,MAAM,8BAA+BrO,CAAG,EAC5CsD,EAAS,GACLtD,EACF,IAAI,MAAM,GAAGsD,EAAS,UAAU,KAAKA,EAAS,MAAM,GAAG,CAC9D,CAEH,GAAI,CAACA,EAAS,GAEZ,MADA+K,EAAQ,MAAM,qBAAsBkC,CAAI,EACpCA,EAAK,MACD,IAAI7B,GAAc6B,EAAMC,CAAI,EAE9B,IAAI,MAAM,GAAGlN,EAAS,UAAU,KAAKA,EAAS,MAAM,MAAM,KAAK,UAAUiN,CAAI,CAAC,EAAE,EAExF,OAAOA,CACR,CACD,mBAAmBH,EAAS,CAC1B,MAAM/B,EAAU,KAAK,QAAQ,OAAO,oBAAoB,EAClDsC,EAAa,OAAO,KAAK,KAAK,aAAa,EAC3CC,EAAmB,CACvB,gBACA,SACA,cACN,EACQD,EAAW,SAAW,GAG1BA,EAAW,QAASE,GAAe,CACjC,GAAID,EAAiB,SAASC,EAAW,kBAAmB,CAAA,EAAG,CAC7DxC,EAAQ,KAAK,2CAA4CwC,EAAYD,CAAgB,EACrF,MACD,CACD,MAAME,EAAU,OAAO,KAAK,cAAcD,CAAU,GAAM,WAAa,KAAK,cAAcA,CAAU,EAAG,EAAG,KAAK,cAAcA,CAAU,EACnIC,GAAWA,IAAY,KACzBV,EAAQS,CAAU,EAAIC,EAE9B,CAAK,CACF,CACH,EAGIC,GAAkB,KAAM,CAC1B,YAAYC,EAAW,CACrB,KAAK,UAAYA,EACjB,KAAK,QAAU,IAAI1E,EAAO,iBAAiB,EAC3C,KAAK,aAAe,KACpB,KAAK,UAAY,KACjB,KAAK,aAAe,KAAK,UAAU,YACnC,KAAK,aAAe,IAAIqD,GACtB,CAAC,0BAA0B,EAC3B,KACA,KAAK,UAAU,YACrB,EACQ,KAAK,UAAU,cACjB,KAAK,QAAQ,MAAM,iCAAiC,EACpD,KAAK,aAAe,KAAK,UAAU,aAEjC,KAAK,UAAU,WACjB,KAAK,QAAQ,MAAM,8BAA8B,EACjD,KAAK,UAAY,KAAK,UAAU,UAE9B,KAAK,UAAU,0BACjB,KAAK,QAAQ,MAAM,6CAA6C,EAChE,KAAK,yBAA2B,KAAK,UAAU,wBAElD,CACD,kBAAmB,CACjB,KAAK,aAAe,IACrB,CACD,MAAM,aAAc,CAClB,MAAMtB,EAAU,KAAK,QAAQ,OAAO,aAAa,EACjD,GAAI,KAAK,UACP,OAAAA,EAAQ,MAAM,qBAAqB,EAC5B,KAAK,UAEd,GAAI,CAAC,KAAK,aACR,MAAAA,EAAQ,MAAM,IAAI,MAAM,oDAAoD,CAAC,EACvE,KAERA,EAAQ,MAAM,wBAAyB,KAAK,YAAY,EACxD,MAAM4C,EAAW,MAAM,KAAK,aAAa,QAAQ,KAAK,aAAc,CAAE,YAAa,KAAK,wBAA0B,CAAA,EAClH,OAAA5C,EAAQ,MAAM,wCAAwC,EACtD,KAAK,UAAY,OAAO,OAAO,CAAA,EAAI,KAAK,UAAU,aAAc4C,CAAQ,EACjE,KAAK,SACb,CACD,WAAY,CACV,OAAO,KAAK,qBAAqB,QAAQ,CAC1C,CACD,0BAA2B,CACzB,OAAO,KAAK,qBAAqB,wBAAwB,CAC1D,CACD,qBAAsB,CACpB,OAAO,KAAK,qBAAqB,mBAAmB,CACrD,CACD,iBAAiBC,EAAW,GAAM,CAChC,OAAO,KAAK,qBAAqB,iBAAkBA,CAAQ,CAC5D,CACD,uBAAwB,CACtB,OAAO,KAAK,qBAAqB,uBAAwB,EAAI,CAC9D,CACD,uBAAwB,CACtB,OAAO,KAAK,qBAAqB,uBAAwB,EAAI,CAC9D,CACD,sBAAsBA,EAAW,GAAM,CACrC,OAAO,KAAK,qBAAqB,sBAAuBA,CAAQ,CACjE,CACD,gBAAgBA,EAAW,GAAM,CAC/B,OAAO,KAAK,qBAAqB,WAAYA,CAAQ,CACtD,CACD,MAAM,qBAAqBvQ,EAAMuQ,EAAW,GAAO,CACjD,MAAM7C,EAAU,KAAK,QAAQ,OAAO,yBAAyB1N,CAAI,IAAI,EAC/DsQ,EAAW,MAAM,KAAK,cAE5B,GADA5C,EAAQ,MAAM,UAAU,EACpB4C,EAAStQ,CAAI,IAAM,OAAQ,CAC7B,GAAIuQ,IAAa,GAAM,CACrB7C,EAAQ,KAAK,6CAA6C,EAC1D,MACD,CACDA,EAAQ,MAAM,IAAI,MAAM,sCAAwC1N,CAAI,CAAC,CACtE,CACD,OAAOsQ,EAAStQ,CAAI,CACrB,CACD,MAAM,gBAAiB,CACrB,MAAM0N,EAAU,KAAK,QAAQ,OAAO,gBAAgB,EACpD,GAAI,KAAK,aACP,OAAAA,EAAQ,MAAM,kCAAkC,EACzC,KAAK,aAEd,MAAM8C,EAAW,MAAM,KAAK,gBAAgB,EAAK,EACjD9C,EAAQ,MAAM,eAAgB8C,CAAQ,EACtC,MAAMC,EAAS,MAAM,KAAK,aAAa,QAAQD,CAAQ,EAEvD,GADA9C,EAAQ,MAAM,cAAe+C,CAAM,EAC/B,CAAC,MAAM,QAAQA,EAAO,IAAI,EAC5B,MAAA/C,EAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAC,EAC3C,KAER,YAAK,aAAe+C,EAAO,KACpB,KAAK,YACb,CACH,EAGIC,GAAuB,KAAM,CAC/B,YAAY,CACV,OAAAxE,EAAS,QACT,MAAAyE,EAAQ,YACT,EAAG,GAAI,CACN,KAAK,QAAU,IAAIhF,EAAO,sBAAsB,EAChD,KAAK,OAASgF,EACd,KAAK,QAAUzE,CAChB,CACD,MAAM,IAAItY,EAAKZ,EAAO,CACpB,KAAK,QAAQ,OAAO,QAAQY,CAAG,IAAI,EACnCA,EAAM,KAAK,QAAUA,EACrB,MAAM,KAAK,OAAO,QAAQA,EAAKZ,CAAK,CACrC,CACD,MAAM,IAAIY,EAAK,CACb,YAAK,QAAQ,OAAO,QAAQA,CAAG,IAAI,EACnCA,EAAM,KAAK,QAAUA,EACR,MAAM,KAAK,OAAO,QAAQA,CAAG,CAE3C,CACD,MAAM,OAAOA,EAAK,CAChB,KAAK,QAAQ,OAAO,WAAWA,CAAG,IAAI,EACtCA,EAAM,KAAK,QAAUA,EACrB,MAAM+b,EAAO,MAAM,KAAK,OAAO,QAAQ/b,CAAG,EAC1C,aAAM,KAAK,OAAO,WAAWA,CAAG,EACzB+b,CACR,CACD,MAAM,YAAa,CACjB,KAAK,QAAQ,OAAO,YAAY,EAChC,MAAMiB,EAAM,MAAM,KAAK,OAAO,OACxB1T,EAAO,CAAA,EACb,QAAStK,EAAQ,EAAGA,EAAQge,EAAKhe,IAAS,CACxC,MAAMgB,EAAM,MAAM,KAAK,OAAO,IAAIhB,CAAK,EACnCgB,GAAOA,EAAI,QAAQ,KAAK,OAAO,IAAM,GACvCsJ,EAAK,KAAKtJ,EAAI,OAAO,KAAK,QAAQ,MAAM,CAAC,CAE5C,CACD,OAAOsJ,CACR,CACH,EAGI2T,GAAsB,OACtBC,GAAe,SACfC,GAA8B,qBAC9BC,GAAsB,QACtBC,GAAgC,GAAK,GACrCC,GAA4B,GAAK,EACjCC,GAA0B,KAAM,CAClC,YAAY,CAEV,UAAAjO,EACA,YAAAkO,EACA,SAAAd,EACA,YAAAe,EACA,aAAAC,EAEA,UAAA7E,EACA,cAAAC,EACA,cAAA6E,EAAgBV,GAChB,MAAAnN,EAAQoN,GACR,aAAAU,EACA,yBAAAC,EACA,sBAAAC,EAAwBX,GAExB,OAAAY,EACA,QAAAC,EACA,QAAAC,EACA,WAAAC,EACA,WAAAC,EACA,SAAAC,EACA,cAAAC,EAAgBjB,GAEhB,qBAAApN,EAAuB,GACvB,aAAAsO,EAAe,GACf,uBAAAC,EAAyBlB,GACzB,mBAAAmB,EAAqBlB,GACrB,kBAAAmB,EAAoB,KACpB,YAAAC,EAAc,GACd,YAAAC,EAAc,GAEd,WAAAC,EACA,wBAAAC,EACA,kCAAAC,EACA,wBAAAC,GACA,yBAAAC,GAEA,iBAAAzT,GAAmB,CAAE,EACrB,iBAAA0T,GAAmB,CAAE,EACrB,aAAAC,GAAe,CAAE,CACrB,EAAK,CA0CD,GAzCA,KAAK,UAAY5P,EACbkO,EACF,KAAK,YAAcA,GAEnB,KAAK,YAAclO,EACfA,IACG,KAAK,YAAY,SAAS,GAAG,IAChC,KAAK,aAAe,KAEtB,KAAK,aAAe,qCAGxB,KAAK,SAAWoN,EAChB,KAAK,aAAegB,EACpB,KAAK,YAAcD,EACnB,KAAK,UAAY5E,EACjB,KAAK,cAAgBC,EACrB,KAAK,cAAgB6E,EACrB,KAAK,MAAQ7N,EACb,KAAK,aAAe8N,EACpB,KAAK,yBAA2BC,EAChC,KAAK,sBAAwBC,EAC7B,KAAK,OAASC,EACd,KAAK,QAAUC,EACf,KAAK,QAAUC,EACf,KAAK,WAAaC,EAClB,KAAK,WAAaC,EAClB,KAAK,SAAWC,EAChB,KAAK,cAAgBC,EACrB,KAAK,qBAAuBrO,GAAsD,GAClF,KAAK,aAAe,CAAC,CAACsO,EACtB,KAAK,uBAAyBC,EAC9B,KAAK,mBAAqBC,EAC1B,KAAK,kBAAoBC,EACzB,KAAK,YAAc,CAAC,CAACC,EACrB,KAAK,YAAc,CAAC,CAACC,EACrB,KAAK,kCAAoCG,EACrCC,IAA2BF,GAC7B,QAAQ,KAAK,6GAA6G,EAE5H,KAAK,wBAA0BE,IAAoDF,GAAoD,cACnID,EACF,KAAK,WAAaA,MACb,CACL,MAAM7B,GAAQ,OAAO,OAAW,IAAc,OAAO,aAAe,IAAI5B,GACxE,KAAK,WAAa,IAAI2B,GAAqB,CAAE,MAAAC,EAAO,CAAA,CACrD,CACD,KAAK,yBAA2BiC,GAChC,KAAK,iBAAmBzT,GACxB,KAAK,iBAAmB0T,GACxB,KAAK,aAAeC,EACrB,CACH,EAGIC,GAAkB,KAAM,CAC1B,YAAY1C,EAAW2C,EAAkB,CACvC,KAAK,UAAY3C,EACjB,KAAK,iBAAmB2C,EACxB,KAAK,QAAU,IAAIrH,EAAO,iBAAiB,EAC3C,KAAK,kBAAoB,MAAOoE,GAAiB,CAC/C,MAAMrC,EAAU,KAAK,QAAQ,OAAO,mBAAmB,EACvD,GAAI,CACF,MAAMuF,EAAUlG,GAAS,OAAOgD,CAAY,EAC5C,OAAArC,EAAQ,MAAM,yBAAyB,EAChCuF,CACR,OAAQ5T,EAAK,CACZ,MAAAqO,EAAQ,MAAM,4BAA4B,EACpCrO,CACP,CACP,EACI,KAAK,aAAe,IAAI2P,GACtB,OACA,KAAK,kBACL,KAAK,UAAU,YACrB,CACG,CACD,MAAM,UAAUpM,EAAO,CACrB,MAAM8K,EAAU,KAAK,QAAQ,OAAO,WAAW,EAC1C9K,GACH,KAAK,QAAQ,MAAM,IAAI,MAAM,iBAAiB,CAAC,EAEjD,MAAMH,EAAM,MAAM,KAAK,iBAAiB,oBAAmB,EAC3DiL,EAAQ,MAAM,mBAAoBjL,CAAG,EACrC,MAAM7D,EAAS,MAAM,KAAK,aAAa,QAAQ6D,EAAK,CAClD,MAAAG,EACA,YAAa,KAAK,UAAU,uBAClC,CAAK,EACD,OAAA8K,EAAQ,MAAM,aAAc9O,CAAM,EAC3BA,CACR,CACH,EAGIsU,GAAc,KAAM,CACtB,YAAY7C,EAAW2C,EAAkB,CACvC,KAAK,UAAY3C,EACjB,KAAK,iBAAmB2C,EACxB,KAAK,QAAU,IAAIrH,EAAO,aAAa,EACvC,KAAK,aAAe,IAAIqD,GACtB,KAAK,UAAU,kCACf,KACA,KAAK,UAAU,YACrB,CACG,CAMD,MAAM,aAAa,CACjB,WAAAmE,EAAa,qBACb,aAAA3B,EAAe,KAAK,UAAU,aAC9B,UAAA/E,EAAY,KAAK,UAAU,UAC3B,cAAAC,EAAgB,KAAK,UAAU,cAC/B,GAAGb,CACP,EAAK,CACD,MAAM6B,EAAU,KAAK,QAAQ,OAAO,cAAc,EAC7CjB,GACHiB,EAAQ,MAAM,IAAI,MAAM,yBAAyB,CAAC,EAE/C8D,GACH9D,EAAQ,MAAM,IAAI,MAAM,4BAA4B,CAAC,EAElD7B,EAAK,MACR6B,EAAQ,MAAM,IAAI,MAAM,oBAAoB,CAAC,EAE/C,MAAM9N,EAAS,IAAI,gBAAgB,CAAE,WAAAuT,EAAY,aAAA3B,CAAc,CAAA,EAC/D,SAAW,CAAC5d,EAAKZ,CAAK,IAAK,OAAO,QAAQ6Y,CAAI,EACxC7Y,GAAS,MACX4M,EAAO,IAAIhM,EAAKZ,CAAK,EAGzB,IAAI2Z,EACJ,OAAQ,KAAK,UAAU,sBAAqB,CAC1C,IAAK,sBACH,GAAI,CAACD,EACH,MAAAgB,EAAQ,MAAM,IAAI,MAAM,6BAA6B,CAAC,EAChD,KAERf,EAAYP,EAAY,kBAAkBK,EAAWC,CAAa,EAClE,MACF,IAAK,qBACH9M,EAAO,OAAO,YAAa6M,CAAS,EAChCC,GACF9M,EAAO,OAAO,gBAAiB8M,CAAa,EAE9C,KACH,CACD,MAAMjK,EAAM,MAAM,KAAK,iBAAiB,iBAAiB,EAAK,EAC9DiL,EAAQ,MAAM,oBAAoB,EAClC,MAAM/K,EAAW,MAAM,KAAK,aAAa,SAASF,EAAK,CAAE,KAAM7C,EAAQ,UAAA+M,EAAW,gBAAiB,KAAK,UAAU,uBAAyB,CAAA,EAC3I,OAAAe,EAAQ,MAAM,cAAc,EACrB/K,CACR,CAMD,MAAM,oBAAoB,CACxB,WAAAwQ,EAAa,WACb,UAAA1G,EAAY,KAAK,UAAU,UAC3B,cAAAC,EAAgB,KAAK,UAAU,cAC/B,MAAAhJ,EAAQ,KAAK,UAAU,MACvB,GAAGmI,CACP,EAAK,CACD,MAAM6B,EAAU,KAAK,QAAQ,OAAO,qBAAqB,EACpDjB,GACHiB,EAAQ,MAAM,IAAI,MAAM,yBAAyB,CAAC,EAEpD,MAAM9N,EAAS,IAAI,gBAAgB,CAAE,WAAAuT,EAAY,MAAAzP,CAAO,CAAA,EACxD,SAAW,CAAC9P,EAAKZ,CAAK,IAAK,OAAO,QAAQ6Y,CAAI,EACxC7Y,GAAS,MACX4M,EAAO,IAAIhM,EAAKZ,CAAK,EAGzB,IAAI2Z,EACJ,OAAQ,KAAK,UAAU,sBAAqB,CAC1C,IAAK,sBACH,GAAI,CAACD,EACH,MAAAgB,EAAQ,MAAM,IAAI,MAAM,6BAA6B,CAAC,EAChD,KAERf,EAAYP,EAAY,kBAAkBK,EAAWC,CAAa,EAClE,MACF,IAAK,qBACH9M,EAAO,OAAO,YAAa6M,CAAS,EAChCC,GACF9M,EAAO,OAAO,gBAAiB8M,CAAa,EAE9C,KACH,CACD,MAAMjK,EAAM,MAAM,KAAK,iBAAiB,iBAAiB,EAAK,EAC9DiL,EAAQ,MAAM,oBAAoB,EAClC,MAAM/K,EAAW,MAAM,KAAK,aAAa,SAASF,EAAK,CAAE,KAAM7C,EAAQ,UAAA+M,EAAW,gBAAiB,KAAK,UAAU,uBAAyB,CAAA,EAC3I,OAAAe,EAAQ,MAAM,cAAc,EACrB/K,CACR,CAMD,MAAM,qBAAqB,CACzB,WAAAwQ,EAAa,gBACb,UAAA1G,EAAY,KAAK,UAAU,UAC3B,cAAAC,EAAgB,KAAK,UAAU,cAC/B,iBAAA0C,EACA,GAAGvD,CACP,EAAK,CACD,MAAM6B,EAAU,KAAK,QAAQ,OAAO,sBAAsB,EACrDjB,GACHiB,EAAQ,MAAM,IAAI,MAAM,yBAAyB,CAAC,EAE/C7B,EAAK,eACR6B,EAAQ,MAAM,IAAI,MAAM,6BAA6B,CAAC,EAExD,MAAM9N,EAAS,IAAI,gBAAgB,CAAE,WAAAuT,CAAY,CAAA,EACjD,SAAW,CAACvf,EAAKZ,CAAK,IAAK,OAAO,QAAQ6Y,CAAI,EACxC,MAAM,QAAQ7Y,CAAK,EACrBA,EAAM,QAASogB,GAAUxT,EAAO,OAAOhM,EAAKwf,CAAK,CAAC,EACzCpgB,GAAS,MAClB4M,EAAO,IAAIhM,EAAKZ,CAAK,EAGzB,IAAI2Z,EACJ,OAAQ,KAAK,UAAU,sBAAqB,CAC1C,IAAK,sBACH,GAAI,CAACD,EACH,MAAAgB,EAAQ,MAAM,IAAI,MAAM,6BAA6B,CAAC,EAChD,KAERf,EAAYP,EAAY,kBAAkBK,EAAWC,CAAa,EAClE,MACF,IAAK,qBACH9M,EAAO,OAAO,YAAa6M,CAAS,EAChCC,GACF9M,EAAO,OAAO,gBAAiB8M,CAAa,EAE9C,KACH,CACD,MAAMjK,EAAM,MAAM,KAAK,iBAAiB,iBAAiB,EAAK,EAC9DiL,EAAQ,MAAM,oBAAoB,EAClC,MAAM/K,EAAW,MAAM,KAAK,aAAa,SAASF,EAAK,CAAE,KAAM7C,EAAQ,UAAA+M,EAAW,iBAAAyC,EAAkB,gBAAiB,KAAK,UAAU,uBAAuB,CAAE,EAC7J,OAAA1B,EAAQ,MAAM,cAAc,EACrB/K,CACR,CAMD,MAAM,OAAOkJ,EAAM,CACjB,IAAIsB,EACJ,MAAMO,EAAU,KAAK,QAAQ,OAAO,QAAQ,EACvC7B,EAAK,OACR6B,EAAQ,MAAM,IAAI,MAAM,qBAAqB,CAAC,EAEhD,MAAMjL,EAAM,MAAM,KAAK,iBAAiB,sBAAsB,EAAK,EACnEiL,EAAQ,MAAM,sCAAsCP,EAAKtB,EAAK,kBAAoB,KAAOsB,EAAK,oBAAoB,EAAE,EACpH,MAAMvN,EAAS,IAAI,gBACnB,SAAW,CAAChM,EAAKZ,CAAK,IAAK,OAAO,QAAQ6Y,CAAI,EACxC7Y,GAAS,MACX4M,EAAO,IAAIhM,EAAKZ,CAAK,EAGzB4M,EAAO,IAAI,YAAa,KAAK,UAAU,SAAS,EAC5C,KAAK,UAAU,eACjBA,EAAO,IAAI,gBAAiB,KAAK,UAAU,aAAa,EAE1D,MAAM,KAAK,aAAa,SAAS6C,EAAK,CAAE,KAAM7C,CAAM,CAAE,EACtD8N,EAAQ,MAAM,cAAc,CAC7B,CACH,EAGI2F,GAAoB,KAAM,CAC5B,YAAYhD,EAAW2C,EAAkBM,EAAgB,CACvD,KAAK,UAAYjD,EACjB,KAAK,iBAAmB2C,EACxB,KAAK,eAAiBM,EACtB,KAAK,QAAU,IAAI3H,EAAO,mBAAmB,EAC7C,KAAK,iBAAmB,IAAIoH,GAAgB,KAAK,UAAW,KAAK,gBAAgB,EACjF,KAAK,aAAe,IAAIG,GAAY,KAAK,UAAW,KAAK,gBAAgB,CAC1E,CACD,MAAM,uBAAuBvQ,EAAUpE,EAAO,CAC5C,MAAMmP,EAAU,KAAK,QAAQ,OAAO,wBAAwB,EAC5D,KAAK,oBAAoB/K,EAAUpE,CAAK,EACxCmP,EAAQ,MAAM,iBAAiB,EAC/B,MAAM,KAAK,aAAa/K,EAAUpE,CAAK,EACvCmP,EAAQ,MAAM,gBAAgB,EAC1B/K,EAAS,UACX,KAAK,2BAA2BA,CAAQ,EAE1C+K,EAAQ,MAAM,kBAAkB,EAChC,MAAM,KAAK,eAAe/K,EAAUpE,GAAS,KAAO,OAASA,EAAM,aAAcoE,EAAS,QAAQ,EAClG+K,EAAQ,MAAM,kBAAkB,CACjC,CACD,MAAM,4BAA4B/K,EAAU4Q,EAAc,CACxD,MAAM7F,EAAU,KAAK,QAAQ,OAAO,6BAA6B,EAC7D/K,EAAS,UACX,KAAK,2BAA2BA,CAAQ,EAE1C+K,EAAQ,MAAM,kBAAkB,EAChC,MAAM,KAAK,eAAe/K,EAAU4Q,EAAc5Q,EAAS,QAAQ,EACnE+K,EAAQ,MAAM,kBAAkB,CACjC,CACD,MAAM,wBAAwB/K,EAAUpE,EAAO,CAC7C,IAAI4O,EAAIC,EACR,MAAMM,EAAU,KAAK,QAAQ,OAAO,yBAAyB,EAC7D/K,EAAS,UAAYpE,EAAM,MAC1B4O,EAAKxK,EAAS,gBAAkB,OAAYA,EAAS,cAAgBpE,EAAM,gBAC3E6O,EAAKzK,EAAS,QAAU,OAAYA,EAAS,MAAQpE,EAAM,OACxDoE,EAAS,UAAcA,EAAS,WAClC,KAAK,2BAA2BA,EAAUpE,EAAM,QAAQ,EACxDmP,EAAQ,MAAM,oBAAoB,GAE/B/K,EAAS,WACZA,EAAS,SAAWpE,EAAM,SAC1BoE,EAAS,QAAUpE,EAAM,SAE3B,MAAMiV,EAAa7Q,EAAS,UAAY,CAAC,CAACA,EAAS,SACnD,MAAM,KAAK,eAAeA,EAAU,GAAO6Q,CAAU,EACrD9F,EAAQ,MAAM,kBAAkB,CACjC,CACD,wBAAwB/K,EAAUpE,EAAO,CACvC,MAAMmP,EAAU,KAAK,QAAQ,OAAO,yBAAyB,EAM7D,GALInP,EAAM,KAAOoE,EAAS,OACxB+K,EAAQ,MAAM,IAAI,MAAM,sBAAsB,CAAC,EAEjDA,EAAQ,MAAM,iBAAiB,EAC/B/K,EAAS,UAAYpE,EAAM,KACvBoE,EAAS,MACX,MAAA+K,EAAQ,KAAK,qBAAsB/K,EAAS,KAAK,EAC3C,IAAIoL,GAAcpL,CAAQ,CAEnC,CACD,oBAAoBA,EAAUpE,EAAO,CACnC,IAAI4O,EACJ,MAAMO,EAAU,KAAK,QAAQ,OAAO,qBAAqB,EAmBzD,GAlBInP,EAAM,KAAOoE,EAAS,OACxB+K,EAAQ,MAAM,IAAI,MAAM,sBAAsB,CAAC,EAE5CnP,EAAM,WACTmP,EAAQ,MAAM,IAAI,MAAM,uBAAuB,CAAC,EAE7CnP,EAAM,WACTmP,EAAQ,MAAM,IAAI,MAAM,uBAAuB,CAAC,EAE9C,KAAK,UAAU,YAAcnP,EAAM,WACrCmP,EAAQ,MAAM,IAAI,MAAM,iDAAiD,CAAC,EAExE,KAAK,UAAU,WAAa,KAAK,UAAU,YAAcnP,EAAM,WACjEmP,EAAQ,MAAM,IAAI,MAAM,iDAAiD,CAAC,EAE5EA,EAAQ,MAAM,iBAAiB,EAC/B/K,EAAS,UAAYpE,EAAM,MAC1B4O,EAAKxK,EAAS,QAAU,OAAYA,EAAS,MAAQpE,EAAM,OACxDoE,EAAS,MACX,MAAA+K,EAAQ,KAAK,qBAAsB/K,EAAS,KAAK,EAC3C,IAAIoL,GAAcpL,CAAQ,EAE9BpE,EAAM,eAAiB,CAACoE,EAAS,MACnC+K,EAAQ,MAAM,IAAI,MAAM,2BAA2B,CAAC,CAEvD,CACD,MAAM,eAAe/K,EAAU4Q,EAAe,GAAOE,EAAc,GAAM,CACvE,MAAM/F,EAAU,KAAK,QAAQ,OAAO,gBAAgB,EAEpD,GADA/K,EAAS,QAAU,KAAK,eAAe,qBAAqBA,EAAS,OAAO,EACxE4Q,GAAgB,CAAC,KAAK,UAAU,cAAgB,CAAC5Q,EAAS,aAAc,CAC1E+K,EAAQ,MAAM,uBAAuB,EACrC,MACD,CACDA,EAAQ,MAAM,mBAAmB,EACjC,MAAM9O,EAAS,MAAM,KAAK,iBAAiB,UAAU+D,EAAS,YAAY,EAC1E+K,EAAQ,MAAM,mDAAmD,EAC7D+F,GAAe7U,EAAO,MAAQ+D,EAAS,QAAQ,KACjD+K,EAAQ,MAAM,IAAI,MAAM,mEAAmE,CAAC,EAE9F/K,EAAS,QAAU,KAAK,eAAe,YAAYA,EAAS,QAAS,KAAK,eAAe,qBAAqB/D,CAAM,CAAC,EACrH8O,EAAQ,MAAM,8CAA+C/K,EAAS,OAAO,CAC9E,CACD,MAAM,aAAaA,EAAUpE,EAAO,CAClC,MAAMmP,EAAU,KAAK,QAAQ,OAAO,cAAc,EAClD,GAAI/K,EAAS,KAAM,CACjB+K,EAAQ,MAAM,iBAAiB,EAC/B,MAAMgG,EAAgB,MAAM,KAAK,aAAa,aAAa,CACzD,UAAWnV,EAAM,UACjB,cAAeA,EAAM,cACrB,KAAMoE,EAAS,KACf,aAAcpE,EAAM,aACpB,cAAeA,EAAM,cACrB,GAAGA,EAAM,gBACjB,CAAO,EACD,OAAO,OAAOoE,EAAU+Q,CAAa,CAC3C,MACMhG,EAAQ,MAAM,oBAAoB,CAErC,CACD,2BAA2B/K,EAAUgR,EAAe,CAClD,IAAIxG,EACJ,MAAMO,EAAU,KAAK,QAAQ,OAAO,4BAA4B,EAChEA,EAAQ,MAAM,uBAAuB,EACrC,MAAMkG,EAAW7G,GAAS,QAAQI,EAAKxK,EAAS,WAAa,KAAOwK,EAAK,EAAE,EAI3E,GAHKyG,EAAS,KACZlG,EAAQ,MAAM,IAAI,MAAM,qCAAqC,CAAC,EAE5DiG,EAAe,CACjB,MAAME,EAAW9G,GAAS,OAAO4G,CAAa,EAC1CC,EAAS,MAAQC,EAAS,KAC5BnG,EAAQ,MAAM,IAAI,MAAM,4CAA4C,CAAC,EAEnEkG,EAAS,WAAaA,EAAS,YAAcC,EAAS,WACxDnG,EAAQ,MAAM,IAAI,MAAM,yDAAyD,CAAC,EAEhFkG,EAAS,KAAOA,EAAS,MAAQC,EAAS,KAC5CnG,EAAQ,MAAM,IAAI,MAAM,6CAA6C,CAAC,EAEpE,CAACkG,EAAS,KAAOC,EAAS,KAC5BnG,EAAQ,MAAM,IAAI,MAAM,uDAAuD,CAAC,CAEnF,CACD/K,EAAS,QAAUiR,CACpB,CACH,EAGIE,GAAQ,KAAM,CAChB,YAAYjI,EAAM,CAChB,KAAK,GAAKA,EAAK,IAAMO,EAAY,eAAc,EAC/C,KAAK,KAAOP,EAAK,KACbA,EAAK,SAAWA,EAAK,QAAU,EACjC,KAAK,QAAUA,EAAK,QAEpB,KAAK,QAAU0B,EAAM,eAEvB,KAAK,aAAe1B,EAAK,YAC1B,CACD,iBAAkB,CAChB,WAAIF,EAAO,OAAO,EAAE,OAAO,iBAAiB,EACrC,KAAK,UAAU,CACpB,GAAI,KAAK,GACT,KAAM,KAAK,KACX,QAAS,KAAK,QACd,aAAc,KAAK,YACzB,CAAK,CACF,CACD,OAAO,kBAAkBoI,EAAe,CACtC,OAAApI,EAAO,aAAa,QAAS,mBAAmB,EACzC,IAAImI,GAAM,KAAK,MAAMC,CAAa,CAAC,CAC3C,CACD,aAAa,gBAAgB/P,EAASgQ,EAAK,CACzC,MAAMtG,EAAU/B,EAAO,aAAa,QAAS,iBAAiB,EACxDsI,EAAS1G,EAAM,aAAY,EAAKyG,EAChC9W,EAAO,MAAM8G,EAAQ,aAC3B0J,EAAQ,MAAM,WAAYxQ,CAAI,EAC9B,QAASqJ,EAAI,EAAGA,EAAIrJ,EAAK,OAAQqJ,IAAK,CACpC,MAAM3S,EAAMsJ,EAAKqJ,CAAC,EACZoJ,EAAO,MAAM3L,EAAQ,IAAIpQ,CAAG,EAClC,IAAIsgB,EAAS,GACb,GAAIvE,EACF,GAAI,CACF,MAAMpR,EAAQuV,GAAM,kBAAkBnE,CAAI,EAC1CjC,EAAQ,MAAM,qBAAsB9Z,EAAK2K,EAAM,OAAO,EAClDA,EAAM,SAAW0V,IACnBC,EAAS,GAEZ,OAAQ7U,EAAK,CACZqO,EAAQ,MAAM,+BAAgC9Z,EAAKyL,CAAG,EACtD6U,EAAS,EACV,MAEDxG,EAAQ,MAAM,8BAA+B9Z,CAAG,EAChDsgB,EAAS,GAEPA,IACFxG,EAAQ,MAAM,wBAAyB9Z,CAAG,EACrCoQ,EAAQ,OAAOpQ,CAAG,EAE1B,CACF,CACH,EAGIugB,GAAc,cAAcL,EAAM,CACpC,YAAYjI,EAAM,CAChB,MAAMA,CAAI,EACNA,EAAK,gBAAkB,GACzB,KAAK,cAAgBO,EAAY,uBACxBP,EAAK,gBACd,KAAK,cAAgBA,EAAK,eAExB,KAAK,gBACP,KAAK,eAAiBO,EAAY,sBAAsB,KAAK,aAAa,GAE5E,KAAK,UAAYP,EAAK,UACtB,KAAK,UAAYA,EAAK,UACtB,KAAK,aAAeA,EAAK,aACzB,KAAK,MAAQA,EAAK,MAClB,KAAK,cAAgBA,EAAK,cAC1B,KAAK,iBAAmBA,EAAK,iBAC7B,KAAK,cAAgBA,EAAK,cAC1B,KAAK,aAAeA,EAAK,YAC1B,CACD,iBAAkB,CAChB,WAAIF,EAAO,aAAa,EAAE,OAAO,iBAAiB,EAC3C,KAAK,UAAU,CACpB,GAAI,KAAK,GACT,KAAM,KAAK,KACX,QAAS,KAAK,QACd,aAAc,KAAK,aACnB,cAAe,KAAK,cACpB,UAAW,KAAK,UAChB,UAAW,KAAK,UAChB,aAAc,KAAK,aACnB,MAAO,KAAK,MACZ,cAAe,KAAK,cACpB,iBAAkB,KAAK,iBACvB,cAAe,KAAK,cACpB,aAAc,KAAK,YACzB,CAAK,CACF,CACD,OAAO,kBAAkBoI,EAAe,CACtCpI,EAAO,aAAa,cAAe,mBAAmB,EACtD,MAAM7U,EAAO,KAAK,MAAMid,CAAa,EACrC,OAAO,IAAII,GAAYrd,CAAI,CAC5B,CACH,EAGIsd,GAAgB,KAAM,CACxB,YAAY,CAEV,IAAA3R,EACA,UAAAS,EACA,UAAAuJ,EACA,aAAA+E,EACA,cAAAD,EACA,MAAA7N,EAEA,WAAA2Q,EACA,cAAApC,EACA,aAAAqC,EACA,cAAA5H,EACA,MAAA6H,EACA,SAAAvC,EACA,aAAAuB,EACA,iBAAApU,EACA,iBAAA0T,EACA,YAAAN,EACA,GAAGiC,CACP,EAAK,CAED,GADA,KAAK,QAAU,IAAI7I,EAAO,eAAe,EACrC,CAAClJ,EACH,WAAK,QAAQ,MAAM,qBAAqB,EAClC,IAAI,MAAM,KAAK,EAEvB,GAAI,CAACgK,EACH,WAAK,QAAQ,MAAM,2BAA2B,EACxC,IAAI,MAAM,WAAW,EAE7B,GAAI,CAAC+E,EACH,WAAK,QAAQ,MAAM,8BAA8B,EAC3C,IAAI,MAAM,cAAc,EAEhC,GAAI,CAACD,EACH,WAAK,QAAQ,MAAM,+BAA+B,EAC5C,IAAI,MAAM,eAAe,EAEjC,GAAI,CAAC7N,EACH,WAAK,QAAQ,MAAM,uBAAuB,EACpC,IAAI,MAAM,OAAO,EAEzB,GAAI,CAACR,EACH,WAAK,QAAQ,MAAM,2BAA2B,EACxC,IAAI,MAAM,WAAW,EAE7B,KAAK,MAAQ,IAAIiR,GAAY,CAC3B,KAAME,EACN,aAAAC,EACA,cAAe,CAAC/B,EAChB,UAAA9F,EACA,UAAAvJ,EACA,aAAAsO,EACA,cAAAS,EACA,cAAAvF,EACA,MAAAhJ,EACA,iBAAAmP,EACA,aAAAU,CACN,CAAK,EACD,MAAM3E,EAAY,IAAI,IAAInM,CAAG,EAC7BmM,EAAU,aAAa,OAAO,YAAanC,CAAS,EACpDmC,EAAU,aAAa,OAAO,eAAgB4C,CAAY,EAC1D5C,EAAU,aAAa,OAAO,gBAAiB2C,CAAa,EAC5D3C,EAAU,aAAa,OAAO,QAASlL,CAAK,EACxC6Q,GACF3F,EAAU,aAAa,OAAO,QAAS2F,CAAK,EAE9C3F,EAAU,aAAa,OAAO,QAAS,KAAK,MAAM,EAAE,EAChD,KAAK,MAAM,iBACbA,EAAU,aAAa,OAAO,iBAAkB,KAAK,MAAM,cAAc,EACzEA,EAAU,aAAa,OAAO,wBAAyB,MAAM,GAE3DoD,IACgB,MAAM,QAAQA,CAAQ,EAAIA,EAAW,CAACA,CAAQ,GACtD,QAAS9G,GAAM0D,EAAU,aAAa,OAAO,WAAY1D,CAAC,CAAC,EAEvE,SAAW,CAACtX,EAAKZ,CAAK,IAAK,OAAO,QAAQ,CAAE,cAAAif,EAAe,GAAGuC,EAAgB,GAAGrV,CAAkB,CAAA,EAC7FnM,GAAS,MACX4b,EAAU,aAAa,OAAOhb,EAAKZ,EAAM,SAAQ,CAAE,EAGvD,KAAK,IAAM4b,EAAU,IACtB,CACH,EAGI6F,GAAY,SACZC,GAAiB,KAAM,CACzB,YAAY9U,EAAQ,CAElB,KAAK,aAAe,GAEpB,KAAK,WAAa,GAElB,KAAK,QAAU,GACf,KAAK,MAAQA,EAAO,IAAI,OAAO,EAC/B,KAAK,cAAgBA,EAAO,IAAI,eAAe,EAC/C,KAAK,MAAQA,EAAO,IAAI,OAAO,EAC/B,KAAK,kBAAoBA,EAAO,IAAI,mBAAmB,EACvD,KAAK,UAAYA,EAAO,IAAI,WAAW,EACvC,KAAK,KAAOA,EAAO,IAAI,MAAM,CAC9B,CACD,IAAI,YAAa,CACf,GAAI,KAAK,aAAe,OAGxB,OAAO,KAAK,WAAa2N,EAAM,aAAY,CAC5C,CACD,IAAI,WAAWva,EAAO,CAChB,OAAOA,GAAU,WACnBA,EAAQ,OAAOA,CAAK,GAClBA,IAAU,QAAUA,GAAS,IAC/B,KAAK,WAAa,KAAK,MAAMA,CAAK,EAAIua,EAAM,eAE/C,CACD,IAAI,UAAW,CACb,IAAIJ,EACJ,QAASA,EAAK,KAAK,QAAU,KAAO,OAASA,EAAG,MAAM,GAAG,EAAE,SAASsH,EAAS,IAAM,CAAC,CAAC,KAAK,QAC3F,CACH,EAGIE,GAAiB,KAAM,CACzB,YAAY,CACV,IAAAlS,EACA,WAAA4R,EACA,cAAAO,EACA,yBAAAnD,EACA,iBAAAtS,EACA,aAAAmV,EACA,UAAA7H,CACJ,EAAK,CAED,GADA,KAAK,QAAU,IAAId,EAAO,gBAAgB,EACtC,CAAClJ,EACH,WAAK,QAAQ,MAAM,qBAAqB,EAClC,IAAI,MAAM,KAAK,EAEvB,MAAMmM,EAAY,IAAI,IAAInM,CAAG,EACzBmS,GACFhG,EAAU,aAAa,OAAO,gBAAiBgG,CAAa,EAE1DnI,GACFmC,EAAU,aAAa,OAAO,YAAanC,CAAS,EAElDgF,IACF7C,EAAU,aAAa,OAAO,2BAA4B6C,CAAwB,EAC9E4C,IACF,KAAK,MAAQ,IAAIP,GAAM,CAAE,KAAMO,EAAY,aAAAC,CAAY,CAAE,EACzD1F,EAAU,aAAa,OAAO,QAAS,KAAK,MAAM,EAAE,IAGxD,SAAW,CAAChb,EAAKZ,CAAK,IAAK,OAAO,QAAQ,CAAE,GAAGmM,CAAgB,CAAE,EAC3DnM,GAAS,MACX4b,EAAU,aAAa,OAAOhb,EAAKZ,EAAM,SAAQ,CAAE,EAGvD,KAAK,IAAM4b,EAAU,IACtB,CACH,EAGIiG,GAAkB,KAAM,CAC1B,YAAYjV,EAAQ,CAClB,KAAK,MAAQA,EAAO,IAAI,OAAO,EAC/B,KAAK,MAAQA,EAAO,IAAI,OAAO,EAC/B,KAAK,kBAAoBA,EAAO,IAAI,mBAAmB,EACvD,KAAK,UAAYA,EAAO,IAAI,WAAW,CACxC,CACH,EAGIkV,GAAwB,CAC1B,MACA,MACA,YACA,QACA,MACA,MACA,MACA,SAEF,EACIC,GAAiC,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,EACnEC,GAAgB,KAAM,CACxB,YAAY3E,EAAW,CACrB,KAAK,UAAYA,EACjB,KAAK,QAAU,IAAI1E,EAAO,eAAe,CAC1C,CACD,qBAAqB/M,EAAQ,CAC3B,MAAM7L,EAAS,CAAE,GAAG6L,GACpB,GAAI,KAAK,UAAU,qBAAsB,CACvC,IAAIqW,EACA,MAAM,QAAQ,KAAK,UAAU,oBAAoB,EACnDA,EAAiB,KAAK,UAAU,qBAEhCA,EAAiBH,GAEnB,UAAWI,KAASD,EACbF,GAA+B,SAASG,CAAK,GAChD,OAAOniB,EAAOmiB,CAAK,CAGxB,CACD,OAAOniB,CACR,CACD,YAAYoiB,EAASC,EAAS,CAC5B,MAAMriB,EAAS,CAAE,GAAGoiB,GACpB,SAAW,CAACD,EAAOhiB,CAAM,IAAK,OAAO,QAAQkiB,CAAO,EAClD,UAAWpiB,KAAS,MAAM,QAAQE,CAAM,EAAIA,EAAS,CAACA,CAAM,EAAG,CAC7D,MAAMmiB,EAAgBtiB,EAAOmiB,CAAK,EAC7BG,EAEM,MAAM,QAAQA,CAAa,EAC/BA,EAAc,SAASriB,CAAK,GAC/BqiB,EAAc,KAAKriB,CAAK,EAEjBD,EAAOmiB,CAAK,IAAMliB,IACvB,OAAOA,GAAU,UAAY,KAAK,UAAU,YAC9CD,EAAOmiB,CAAK,EAAI,KAAK,YAAYG,EAAeriB,CAAK,EAErDD,EAAOmiB,CAAK,EAAI,CAACG,EAAeriB,CAAK,GATvCD,EAAOmiB,CAAK,EAAIliB,CAYnB,CAEH,OAAOD,CACR,CACH,EAGIuiB,GAAa,KAAM,CACrB,YAAYlX,EAAUmX,EAAiB,CACrC,KAAK,QAAU,IAAI5J,EAAO,YAAY,EACtC,KAAK,SAAWvN,aAAoB+S,GAA0B/S,EAAW,IAAI+S,GAAwB/S,CAAQ,EAC7G,KAAK,gBAAkBmX,GAA4C,IAAInF,GAAgB,KAAK,QAAQ,EACpG,KAAK,eAAiB,IAAI4E,GAAc,KAAK,QAAQ,EACrD,KAAK,WAAa,IAAI3B,GAAkB,KAAK,SAAU,KAAK,gBAAiB,KAAK,cAAc,EAChG,KAAK,aAAe,IAAIH,GAAY,KAAK,SAAU,KAAK,eAAe,CACxE,CACD,MAAM,oBAAoB,CACxB,MAAA3U,EACA,QAAAiX,EACA,YAAAC,EACA,aAAAnB,EACA,cAAAM,EACA,WAAAc,EACA,aAAAnC,EACA,MAAAgB,EACA,cAAAhD,EAAgB,KAAK,SAAS,cAC9B,MAAA7N,EAAQ,KAAK,SAAS,MACtB,aAAA8N,EAAe,KAAK,SAAS,aAC7B,OAAAG,EAAS,KAAK,SAAS,OACvB,QAAAC,EAAU,KAAK,SAAS,QACxB,QAAAC,EAAU,KAAK,SAAS,QACxB,WAAAC,EAAa,KAAK,SAAS,WAC3B,WAAAC,EAAa,KAAK,SAAS,WAC3B,SAAAC,EAAW,KAAK,SAAS,SACzB,cAAAC,EAAgB,KAAK,SAAS,cAC9B,iBAAA9S,EAAmB,KAAK,SAAS,iBACjC,iBAAA0T,EAAmB,KAAK,SAAS,gBACrC,EAAK,CACD,MAAMnF,EAAU,KAAK,QAAQ,OAAO,qBAAqB,EACzD,GAAI6D,IAAkB,OACpB,MAAM,IAAI,MAAM,2DAA2D,EAE7E,MAAM9O,EAAM,MAAM,KAAK,gBAAgB,yBAAwB,EAC/DiL,EAAQ,MAAM,kCAAmCjL,CAAG,EACpD,MAAMkT,EAAgB,IAAIvB,GAAc,CACtC,IAAA3R,EACA,UAAW,KAAK,SAAS,UACzB,UAAW,KAAK,SAAS,UACzB,aAAA+O,EACA,cAAAD,EACA,MAAA7N,EACA,WAAYnF,EACZ,OAAAoT,EACA,QAAAC,EACA,QAAAC,EACA,WAAAC,EACA,cAAA8C,EACA,WAAAc,EACA,WAAA3D,EACA,SAAAC,EACA,QAAAwD,EACA,YAAAC,EACA,iBAAAtW,EACA,iBAAA0T,EACA,aAAAyB,EACA,cAAArC,EACA,cAAe,KAAK,SAAS,cAC7B,aAAAsB,EACA,MAAAgB,EACA,YAAa,KAAK,SAAS,WACjC,CAAK,EACD,MAAM,KAAK,kBACX,MAAMqB,EAAcD,EAAc,MAClC,aAAM,KAAK,SAAS,WAAW,IAAIC,EAAY,GAAIA,EAAY,gBAAe,CAAE,EACzED,CACR,CACD,MAAM,wBAAwBlT,EAAKoT,EAAc,GAAO,CACtD,MAAMnI,EAAU,KAAK,QAAQ,OAAO,yBAAyB,EACvD/K,EAAW,IAAI+R,GAAe7G,GAAS,WAAWpL,EAAK,KAAK,SAAS,aAAa,CAAC,EACzF,GAAI,CAACE,EAAS,MACZ,MAAA+K,EAAQ,MAAM,IAAI,MAAM,sBAAsB,CAAC,EACzC,KAER,MAAMoI,EAAoB,MAAM,KAAK,SAAS,WAAWD,EAAc,SAAW,KAAK,EAAElT,EAAS,KAAK,EACvG,GAAI,CAACmT,EACH,MAAApI,EAAQ,MAAM,IAAI,MAAM,oCAAoC,CAAC,EACvD,KAGR,MAAO,CAAE,MADKyG,GAAY,kBAAkB2B,CAAiB,EAC7C,SAAAnT,EACjB,CACD,MAAM,sBAAsBF,EAAK,CAC/B,MAAMiL,EAAU,KAAK,QAAQ,OAAO,uBAAuB,EACrD,CAAE,MAAAnP,EAAO,SAAAoE,GAAa,MAAM,KAAK,wBAAwBF,EAAK,EAAI,EACxE,OAAAiL,EAAQ,MAAM,kDAAkD,EAChE,MAAM,KAAK,WAAW,uBAAuB/K,EAAUpE,CAAK,EACrDoE,CACR,CACD,MAAM,wCAAwC,CAC5C,SAAAoT,EACA,SAAAC,EACA,aAAAzC,EAAe,GACf,iBAAAV,EAAmB,CAAE,CACzB,EAAK,CACD,MAAMa,EAAgB,MAAM,KAAK,aAAa,oBAAoB,CAAE,SAAAqC,EAAU,SAAAC,EAAU,GAAGnD,CAAgB,CAAE,EACvGoD,EAAiB,IAAIvB,GAAe,IAAI,eAAiB,EAC/D,cAAO,OAAOuB,EAAgBvC,CAAa,EAC3C,MAAM,KAAK,WAAW,4BAA4BuC,EAAgB1C,CAAY,EACvE0C,CACR,CACD,MAAM,gBAAgB,CACpB,MAAA1X,EACA,iBAAA6Q,CACJ,EAAK,CACD,IAAIjC,EACJ,MAAMO,EAAU,KAAK,QAAQ,OAAO,iBAAiB,EACrD,IAAIhK,EACJ,GAAI,KAAK,SAAS,2BAA6B,OAC7CA,EAAQnF,EAAM,UACT,CACL,MAAM2X,EAAkB,KAAK,SAAS,yBAAyB,MAAM,GAAG,EAExExS,KADyByJ,EAAK5O,EAAM,QAAU,KAAO,OAAS4O,EAAG,MAAM,GAAG,IAAM,CAAA,GACzD,OAAQgJ,GAAMD,EAAgB,SAASC,CAAC,CAAC,EAAE,KAAK,GAAG,CAC3E,CACD,MAAMpjB,EAAS,MAAM,KAAK,aAAa,qBAAqB,CAC1D,cAAewL,EAAM,cACrB,SAAUA,EAAM,SAEhB,MAAAmF,EACA,iBAAA0L,CACN,CAAK,EACKzM,EAAW,IAAI+R,GAAe,IAAI,eAAiB,EACzD,cAAO,OAAO/R,EAAU5P,CAAM,EAC9B2a,EAAQ,MAAM,sBAAuB/K,CAAQ,EAC7C,MAAM,KAAK,WAAW,wBAAwBA,EAAU,CACtD,GAAGpE,EAGH,MAAAmF,CACN,CAAK,EACMf,CACR,CACD,MAAM,qBAAqB,CACzB,MAAApE,EACA,cAAAqW,EACA,UAAAnI,EACA,aAAA6H,EACA,yBAAA7C,EAA2B,KAAK,SAAS,yBACzC,iBAAAtS,EAAmB,KAAK,SAAS,gBAClC,EAAG,GAAI,CACN,MAAMuO,EAAU,KAAK,QAAQ,OAAO,sBAAsB,EACpDjL,EAAM,MAAM,KAAK,gBAAgB,sBAAqB,EAC5D,GAAI,CAACA,EACH,MAAAiL,EAAQ,MAAM,IAAI,MAAM,yBAAyB,CAAC,EAC5C,KAERA,EAAQ,MAAM,gCAAiCjL,CAAG,EAC9C,CAACgK,GAAagF,GAA4B,CAACmD,IAC7CnI,EAAY,KAAK,SAAS,WAE5B,MAAM+I,EAAU,IAAIb,GAAe,CACjC,IAAAlS,EACA,cAAAmS,EACA,UAAAnI,EACA,yBAAAgF,EACA,WAAYlT,EACZ,iBAAAY,EACA,aAAAmV,CACN,CAAK,EACD,MAAM,KAAK,kBACX,MAAM8B,EAAeZ,EAAQ,MAC7B,OAAIY,IACF1I,EAAQ,MAAM,sCAAsC,EACpD,MAAM,KAAK,SAAS,WAAW,IAAI0I,EAAa,GAAIA,EAAa,gBAAe,CAAE,GAE7EZ,CACR,CACD,MAAM,yBAAyB/S,EAAKoT,EAAc,GAAO,CACvD,MAAMnI,EAAU,KAAK,QAAQ,OAAO,0BAA0B,EACxD/K,EAAW,IAAIkS,GAAgBhH,GAAS,WAAWpL,EAAK,KAAK,SAAS,aAAa,CAAC,EAC1F,GAAI,CAACE,EAAS,MAAO,CAEnB,GADA+K,EAAQ,MAAM,sBAAsB,EAChC/K,EAAS,MACX,MAAA+K,EAAQ,KAAK,sBAAuB/K,EAAS,KAAK,EAC5C,IAAIoL,GAAcpL,CAAQ,EAElC,MAAO,CAAE,MAAO,OAAQ,SAAAA,CAAQ,CACjC,CACD,MAAMmT,EAAoB,MAAM,KAAK,SAAS,WAAWD,EAAc,SAAW,KAAK,EAAElT,EAAS,KAAK,EACvG,GAAI,CAACmT,EACH,MAAApI,EAAQ,MAAM,IAAI,MAAM,oCAAoC,CAAC,EACvD,KAGR,MAAO,CAAE,MADKoG,GAAM,kBAAkBgC,CAAiB,EACvC,SAAAnT,EACjB,CACD,MAAM,uBAAuBF,EAAK,CAChC,MAAMiL,EAAU,KAAK,QAAQ,OAAO,wBAAwB,EACtD,CAAE,MAAAnP,EAAO,SAAAoE,GAAa,MAAM,KAAK,yBAAyBF,EAAK,EAAI,EACzE,OAAIlE,GACFmP,EAAQ,MAAM,kDAAkD,EAChE,KAAK,WAAW,wBAAwB/K,EAAUpE,CAAK,GAEvDmP,EAAQ,MAAM,qDAAqD,EAE9D/K,CACR,CACD,iBAAkB,CAChB,YAAK,QAAQ,OAAO,iBAAiB,EAC9BmR,GAAM,gBAAgB,KAAK,SAAS,WAAY,KAAK,SAAS,sBAAsB,CAC5F,CACD,MAAM,YAAYlR,EAAOjF,EAAM,CAC7B,YAAK,QAAQ,OAAO,aAAa,EAC1B,MAAM,KAAK,aAAa,OAAO,CACpC,MAAAiF,EACA,gBAAiBjF,CACvB,CAAK,CACF,CACH,EAGI0Y,GAAiB,KAAM,CACzB,YAAYC,EAAc,CACxB,KAAK,aAAeA,EACpB,KAAK,QAAU,IAAI3K,EAAO,gBAAgB,EAC1C,KAAK,OAAS,MAAOhN,GAAS,CAC5B,MAAMkQ,EAAgBlQ,EAAK,cAC3B,GAAI,CAACkQ,EACH,OAEF,MAAMnB,EAAU,KAAK,QAAQ,OAAO,QAAQ,EAU5C,GATI/O,EAAK,SACP,KAAK,KAAOA,EAAK,QAAQ,IACzB,KAAK,KAAOA,EAAK,QAAQ,IACzB+O,EAAQ,MAAM,gBAAiBmB,EAAe,QAAS,KAAK,IAAI,IAEhE,KAAK,KAAO,OACZ,KAAK,KAAO,OACZnB,EAAQ,MAAM,gBAAiBmB,EAAe,kBAAkB,GAE9D,KAAK,oBAAqB,CAC5B,KAAK,oBAAoB,MAAMA,CAAa,EAC5C,MACD,CACD,GAAI,CACF,MAAMpM,EAAM,MAAM,KAAK,aAAa,gBAAgB,sBAAqB,EACzE,GAAIA,EAAK,CACPiL,EAAQ,MAAM,mCAAmC,EACjD,MAAMjB,EAAY,KAAK,aAAa,SAAS,UACvC8J,EAAoB,KAAK,aAAa,SAAS,8BAC/CC,EAAc,KAAK,aAAa,SAAS,wBACzCC,EAAqB,IAAIlI,GAAmB,KAAK,UAAW9B,EAAWhK,EAAK8T,EAAmBC,CAAW,EAChH,MAAMC,EAAmB,OACzB,KAAK,oBAAsBA,EAC3BA,EAAmB,MAAM5H,CAAa,CAChD,MACUnB,EAAQ,KAAK,+CAA+C,CAE/D,OAAQrO,EAAK,CACZqO,EAAQ,MAAM,oCAAqCrO,aAAe,MAAQA,EAAI,QAAUA,CAAG,CAC5F,CACP,EACI,KAAK,MAAQ,IAAM,CACjB,MAAMqO,EAAU,KAAK,QAAQ,OAAO,OAAO,EAM3C,GALA,KAAK,KAAO,OACZ,KAAK,KAAO,OACR,KAAK,qBACP,KAAK,oBAAoB,OAEvB,KAAK,aAAa,SAAS,wBAAyB,CACtD,MAAMgJ,EAAc,YAAY,SAAY,CAC1C,cAAcA,CAAW,EACzB,GAAI,CACF,MAAMC,EAAU,MAAM,KAAK,aAAa,mBAAkB,EAC1D,GAAIA,EAAS,CACX,MAAMC,EAAU,CACd,cAAeD,EAAQ,cACvB,QAASA,EAAQ,KAAOA,EAAQ,IAAM,CACpC,IAAKA,EAAQ,IACb,IAAKA,EAAQ,GAC/B,EAAoB,IACpB,EACmB,KAAK,OAAOC,CAAO,CACzB,CACF,OAAQvX,EAAK,CACZqO,EAAQ,MAAM,gCAAiCrO,aAAe,MAAQA,EAAI,QAAUA,CAAG,CACxF,CACF,EAAE,GAAG,CACP,CACP,EACI,KAAK,UAAY,SAAY,CAC3B,MAAMqO,EAAU,KAAK,QAAQ,OAAO,WAAW,EAC/C,GAAI,CACF,MAAMiJ,EAAU,MAAM,KAAK,aAAa,mBAAkB,EAC1D,IAAIE,EAAa,GACbF,GAAW,KAAK,oBACdA,EAAQ,MAAQ,KAAK,MACvBE,EAAa,GACb,KAAK,oBAAoB,MAAMF,EAAQ,aAAa,EAChDA,EAAQ,MAAQ,KAAK,KACvBjJ,EAAQ,MAAM,iFAAkFiJ,EAAQ,aAAa,GAErHjJ,EAAQ,MAAM,4GAA6GiJ,EAAQ,aAAa,EAChJ,KAAK,aAAa,OAAO,6BAG3BjJ,EAAQ,MAAM,mCAAoCiJ,EAAQ,GAAG,EAG/DjJ,EAAQ,MAAM,kCAAkC,EAE9CmJ,EACE,KAAK,KACP,KAAK,aAAa,OAAO,sBAEzB,KAAK,aAAa,OAAO,qBAG3BnJ,EAAQ,MAAM,kDAAkD,CAEnE,OAAQrO,EAAK,CACR,KAAK,OACPqO,EAAQ,MAAM,oEAAqErO,CAAG,EACtF,KAAK,aAAa,OAAO,sBAE5B,CACP,EACSiX,GACH,KAAK,QAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAC,EAExD,KAAK,aAAa,OAAO,cAAc,KAAK,MAAM,EAClD,KAAK,aAAa,OAAO,gBAAgB,KAAK,KAAK,EACnD,KAAK,MAAK,EAAG,MAAOjX,GAAQ,CAC1B,KAAK,QAAQ,MAAMA,CAAG,CAC5B,CAAK,CACF,CACD,MAAM,OAAQ,CACZ,KAAK,QAAQ,OAAO,OAAO,EAC3B,MAAMV,EAAO,MAAM,KAAK,aAAa,QAAO,EAC5C,GAAIA,EACG,KAAK,OAAOA,CAAI,UACZ,KAAK,aAAa,SAAS,wBAAyB,CAC7D,MAAMgY,EAAU,MAAM,KAAK,aAAa,mBAAkB,EAC1D,GAAIA,EAAS,CACX,MAAMC,EAAU,CACd,cAAeD,EAAQ,cACvB,QAASA,EAAQ,KAAOA,EAAQ,IAAM,CACpC,IAAKA,EAAQ,IACb,IAAKA,EAAQ,GACzB,EAAc,IACd,EACa,KAAK,OAAOC,CAAO,CACzB,CACF,CACF,CACH,EAGIE,GAAO,KAAM,CACf,YAAYjL,EAAM,CAChB,IAAIsB,EACJ,KAAK,SAAWtB,EAAK,SACrB,KAAK,eAAiBsB,EAAKtB,EAAK,gBAAkB,KAAOsB,EAAK,KAC9D,KAAK,aAAetB,EAAK,aACzB,KAAK,cAAgBA,EAAK,cAC1B,KAAK,WAAaA,EAAK,WACvB,KAAK,MAAQA,EAAK,MAClB,KAAK,QAAUA,EAAK,QACpB,KAAK,WAAaA,EAAK,WACvB,KAAK,MAAQA,EAAK,SACnB,CAED,IAAI,YAAa,CACf,GAAI,KAAK,aAAe,OAGxB,OAAO,KAAK,WAAa0B,EAAM,aAAY,CAC5C,CACD,IAAI,WAAWva,EAAO,CAChBA,IAAU,SACZ,KAAK,WAAa,KAAK,MAAMA,CAAK,EAAIua,EAAM,eAE/C,CAED,IAAI,SAAU,CACZ,MAAMwJ,EAAa,KAAK,WACxB,GAAIA,IAAe,OAGnB,OAAOA,GAAc,CACtB,CAED,IAAI,QAAS,CACX,IAAI5J,EAAIC,EACR,OAAQA,GAAMD,EAAK,KAAK,QAAU,KAAO,OAASA,EAAG,MAAM,GAAG,IAAM,KAAOC,EAAK,CAAA,CACjF,CACD,iBAAkB,CAChB,WAAIzB,EAAO,MAAM,EAAE,OAAO,iBAAiB,EACpC,KAAK,UAAU,CACpB,SAAU,KAAK,SACf,cAAe,KAAK,cACpB,aAAc,KAAK,aACnB,cAAe,KAAK,cACpB,WAAY,KAAK,WACjB,MAAO,KAAK,MACZ,QAAS,KAAK,QACd,WAAY,KAAK,UACvB,CAAK,CACF,CACD,OAAO,kBAAkBoI,EAAe,CACtC,OAAApI,EAAO,aAAa,OAAQ,mBAAmB,EACxC,IAAImL,GAAK,KAAK,MAAM/C,CAAa,CAAC,CAC1C,CACH,EAGIiD,GAAgB,cAChBC,GAAsB,KAAM,CAC9B,aAAc,CACZ,KAAK,OAAS,IAAIrK,GAAM,2BAA2B,EACnD,KAAK,iBAAmC,IAAI,IAC5C,KAAK,QAAU,IAChB,CACD,MAAM,SAAShN,EAAQ,CACrB,MAAM8N,EAAU,KAAK,QAAQ,OAAO,UAAU,EAC9C,GAAI,CAAC,KAAK,QACR,MAAM,IAAI,MAAM,4CAA4C,EAE9DA,EAAQ,MAAM,uBAAuB,EACrC,KAAK,QAAQ,SAAS,QAAQ9N,EAAO,GAAG,EACxC,KAAM,CAAE,IAAA6C,EAAK,SAAAyU,CAAU,EAAG,MAAM,IAAI,QAAQ,CAACxW,EAASC,IAAW,CAC/D,MAAMwW,EAAYxV,GAAM,CACtB,IAAIwL,EACJ,MAAMrW,EAAO6K,EAAE,KACTyV,GAAUjK,EAAKvN,EAAO,eAAiB,KAAOuN,EAAK,OAAO,SAAS,OACzE,GAAI,EAAAxL,EAAE,SAAWyV,IAAWtgB,GAAQ,KAAO,OAASA,EAAK,UAAYkgB,IAGrE,IAAI,CACF,MAAMzY,EAAQsP,GAAS,WAAW/W,EAAK,IAAK8I,EAAO,aAAa,EAAE,IAAI,OAAO,EAI7E,GAHKrB,GACHmP,EAAQ,KAAK,gCAAgC,EAE3C/L,EAAE,SAAW,KAAK,SAAWpD,IAAUqB,EAAO,MAChD,MAEH,MAAa,CACZ,KAAK,SAAQ,EACbe,EAAO,IAAI,MAAM,8BAA8B,CAAC,CACjD,CACDD,EAAQ5J,CAAI,EACpB,EACM,OAAO,iBAAiB,UAAWqgB,EAAU,EAAK,EAClD,KAAK,iBAAiB,IAAI,IAAM,OAAO,oBAAoB,UAAWA,EAAU,EAAK,CAAC,EACtF,KAAK,iBAAiB,IAAI,KAAK,OAAO,WAAYE,GAAW,CAC3D,KAAK,SAAQ,EACb1W,EAAO0W,CAAM,CACd,CAAA,CAAC,CACR,CAAK,EACD,OAAA3J,EAAQ,MAAM,0BAA0B,EACxC,KAAK,SAAQ,EACRwJ,GACH,KAAK,MAAK,EAEL,CAAE,IAAAzU,CAAG,CACb,CACD,UAAW,CACT,KAAK,QAAQ,OAAO,UAAU,EAC9B,UAAW6U,KAAW,KAAK,iBACzBA,IAEF,KAAK,iBAAiB,OACvB,CACD,OAAO,cAAcC,EAAQ9U,EAAKyU,EAAW,GAAOM,EAAe,OAAO,SAAS,OAAQ,CACzFD,EAAO,YAAY,CACjB,OAAQP,GACR,IAAAvU,EACA,SAAAyU,CACD,EAAEM,CAAY,CAChB,CACH,EAGIC,GAA6B,CAC/B,SAAU,GACV,QAAS,GACT,OAAQ,GACV,EACIC,GAAqB,SACrBC,GAAsD,GACtDC,GAAuC,EACvCC,GAAuC,GACvCC,GAA2B,cAAc3G,EAAwB,CACnE,YAAYtF,EAAM,CAChB,KAAM,CACJ,mBAAAkM,EAAqBlM,EAAK,aAC1B,+BAAAmM,EAAiCnM,EAAK,yBACtC,oBAAAoM,EAAsBR,GACtB,kBAAAS,EAAoBR,GACpB,eAAAS,EAAiB,SACjB,eAAAC,EAAiB,OACjB,yBAAAC,EAA2BxM,EAAK,yBAChC,mBAAAyM,EAAqBzM,EAAK,mBAC1B,oBAAA0M,EAAsB1M,EAAK,aAC3B,8BAAA2M,EAAgCX,GAChC,qBAAAY,EAAuB,GACvB,yBAAAC,EAA2B,GAC3B,4BAAAC,EAA8B,GAC9B,eAAAC,EAAiB,GACjB,wBAAAC,EAA0B,GAC1B,8BAAAC,EAAgClB,GAChC,2BAAAmB,EAA6B,OAC7B,wBAAAC,EAA0B,GAC1B,iBAAAC,EAAmB,CAAC,eAAgB,eAAe,EACnD,sBAAAC,EAAwB,GACxB,8BAAAC,EAAgC,GAChC,6CAAAC,EAA+CzB,GAC/C,UAAA0B,CACD,EAAGxN,EAwBJ,GAvBA,MAAMA,CAAI,EACV,KAAK,mBAAqBkM,EAC1B,KAAK,+BAAiCC,EACtC,KAAK,oBAAsBC,EAC3B,KAAK,kBAAoBC,EACzB,KAAK,eAAiBC,EACtB,KAAK,eAAiBC,EACtB,KAAK,yBAA2BC,EAChC,KAAK,mBAAqBC,EAC1B,KAAK,oBAAsBC,EAC3B,KAAK,8BAAgCC,EACrC,KAAK,qBAAuBC,EAC5B,KAAK,yBAA2BC,EAChC,KAAK,4BAA8BC,EACnC,KAAK,eAAiBC,EACtB,KAAK,wBAA0BC,EAC/B,KAAK,8BAAgCC,EACrC,KAAK,wBAA0BE,EAC/B,KAAK,2BAA6BD,EAClC,KAAK,iBAAmBE,EACxB,KAAK,sBAAwBC,EAC7B,KAAK,8BAAgCC,EACrC,KAAK,6CAA+CC,EAChDC,EACF,KAAK,UAAYA,MACZ,CACL,MAAM1I,EAAQ,OAAO,OAAW,IAAc,OAAO,eAAiB,IAAI5B,GAC1E,KAAK,UAAY,IAAI2B,GAAqB,CAAE,MAAAC,CAAO,CAAA,CACpD,CACF,CACH,EAGI2I,GAAe,cAAcrC,EAAoB,CACnD,YAAY,CACV,8BAAAuB,EAAgCX,EACpC,EAAK,CACD,QACA,KAAK,QAAU,IAAIlM,EAAO,cAAc,EACxC,KAAK,kBAAoB6M,EACzB,KAAK,OAASc,GAAa,qBAC3B,KAAK,QAAU,KAAK,OAAO,aAC5B,CACD,OAAO,oBAAqB,CAC1B,MAAMC,EAAS,OAAO,SAAS,cAAc,QAAQ,EACrD,OAAAA,EAAO,MAAM,WAAa,SAC1BA,EAAO,MAAM,SAAW,QACxBA,EAAO,MAAM,KAAO,UACpBA,EAAO,MAAM,IAAM,IACnBA,EAAO,MAAQ,IACfA,EAAO,OAAS,IAChB,OAAO,SAAS,KAAK,YAAYA,CAAM,EAChCA,CACR,CACD,MAAM,SAAS3Z,EAAQ,CACrB,KAAK,QAAQ,MAAM,8BAA+B,KAAK,iBAAiB,EACxE,MAAMiB,EAAQ,WAAW,IAAM,KAAK,OAAO,MAAM,IAAIoN,GAAa,qCAAqC,CAAC,EAAG,KAAK,kBAAoB,GAAG,EACvI,YAAK,iBAAiB,IAAI,IAAM,aAAapN,CAAK,CAAC,EAC5C,MAAM,MAAM,SAASjB,CAAM,CACnC,CACD,OAAQ,CACN,IAAIuN,EACA,KAAK,SACH,KAAK,OAAO,aACd,KAAK,OAAO,iBAAiB,OAASL,GAAO,CAC3C,IAAI0M,EACJ,MAAMC,EAAQ3M,EAAG,QAChB0M,EAAMC,EAAM,aAAe,MAAgBD,EAAI,YAAYC,CAAK,EACjE,KAAK,OAAO,MAAM,IAAI,MAAM,yBAAyB,CAAC,CACvD,EAAE,EAAI,GACNtM,EAAK,KAAK,OAAO,gBAAkB,MAAgBA,EAAG,SAAS,QAAQ,aAAa,GAEvF,KAAK,OAAS,MAEhB,KAAK,QAAU,IAChB,CACD,OAAO,aAAa1K,EAAK+U,EAAc,CACrC,OAAO,MAAM,cAAc,OAAO,OAAQ/U,EAAK,GAAO+U,CAAY,CACnE,CACH,EAGIkC,GAAkB,KAAM,CAC1B,YAAYrJ,EAAW,CACrB,KAAK,UAAYA,EACjB,KAAK,QAAU,IAAI1E,EAAO,iBAAiB,CAC5C,CACD,MAAM,QAAQ,CACZ,8BAAA6M,EAAgC,KAAK,UAAU,6BACnD,EAAK,CACD,OAAO,IAAIc,GAAa,CAAE,8BAAAd,CAA6B,CAAE,CAC1D,CACD,MAAM,SAAS/V,EAAK,CAClB,KAAK,QAAQ,OAAO,UAAU,EAC9B6W,GAAa,aAAa7W,EAAK,KAAK,UAAU,wBAAwB,CACvE,CACH,EAGIkX,GAA8B,IAC9BC,GAAc,cAAc3C,EAAoB,CAClD,YAAY,CACV,kBAAAiB,EAAoBR,GACpB,oBAAAO,EAAsB,CAAE,CAC5B,EAAK,CACD,QACA,KAAK,QAAU,IAAItM,EAAO,aAAa,EACvC,MAAMkO,EAAgB5M,GAAW,OAAO,CAAE,GAAGwK,GAA4B,GAAGQ,CAAmB,CAAE,EACjG,KAAK,QAAU,OAAO,KAAK,OAAQC,EAAmBjL,GAAW,UAAU4M,CAAa,CAAC,CAC1F,CACD,MAAM,SAASja,EAAQ,CACrB,IAAIuN,GACHA,EAAK,KAAK,UAAY,MAAgBA,EAAG,QAC1C,MAAM2M,EAAsB,YAAY,IAAM,EACxC,CAAC,KAAK,SAAW,KAAK,QAAQ,SAChC,KAAK,OAAO,MAAM,IAAI,MAAM,sBAAsB,CAAC,CAEtD,EAAEH,EAA2B,EAC9B,YAAK,iBAAiB,IAAI,IAAM,cAAcG,CAAmB,CAAC,EAC3D,MAAM,MAAM,SAASla,CAAM,CACnC,CACD,OAAQ,CACF,KAAK,UACF,KAAK,QAAQ,SAChB,KAAK,QAAQ,QACb,KAAK,OAAO,MAAM,IAAI,MAAM,cAAc,CAAC,IAG/C,KAAK,QAAU,IAChB,CACD,OAAO,aAAa6C,EAAKyU,EAAU,CACjC,GAAI,CAAC,OAAO,OACV,MAAM,IAAI,MAAM,gDAAgD,EAElE,OAAO,MAAM,cAAc,OAAO,OAAQzU,EAAKyU,CAAQ,CACxD,CACH,EAGI6C,GAAiB,KAAM,CACzB,YAAY1J,EAAW,CACrB,KAAK,UAAYA,EACjB,KAAK,QAAU,IAAI1E,EAAO,gBAAgB,CAC3C,CACD,MAAM,QAAQ,CACZ,oBAAAsM,EAAsB,KAAK,UAAU,oBACrC,kBAAAC,EAAoB,KAAK,UAAU,iBACvC,EAAK,CACD,OAAO,IAAI0B,GAAY,CAAE,oBAAA3B,EAAqB,kBAAAC,CAAmB,CAAA,CAClE,CACD,MAAM,SAASzV,EAAKyU,EAAW,GAAO,CACpC,KAAK,QAAQ,OAAO,UAAU,EAC9B0C,GAAY,aAAanX,EAAKyU,CAAQ,CACvC,CACH,EAGI8C,GAAoB,KAAM,CAC5B,YAAY3J,EAAW,CACrB,KAAK,UAAYA,EACjB,KAAK,QAAU,IAAI1E,EAAO,mBAAmB,CAC9C,CACD,MAAM,QAAQ,CACZ,eAAAwM,EAAiB,KAAK,UAAU,eAChC,eAAAC,EAAiB,KAAK,UAAU,cACpC,EAAK,CACD,IAAIjL,EACJ,KAAK,QAAQ,OAAO,SAAS,EAC7B,IAAI8M,EAAe,OAAO,KACtB7B,IAAmB,QACrB6B,GAAgB9M,EAAK,OAAO,MAAQ,KAAOA,EAAK,OAAO,MAEzD,MAAMlO,EAAWgb,EAAa,SAAS9B,CAAc,EAAE,KAAK8B,EAAa,QAAQ,EACjF,IAAIC,EACJ,MAAO,CACL,SAAU,MAAOta,GAAW,CAC1B,KAAK,QAAQ,OAAO,UAAU,EAC9B,MAAMua,EAAU,IAAI,QAAQ,CAACzZ,EAASC,IAAW,CAC/CuZ,EAAQvZ,CAClB,CAAS,EACD,OAAA1B,EAASW,EAAO,GAAG,EACZ,MAAMua,CACd,EACD,MAAO,IAAM,CACX,KAAK,QAAQ,OAAO,OAAO,EAC3BD,GAAS,MAAgBA,EAAM,IAAI,MAAM,kBAAkB,CAAC,EAC5DD,EAAa,KAAI,CAClB,CACP,CACG,CACH,EAGIG,GAAoB,cAAclM,EAAkB,CACtD,YAAY9P,EAAU,CACpB,MAAM,CAAE,kCAAmCA,EAAS,4CAA8C,CAAA,EAClG,KAAK,QAAU,IAAIuN,EAAO,mBAAmB,EAC7C,KAAK,YAAc,IAAIiB,GAAM,aAAa,EAC1C,KAAK,cAAgB,IAAIA,GAAM,eAAe,EAC9C,KAAK,kBAAoB,IAAIA,GAAM,oBAAoB,EACvD,KAAK,cAAgB,IAAIA,GAAM,gBAAgB,EAC/C,KAAK,eAAiB,IAAIA,GAAM,iBAAiB,EACjD,KAAK,oBAAsB,IAAIA,GAAM,sBAAsB,CAC5D,CACD,KAAKjO,EAAMkY,EAAa,GAAM,CAC5B,MAAM,KAAKlY,CAAI,EACXkY,GACF,KAAK,YAAY,MAAMlY,CAAI,CAE9B,CACD,QAAS,CACP,MAAM,OAAM,EACZ,KAAK,cAAc,OACpB,CAID,cAAc2B,EAAI,CAChB,OAAO,KAAK,YAAY,WAAWA,CAAE,CACtC,CAID,iBAAiBA,EAAI,CACnB,OAAO,KAAK,YAAY,cAAcA,CAAE,CACzC,CAID,gBAAgBA,EAAI,CAClB,OAAO,KAAK,cAAc,WAAWA,CAAE,CACxC,CAID,mBAAmBA,EAAI,CACrB,OAAO,KAAK,cAAc,cAAcA,CAAE,CAC3C,CAID,oBAAoBA,EAAI,CACtB,OAAO,KAAK,kBAAkB,WAAWA,CAAE,CAC5C,CAID,uBAAuBA,EAAI,CACzB,OAAO,KAAK,kBAAkB,cAAcA,CAAE,CAC/C,CAID,uBAAuB,EAAG,CACxB,KAAK,kBAAkB,MAAM,CAAC,CAC/B,CAKD,gBAAgBA,EAAI,CAClB,OAAO,KAAK,cAAc,WAAWA,CAAE,CACxC,CAID,mBAAmBA,EAAI,CACrB,KAAK,cAAc,cAAcA,CAAE,CACpC,CAID,oBAAqB,CACnB,KAAK,cAAc,OACpB,CAKD,iBAAiBA,EAAI,CACnB,OAAO,KAAK,eAAe,WAAWA,CAAE,CACzC,CAID,oBAAoBA,EAAI,CACtB,KAAK,eAAe,cAAcA,CAAE,CACrC,CAID,qBAAsB,CACpB,KAAK,eAAe,OACrB,CAKD,sBAAsBA,EAAI,CACxB,OAAO,KAAK,oBAAoB,WAAWA,CAAE,CAC9C,CAID,yBAAyBA,EAAI,CAC3B,KAAK,oBAAoB,cAAcA,CAAE,CAC1C,CAID,0BAA2B,CACzB,KAAK,oBAAoB,OAC1B,CACH,EAGI+Z,GAAqB,KAAM,CAC7B,YAAY/D,EAAc,CACxB,KAAK,aAAeA,EACpB,KAAK,QAAU,IAAI3K,EAAO,oBAAoB,EAC9C,KAAK,WAAa,GAClB,KAAK,YAAc,IAAI4B,EAAM,oBAAoB,EACjD,KAAK,eAAiB,SAAY,CAChC,MAAMG,EAAU,KAAK,QAAQ,OAAO,gBAAgB,EACpD,GAAI,CACF,MAAM,KAAK,aAAa,eACxBA,EAAQ,MAAM,iCAAiC,CAChD,OAAQrO,EAAK,CACZ,GAAIA,aAAe4O,GAAc,CAC/BP,EAAQ,KAAK,kCAAmCrO,EAAK,aAAa,EAClE,KAAK,YAAY,KAAK,CAAC,EACvB,MACD,CACDqO,EAAQ,MAAM,2BAA4BrO,CAAG,EAC7C,KAAK,aAAa,OAAO,uBAAuBA,CAAG,CACpD,CACP,CACG,CACD,MAAM,OAAQ,CACZ,MAAMqO,EAAU,KAAK,QAAQ,OAAO,OAAO,EAC3C,GAAI,CAAC,KAAK,WAAY,CACpB,KAAK,WAAa,GAClB,KAAK,aAAa,OAAO,uBAAuB,KAAK,cAAc,EACnE,KAAK,YAAY,WAAW,KAAK,cAAc,EAC/C,GAAI,CACF,MAAM,KAAK,aAAa,SACzB,OAAQrO,EAAK,CACZqO,EAAQ,MAAM,gBAAiBrO,CAAG,CACnC,CACF,CACF,CACD,MAAO,CACD,KAAK,aACP,KAAK,YAAY,SACjB,KAAK,YAAY,cAAc,KAAK,cAAc,EAClD,KAAK,aAAa,OAAO,0BAA0B,KAAK,cAAc,EACtE,KAAK,WAAa,GAErB,CACH,EAGIib,GAAe,KAAM,CACvB,YAAYzO,EAAMmG,EAAU,CAC1B,KAAK,cAAgBnG,EAAK,cAC1B,KAAK,SAAWA,EAAK,SACrB,KAAK,cAAgBA,EAAK,cAC1B,KAAK,MAAQA,EAAK,MAClB,KAAK,QAAUA,EAAK,QACpB,KAAK,SAAWmG,EAChB,KAAK,KAAOnG,EAAK,KAClB,CACH,EAGI0O,GAAc,KAAM,CACtB,YAAYnc,EAAU,CACpB,KAAK,QAAU,IAAIuN,EAAO,aAAa,EACvC,KAAK,SAAW,IAAImM,GAAyB1Z,CAAQ,EACrD,KAAK,QAAU,IAAIkX,GAAWlX,CAAQ,EACtC,KAAK,mBAAqB,IAAI4b,GAAkB,KAAK,QAAQ,EAC7D,KAAK,gBAAkB,IAAID,GAAe,KAAK,QAAQ,EACvD,KAAK,iBAAmB,IAAIL,GAAgB,KAAK,QAAQ,EACzD,KAAK,QAAU,IAAIU,GAAkB,KAAK,QAAQ,EAClD,KAAK,oBAAsB,IAAIC,GAAmB,IAAI,EAClD,KAAK,SAAS,sBAChB,KAAK,iBAAgB,EAEvB,KAAK,gBAAkB,KACnB,KAAK,SAAS,iBAChB,KAAK,gBAAkB,IAAIhE,GAAe,IAAI,EAEjD,CAED,IAAI,QAAS,CACX,OAAO,KAAK,OACb,CAED,IAAI,iBAAkB,CACpB,OAAO,KAAK,QAAQ,eACrB,CAID,MAAM,SAAU,CACd,MAAM3I,EAAU,KAAK,QAAQ,OAAO,SAAS,EACvC/O,EAAO,MAAM,KAAK,YACxB,OAAIA,GACF+O,EAAQ,KAAK,aAAa,EAC1B,KAAK,QAAQ,KAAK/O,EAAM,EAAK,EACtBA,IAET+O,EAAQ,KAAK,2BAA2B,EACjC,KACR,CAID,MAAM,YAAa,CACjB,MAAMA,EAAU,KAAK,QAAQ,OAAO,YAAY,EAChD,MAAM,KAAK,UAAU,IAAI,EACzBA,EAAQ,KAAK,2BAA2B,EACxC,KAAK,QAAQ,QACd,CAID,MAAM,eAAe7B,EAAO,GAAI,CAC9B,KAAK,QAAQ,OAAO,gBAAgB,EACpC,KAAM,CACJ,eAAAsM,EACA,GAAGqC,CACJ,EAAG3O,EACE4O,EAAS,MAAM,KAAK,mBAAmB,QAAQ,CAAE,eAAAtC,CAAc,CAAE,EACvE,MAAM,KAAK,aAAa,CACtB,aAAc,OACd,GAAGqC,CACJ,EAAEC,CAAM,CACV,CAID,MAAM,uBAAuBhY,EAAM,OAAO,SAAS,KAAM,CACvD,MAAMiL,EAAU,KAAK,QAAQ,OAAO,wBAAwB,EACtD/O,EAAO,MAAM,KAAK,WAAW8D,CAAG,EACtC,OAAI9D,EAAK,SAAWA,EAAK,QAAQ,IAC/B+O,EAAQ,KAAK,6BAA8B/O,EAAK,QAAQ,GAAG,EAE3D+O,EAAQ,KAAK,YAAY,EAEpB/O,CACR,CAMD,MAAM,+BAA+B,CACnC,SAAAoX,EACA,SAAAC,EACA,aAAAzC,EAAe,EACnB,EAAK,CACD,MAAM7F,EAAU,KAAK,QAAQ,OAAO,+BAA+B,EAC7DuI,EAAiB,MAAM,KAAK,QAAQ,wCAAwC,CAAE,SAAAF,EAAU,SAAAC,EAAU,aAAAzC,EAAc,iBAAkB,KAAK,SAAS,gBAAkB,CAAA,EACxK7F,EAAQ,MAAM,qBAAqB,EACnC,MAAM/O,EAAO,MAAM,KAAK,WAAWsX,CAAc,EACjD,OAAItX,EAAK,SAAWA,EAAK,QAAQ,IAC/B+O,EAAQ,KAAK,6BAA8B/O,EAAK,QAAQ,GAAG,EAE3D+O,EAAQ,KAAK,YAAY,EAEpB/O,CACR,CAID,MAAM,YAAYkN,EAAO,GAAI,CAC3B,MAAM6B,EAAU,KAAK,QAAQ,OAAO,aAAa,EAC3C,CACJ,oBAAAuK,EACA,kBAAAC,EACA,GAAGsC,CACJ,EAAG3O,EACEpJ,EAAM,KAAK,SAAS,mBACrBA,GACHiL,EAAQ,MAAM,IAAI,MAAM,kCAAkC,CAAC,EAE7D,MAAM+M,EAAS,MAAM,KAAK,gBAAgB,QAAQ,CAAE,oBAAAxC,EAAqB,kBAAAC,CAAiB,CAAE,EACtFvZ,EAAO,MAAM,KAAK,QAAQ,CAC9B,aAAc,OACd,aAAc8D,EACd,QAAS,QACT,GAAG+X,CACJ,EAAEC,CAAM,EACT,OAAI9b,IACEA,EAAK,SAAWA,EAAK,QAAQ,IAC/B+O,EAAQ,KAAK,6BAA8B/O,EAAK,QAAQ,GAAG,EAE3D+O,EAAQ,KAAK,YAAY,GAGtB/O,CACR,CAID,MAAM,oBAAoB8D,EAAM,OAAO,SAAS,KAAMyU,EAAW,GAAO,CACtE,MAAMxJ,EAAU,KAAK,QAAQ,OAAO,qBAAqB,EACzD,MAAM,KAAK,gBAAgB,SAASjL,EAAKyU,CAAQ,EACjDxJ,EAAQ,KAAK,SAAS,CACvB,CAKD,MAAM,aAAa7B,EAAO,GAAI,CAC5B,IAAIsB,EACJ,MAAMO,EAAU,KAAK,QAAQ,OAAO,cAAc,EAC5C,CACJ,8BAAA8K,EACA,SAAAxG,EACA,GAAGwI,CACJ,EAAG3O,EACJ,IAAIlN,EAAO,MAAM,KAAK,YACtB,GAAIA,GAAQ,MAAgBA,EAAK,cAAe,CAC9C+O,EAAQ,MAAM,qBAAqB,EACnC,MAAMnP,EAAQ,IAAI+b,GAAa3b,EAAMqT,CAAQ,EAC7C,OAAO,MAAM,KAAK,iBAAiBzT,CAAK,CACzC,CACD,MAAMkE,EAAM,KAAK,SAAS,oBACrBA,GACHiL,EAAQ,MAAM,IAAI,MAAM,mCAAmC,CAAC,EAE9D,IAAIgN,EACA/b,GAAQ,KAAK,SAAS,2BACxB+O,EAAQ,MAAM,iCAAkC/O,EAAK,QAAQ,GAAG,EAChE+b,EAAY/b,EAAK,QAAQ,KAE3B,MAAM8b,EAAS,MAAM,KAAK,iBAAiB,QAAQ,CAAE,8BAAAjC,CAA6B,CAAE,EACpF,OAAA7Z,EAAO,MAAM,KAAK,QAAQ,CACxB,aAAc,OACd,aAAc8D,EACd,OAAQ,OACR,cAAe,KAAK,SAAS,4BAA8B9D,GAAQ,KAAO,OAASA,EAAK,SAAW,OACnG,GAAG6b,CACT,EAAOC,EAAQC,CAAS,EAChB/b,KACGwO,EAAKxO,EAAK,UAAY,MAAgBwO,EAAG,IAC5CO,EAAQ,KAAK,6BAA8B/O,EAAK,QAAQ,GAAG,EAE3D+O,EAAQ,KAAK,YAAY,GAGtB/O,CACR,CACD,MAAM,iBAAiBJ,EAAO,CAC5B,MAAMoE,EAAW,MAAM,KAAK,QAAQ,gBAAgB,CAClD,MAAApE,EACA,iBAAkB,KAAK,SAAS,6BACtC,CAAK,EACKI,EAAO,IAAImY,GAAK,CAAE,GAAGvY,EAAO,GAAGoE,CAAQ,CAAE,EAC/C,aAAM,KAAK,UAAUhE,CAAI,EACzB,KAAK,QAAQ,KAAKA,CAAI,EACfA,CACR,CAID,MAAM,qBAAqB8D,EAAM,OAAO,SAAS,KAAM,CACrD,MAAMiL,EAAU,KAAK,QAAQ,OAAO,sBAAsB,EAC1D,MAAM,KAAK,iBAAiB,SAASjL,CAAG,EACxCiL,EAAQ,KAAK,SAAS,CACvB,CACD,MAAM,eAAejL,EAAM,OAAO,SAAS,KAAM,CAC/C,KAAM,CAAE,MAAAlE,CAAK,EAAK,MAAM,KAAK,QAAQ,wBAAwBkE,CAAG,EAChE,OAAQlE,EAAM,aAAY,CACxB,IAAK,OACH,OAAO,MAAM,KAAK,uBAAuBkE,CAAG,EAC9C,IAAK,OACH,OAAO,MAAM,KAAK,oBAAoBA,CAAG,EAC3C,IAAK,OACH,OAAO,MAAM,KAAK,qBAAqBA,CAAG,EAC5C,QACE,MAAM,IAAI,MAAM,gCAAgC,CACnD,CACF,CACD,MAAM,gBAAgBA,EAAM,OAAO,SAAS,KAAMyU,EAAW,GAAO,CAClE,KAAM,CAAE,MAAA3Y,CAAK,EAAK,MAAM,KAAK,QAAQ,yBAAyBkE,CAAG,EACjE,GAAKlE,EAGL,OAAQA,EAAM,aAAY,CACxB,IAAK,OACH,MAAM,KAAK,wBAAwBkE,CAAG,EACtC,MACF,IAAK,OACH,MAAM,KAAK,qBAAqBA,EAAKyU,CAAQ,EAC7C,MACF,IAAK,OACH,MAAM,KAAK,sBAAsBzU,CAAG,EACpC,MACF,QACE,MAAM,IAAI,MAAM,gCAAgC,CACnD,CACF,CAID,MAAM,mBAAmBoJ,EAAO,GAAI,CAClC,MAAM6B,EAAU,KAAK,QAAQ,OAAO,oBAAoB,EAClD,CACJ,8BAAA8K,EACA,GAAGgC,CACJ,EAAG3O,EACEpJ,EAAM,KAAK,SAAS,oBACrBA,GACHiL,EAAQ,MAAM,IAAI,MAAM,mCAAmC,CAAC,EAE9D,MAAM/O,EAAO,MAAM,KAAK,YAClB8b,EAAS,MAAM,KAAK,iBAAiB,QAAQ,CAAE,8BAAAjC,CAA6B,CAAE,EAC9EmC,EAAc,MAAM,KAAK,aAAa,CAC1C,aAAc,OAEd,aAAclY,EACd,OAAQ,OACR,cAAe,KAAK,SAAS,4BAA8B9D,GAAQ,KAAO,OAASA,EAAK,SAAW,OACnG,cAAe,KAAK,SAAS,2BAC7B,MAAO,SACP,aAAc,GACd,GAAG6b,CACJ,EAAEC,CAAM,EACT,GAAI,CACF,MAAMxE,EAAiB,MAAM,KAAK,QAAQ,sBAAsB0E,EAAY,GAAG,EAE/E,OADAjN,EAAQ,MAAM,qBAAqB,EAC/BuI,EAAe,eAAiBA,EAAe,QAAQ,KACzDvI,EAAQ,KAAK,sBAAuBuI,EAAe,QAAQ,GAAG,EACvD,CACL,cAAeA,EAAe,cAC9B,IAAKA,EAAe,QAAQ,IAC5B,IAAKA,EAAe,QAAQ,GACtC,IAEMvI,EAAQ,KAAK,iCAAiC,EACvC,KACR,OAAQrO,EAAK,CACZ,GAAI,KAAK,SAAS,yBAA2BA,aAAe0O,GAC1D,OAAQ1O,EAAI,MAAK,CACf,IAAK,iBACL,IAAK,mBACL,IAAK,uBACL,IAAK,6BACH,OAAAqO,EAAQ,KAAK,4BAA4B,EAClC,CAEL,cAAerO,EAAI,aACjC,CACS,CAEH,MAAMA,CACP,CACF,CACD,MAAM,QAAQwM,EAAM4O,EAAQC,EAAW,CACrC,MAAMC,EAAc,MAAM,KAAK,aAAa9O,EAAM4O,CAAM,EACxD,OAAO,MAAM,KAAK,WAAWE,EAAY,IAAKD,CAAS,CACxD,CACD,MAAM,aAAa7O,EAAM4O,EAAQ,CAC/B,MAAM/M,EAAU,KAAK,QAAQ,OAAO,cAAc,EAClD,GAAI,CACF,MAAMiI,EAAgB,MAAM,KAAK,QAAQ,oBAAoB9J,CAAI,EACjE,OAAA6B,EAAQ,MAAM,oBAAoB,EAC3B,MAAM+M,EAAO,SAAS,CAC3B,IAAK9E,EAAc,IACnB,MAAOA,EAAc,MAAM,GAC3B,cAAeA,EAAc,MAAM,cACnC,aAAc,KAAK,SAAS,kBACpC,CAAO,CACF,OAAQtW,EAAK,CACZ,MAAAqO,EAAQ,MAAM,2DAA2D,EACzE+M,EAAO,MAAK,EACNpb,CACP,CACF,CACD,MAAM,WAAWoD,EAAKiY,EAAW,CAC/B,MAAMhN,EAAU,KAAK,QAAQ,OAAO,YAAY,EAC1CuI,EAAiB,MAAM,KAAK,QAAQ,sBAAsBxT,CAAG,EACnE,OAAAiL,EAAQ,MAAM,qBAAqB,EACtB,MAAM,KAAK,WAAWuI,EAAgByE,CAAS,CAE7D,CACD,MAAM,WAAWzE,EAAgByE,EAAW,CAC1C,MAAMhN,EAAU,KAAK,QAAQ,OAAO,YAAY,EAC1C/O,EAAO,IAAImY,GAAKb,CAAc,EACpC,GAAIyE,EAAW,CACb,GAAIA,IAAc/b,EAAK,QAAQ,IAC7B,MAAA+O,EAAQ,MAAM,0EAA2E/O,EAAK,QAAQ,GAAG,EACnG,IAAIoP,GAAc,CAAE,GAAGkI,EAAgB,MAAO,gBAAgB,CAAE,EAExEvI,EAAQ,MAAM,gDAAgD,CAC/D,CACD,aAAM,KAAK,UAAU/O,CAAI,EACzB+O,EAAQ,MAAM,aAAa,EAC3B,KAAK,QAAQ,KAAK/O,CAAI,EACfA,CACR,CAID,MAAM,gBAAgBkN,EAAO,GAAI,CAC/B,MAAM6B,EAAU,KAAK,QAAQ,OAAO,iBAAiB,EAC/C,CACJ,eAAAyK,EACA,GAAGqC,CACJ,EAAG3O,EACE4O,EAAS,MAAM,KAAK,mBAAmB,QAAQ,CAAE,eAAAtC,CAAc,CAAE,EACvE,MAAM,KAAK,cAAc,CACvB,aAAc,OACd,yBAA0B,KAAK,SAAS,yBACxC,GAAGqC,CACJ,EAAEC,CAAM,EACT/M,EAAQ,KAAK,SAAS,CACvB,CAID,MAAM,wBAAwBjL,EAAM,OAAO,SAAS,KAAM,CACxD,MAAMiL,EAAU,KAAK,QAAQ,OAAO,yBAAyB,EACvD/K,EAAW,MAAM,KAAK,YAAYF,CAAG,EAC3C,OAAAiL,EAAQ,KAAK,SAAS,EACf/K,CACR,CAID,MAAM,aAAakJ,EAAO,GAAI,CAC5B,MAAM6B,EAAU,KAAK,QAAQ,OAAO,cAAc,EAC5C,CACJ,oBAAAuK,EACA,kBAAAC,EACA,GAAGsC,CACJ,EAAG3O,EACEpJ,EAAM,KAAK,SAAS,+BACpBgY,EAAS,MAAM,KAAK,gBAAgB,QAAQ,CAAE,oBAAAxC,EAAqB,kBAAAC,CAAiB,CAAE,EAC5F,MAAM,KAAK,SAAS,CAClB,aAAc,OACd,yBAA0BzV,EAM1B,MAAOA,GAAO,KAAO,OAAS,CAAE,EAChC,GAAG+X,CACJ,EAAEC,CAAM,EACT/M,EAAQ,KAAK,SAAS,CACvB,CAID,MAAM,qBAAqBjL,EAAM,OAAO,SAAS,KAAMyU,EAAW,GAAO,CACvE,MAAMxJ,EAAU,KAAK,QAAQ,OAAO,sBAAsB,EAC1D,MAAM,KAAK,gBAAgB,SAASjL,EAAKyU,CAAQ,EACjDxJ,EAAQ,KAAK,SAAS,CACvB,CACD,MAAM,SAAS7B,EAAM4O,EAAQ,CAC3B,MAAME,EAAc,MAAM,KAAK,cAAc9O,EAAM4O,CAAM,EACzD,OAAO,MAAM,KAAK,YAAYE,EAAY,GAAG,CAC9C,CACD,MAAM,cAAc9O,EAAO,CAAE,EAAE4O,EAAQ,CACrC,IAAItN,EACJ,MAAMO,EAAU,KAAK,QAAQ,OAAO,eAAe,EACnD,GAAI,CACF,MAAM/O,EAAO,MAAM,KAAK,YACxB+O,EAAQ,MAAM,kCAAkC,EAC5C,KAAK,SAAS,uBAChB,MAAM,KAAK,gBAAgB/O,CAAI,EAEjC,MAAMic,EAAW/O,EAAK,eAAiBlN,GAAQA,EAAK,SAChDic,IACFlN,EAAQ,MAAM,0CAA0C,EACxD7B,EAAK,cAAgB+O,GAEvB,MAAM,KAAK,aACXlN,EAAQ,MAAM,wCAAwC,EACtD,MAAMmN,EAAiB,MAAM,KAAK,QAAQ,qBAAqBhP,CAAI,EACnE,OAAA6B,EAAQ,MAAM,qBAAqB,EAC5B,MAAM+M,EAAO,SAAS,CAC3B,IAAKI,EAAe,IACpB,OAAQ1N,EAAK0N,EAAe,QAAU,KAAO,OAAS1N,EAAG,EACjE,CAAO,CACF,OAAQ9N,EAAK,CACZ,MAAAqO,EAAQ,MAAM,2DAA2D,EACzE+M,EAAO,MAAK,EACNpb,CACP,CACF,CACD,MAAM,YAAYoD,EAAK,CACrB,MAAMiL,EAAU,KAAK,QAAQ,OAAO,aAAa,EAC3CoN,EAAkB,MAAM,KAAK,QAAQ,uBAAuBrY,CAAG,EACrE,OAAAiL,EAAQ,MAAM,sBAAsB,EAC7BoN,CACR,CAID,MAAM,cAAcjP,EAAO,GAAI,CAC7B,IAAIsB,EACJ,MAAMO,EAAU,KAAK,QAAQ,OAAO,eAAe,EAC7C,CACJ,8BAAA8K,EACA,GAAGgC,CACJ,EAAG3O,EACE+I,EAAgB,KAAK,SAAS,+BAAiCzH,EAAK,MAAM,KAAK,UAAW,IAAK,KAAO,OAASA,EAAG,SAAW,OAC7H1K,EAAM,KAAK,SAAS,+BACpBgY,EAAS,MAAM,KAAK,iBAAiB,QAAQ,CAAE,8BAAAjC,CAA6B,CAAE,EACpF,MAAM,KAAK,SAAS,CAClB,aAAc,OACd,yBAA0B/V,EAC1B,cAAAmS,EACA,GAAG4F,CACJ,EAAEC,CAAM,EACT/M,EAAQ,KAAK,SAAS,CACvB,CAID,MAAM,sBAAsBjL,EAAM,OAAO,SAAS,KAAM,CACtD,MAAMiL,EAAU,KAAK,QAAQ,OAAO,uBAAuB,EAC3D,MAAM,KAAK,iBAAiB,SAASjL,CAAG,EACxCiL,EAAQ,KAAK,SAAS,CACvB,CACD,MAAM,aAAaqN,EAAO,CACxB,MAAMpc,EAAO,MAAM,KAAK,YACxB,MAAM,KAAK,gBAAgBA,EAAMoc,CAAK,CACvC,CACD,MAAM,gBAAgBpc,EAAMoc,EAAQ,KAAK,SAAS,iBAAkB,CAClE,MAAMrN,EAAU,KAAK,QAAQ,OAAO,iBAAiB,EACrD,GAAI,CAAC/O,EACH,OACF,MAAMqc,EAAeD,EAAM,OAAQpd,GAAS,OAAOgB,EAAKhB,CAAI,GAAM,QAAQ,EAC1E,GAAI,CAACqd,EAAa,OAAQ,CACxBtN,EAAQ,MAAM,sCAAsC,EACpD,MACD,CACD,UAAW/P,KAAQqd,EACjB,MAAM,KAAK,QAAQ,YACjBrc,EAAKhB,CAAI,EAETA,CACR,EACM+P,EAAQ,KAAK,GAAG/P,CAAI,uBAAuB,EACvCA,IAAS,iBACXgB,EAAKhB,CAAI,EAAI,MAGjB,MAAM,KAAK,UAAUgB,CAAI,EACzB+O,EAAQ,MAAM,aAAa,EAC3B,KAAK,QAAQ,KAAK/O,CAAI,CACvB,CAID,kBAAmB,CACjB,KAAK,QAAQ,OAAO,kBAAkB,EACjC,KAAK,oBAAoB,OAC/B,CAID,iBAAkB,CAChB,KAAK,oBAAoB,MAC1B,CACD,IAAI,eAAgB,CAClB,MAAO,QAAQ,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,SAAS,EAClE,CACD,MAAM,WAAY,CAChB,MAAM+O,EAAU,KAAK,QAAQ,OAAO,WAAW,EACzCqG,EAAgB,MAAM,KAAK,SAAS,UAAU,IAAI,KAAK,aAAa,EAC1E,OAAIA,GACFrG,EAAQ,MAAM,2BAA2B,EAClCoJ,GAAK,kBAAkB/C,CAAa,IAE7CrG,EAAQ,MAAM,uBAAuB,EAC9B,KACR,CACD,MAAM,UAAU/O,EAAM,CACpB,MAAM+O,EAAU,KAAK,QAAQ,OAAO,WAAW,EAC/C,GAAI/O,EAAM,CACR+O,EAAQ,MAAM,cAAc,EAC5B,MAAMqG,EAAgBpV,EAAK,kBAC3B,MAAM,KAAK,SAAS,UAAU,IAAI,KAAK,cAAeoV,CAAa,CACzE,MACM,KAAK,QAAQ,MAAM,eAAe,EAClC,MAAM,KAAK,SAAS,UAAU,OAAO,KAAK,aAAa,CAE1D,CAID,MAAM,iBAAkB,CACtB,MAAM,KAAK,QAAQ,iBACpB,CACH,ECv6FO,MAAMkH,EAAa,CACtB,YAAYC,EAAS,CACjB,KAAK,IAAM,GACX,KAAK,IAAM,GACX,KAAK,IAAM,GACX,KAAK,IAAM,EACX,KAAK,IAAM,EACX,OAAO,KAAKA,CAAO,EAAE,QAAStnB,GAAQ,CAClC,KAAKA,CAAG,EAAIsnB,EAAQtnB,CAAG,CACnC,CAAS,CACJ,CACL,CCVO,MAAMunB,EAAU,CACnB,YAAYxc,EAAM,CACd,KAAK,KAAOA,EACZ,KAAK,YAAc,IAAIsc,GAAatc,EAAK,OAAO,CACnD,CACD,IAAI,cAAe,CACf,OAAO,KAAK,KAAK,YACpB,CACD,IAAI,eAAgB,CAChB,OAAO,KAAK,KAAK,aACpB,CACD,IAAI,YAAa,CACb,OAAO,KAAK,KAAK,UACpB,CACD,IAAI,eAAgB,CAChB,OAAO,KAAK,KAAK,aACpB,CACD,IAAI,SAAU,CACV,OAAO,KAAK,WACf,CACL,CCnBO,MAAMyc,EAAiB,CAC1B,YAAYhd,EAAUC,EAAQ,CAC1B,KAAK,YAAc,IAAIgd,GAAgB,KAAK,yBAAyBjd,CAAQ,CAAC,EAC9Ekd,GAAQ,UAAUjd,CAAM,EACxBid,GAAQ,SAASld,EAAS,QAAQ,CACrC,CACD,MAAM,cAAe,CACjB,MAAMmd,EAAW,MAAM,KAAK,YAAY,QAAO,EAC/C,OAAOA,EAAW,IAAIJ,GAAUI,CAAQ,EAAI,IAC/C,CACD,iBAAkB,CACd,OAAO,KAAK,YAAY,YAC3B,CACD,wBAAyB,CACrB,OAAO,KAAK,YAAY,cAC3B,CACD,MAAM,oBAAoB9Y,EAAK,CAC3B,MAAM,KAAK,YAAY,eAAeA,CAAG,CAC5C,CACD,oBAAoBoJ,EAAM,CACtB,OAAO,KAAK,YAAY,eAAeA,CAAI,CAC9C,CACD,MAAM,kBAAkBA,EAAM,CAC1B,MAAM,KAAK,YAAY,aAAaA,CAAI,CAC3C,CACD,qBAAqBA,EAAM,CACvB,OAAO,KAAK,YAAY,gBAAgBA,CAAI,CAC/C,CACD,sBAAsB2P,EAAU,CAC5B,KAAK,YAAY,OAAO,cAAe7c,GAAS,CAC5C6c,EAAS,IAAIL,GAAUxc,CAAI,CAAC,CACxC,CAAS,CACJ,CACD,yBAAyB6c,EAAU,CAC/B,KAAK,YAAY,OAAO,iBAAiBA,CAAQ,CACpD,CACD,wBAAwBA,EAAU,CAC9B,KAAK,YAAY,OAAO,gBAAgBA,CAAQ,CACnD,CACD,yBAAyBpd,EAAU,CAC/B,MAAO,CACH,WAAYA,EAAS,UACrB,UAAWA,EAAS,UACpB,qBAAsBA,EAAS,qBAC/B,UAAWA,EAAS,SACpB,aAAcA,EAAS,aACvB,eAAgBA,EAAS,eACzB,yBAA0BA,EAAS,sBACnC,aAAcA,EAAS,YACvB,cAAeA,EAAS,aACxB,sBAAuBA,EAAS,sBAChC,MAAOA,EAAS,MAChB,wBAAyBA,EAAS,wBAClC,qBAAsBA,EAAS,oBAC3C,CACK,CACL,CC1DO,MAAMqd,EAA2B,CACpC,YAAYpd,EAAQD,EAAUG,EAAOE,EAAaid,EAAe,GAAO,CACpE,KAAK,SAAW,EAChB,KAAK,WAAa,GAClB,KAAK,OAASrd,EACd,KAAK,SAAWD,EAChB,KAAK,MAAQG,EACb,KAAK,YAAcE,EACf,KAAK,SAAS,gBAAkB,CAACid,GACjC,KAAK,aAAY,CAExB,CACD,IAAI,WAAY,CACZ,OAAO,KAAK,MAAM,SACrB,CACD,YAAa,CACT,OAAK,KAAK,MAAM,UAGT,KAAK,MAAM,UAAY,KAAK,qBAAoB,EAF5C,EAGd,CACD,WAAY,CACR,MAAMC,EAAS,SAAS,OAAO,SAAS,wBAAwB,EAChE,YAAK,OAAO,MAAM,yDAAyDA,CAAM,GAAG,EAC7EA,CACV,CACD,OAAOC,EAAoB,CACvB,KAAK,MAAM,UAAY,KAAK,qBAAoB,EAAKA,EACrD,KAAK,OAAO,MAAM,4DAA4D,KAAK,MAAM,SAAS,GAAG,EACrG,KAAK,MAAM,MACd,CACD,OAAQ,CACJ,KAAK,OAAO,MAAM,0DAA0D,EAC5E,KAAK,MAAM,OACd,CACD,MAAM,SAAU,CACZ,KAAK,OAAO,MAAM,uDAAuD,EACzE,KAAK,MAAK,EACV,KAAK,UAAS,EACd,MAAM,KAAK,YAAY,sBAC1B,CACD,sBAAuB,CACnB,OAAO,KAAK,MAAM,KAAK,IAAK,EAAG,GAAI,CACtC,CACD,cAAe,CACX,KAAK,OAAO,MAAM,2DAA2D,EAC7E,KAAK,SAAW,OAAO,YAAY,SAAY,CACvC,KAAK,eACL,cAAc,KAAK,QAAQ,EAC3B,KAAK,WAAa,GAClB,MAAM,KAAK,UAE3B,EAAW,KAAK,SAAS,kCAAkC,EACnD,KAAK,WAAa,EACrB,CACD,WAAY,CACR,KAAK,OAAO,MAAM,mEAAmE,EACrF,MAAMxS,EAAI,IAAI,KACdA,EAAE,QAAQA,EAAE,QAAS,EAAG,GAAK,EAC7B,SAAS,OAAS,yCAAyCA,EAAE,YAAa,CAAA,EAC7E,CACL,CCnDO,MAAMyS,EAAoB,CAC7B,OAAO,iBAAkB,CACrB,OAAO,OAAO,YACjB,CAED,OAAO,wBAAwBC,EAAQ,CACnC,GAAI,OAAO,aACP,OAAO,OAAO,aAElB,MAAMzd,EAAS,IAAIwE,GAAmBiZ,EAAO,QAAQ,EACrDzd,EAAO,MAAM,yCAAyCyd,EAAO,QAAQ,GAAG,EACxE,MAAMxd,EAAO,IAAI6B,GAAU,CAAE,QAAS,GAAO,CAAA,EACvC/B,EAAW,IAAI4E,GAAqB8Y,EAAQzd,EAAQ,IAAI6F,EAAY,EACpE3F,EAAQ,IAAIwF,GAAkB3F,EAAS,SAAUC,EAAQ,cAAc,EACvEG,EAAiB,IAAIuD,GAA2B1D,CAAM,EACtDI,EAAc,IAAI2c,GAAiBhd,EAAUC,CAAM,EACnDK,EAAiB,IAAI+c,GAA2Bpd,EAAQD,EAAUG,EAAOE,CAAW,EACpFsd,EAAmB,IAAI5d,GAAiBC,EAAUC,EAAQC,EAAMC,EAAOC,EAAgBC,EAAaC,CAAc,EACxH,cAAO,aAAeqd,EACtB,OAAO,6BAA+B,IAAI7Z,GAA6B6Z,EAAkB1d,EAAQ,IAAI6F,GAAc,CAAA,CAAE,EAC9G,OAAO,YACjB,CACL,CCjCA,6BAEA,SAAS8X,GAAQC,EAAQ,CACvB,QAAS1V,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAI2V,EAAS,UAAU3V,CAAC,EACxB,QAAS3S,KAAOsoB,EACdD,EAAOroB,CAAG,EAAIsoB,EAAOtoB,CAAG,CAE3B,CACD,OAAOqoB,CACT,CAIA,IAAIE,GAAmB,CACrB,KAAM,SAAUnpB,EAAO,CACrB,OAAIA,EAAM,CAAC,IAAM,MACfA,EAAQA,EAAM,MAAM,EAAG,EAAE,GAEpBA,EAAM,QAAQ,mBAAoB,kBAAkB,CAC5D,EACD,MAAO,SAAUA,EAAO,CACtB,OAAO,mBAAmBA,CAAK,EAAE,QAC/B,2CACA,kBACD,CACF,CACH,EAKA,SAASwP,GAAM4Z,EAAWC,EAAmB,CAC3C,SAAShoB,EAAKT,EAAKZ,EAAOspB,EAAY,CACpC,GAAI,SAAO,SAAa,KAIxB,CAAAA,EAAaN,GAAO,CAAA,EAAIK,EAAmBC,CAAU,EAEjD,OAAOA,EAAW,SAAY,WAChCA,EAAW,QAAU,IAAI,KAAK,KAAK,IAAG,EAAKA,EAAW,QAAU,KAAK,GAEnEA,EAAW,UACbA,EAAW,QAAUA,EAAW,QAAQ,YAAW,GAGrD1oB,EAAM,mBAAmBA,CAAG,EACzB,QAAQ,uBAAwB,kBAAkB,EAClD,QAAQ,QAAS,MAAM,EAE1B,IAAI2oB,EAAwB,GAC5B,QAASC,KAAiBF,EACnBA,EAAWE,CAAa,IAI7BD,GAAyB,KAAOC,EAE5BF,EAAWE,CAAa,IAAM,KAWlCD,GAAyB,IAAMD,EAAWE,CAAa,EAAE,MAAM,GAAG,EAAE,CAAC,IAGvE,OAAQ,SAAS,OACf5oB,EAAM,IAAMwoB,EAAU,MAAMppB,EAAOY,CAAG,EAAI2oB,EAC7C,CAED,SAASE,EAAK7oB,EAAK,CACjB,GAAI,SAAO,SAAa,KAAgB,UAAU,QAAU,CAACA,GAQ7D,SAFI8oB,EAAU,SAAS,OAAS,SAAS,OAAO,MAAM,IAAI,EAAI,GAC1DC,EAAM,CAAA,EACDpW,EAAI,EAAGA,EAAImW,EAAQ,OAAQnW,IAAK,CACvC,IAAIqW,EAAQF,EAAQnW,CAAC,EAAE,MAAM,GAAG,EAC5BvT,EAAQ4pB,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,EAEnC,GAAI,CACF,IAAIC,EAAW,mBAAmBD,EAAM,CAAC,CAAC,EAG1C,GAFAD,EAAIE,CAAQ,EAAIT,EAAU,KAAKppB,EAAO6pB,CAAQ,EAE1CjpB,IAAQipB,EACV,KAEV,MAAkB,CAAE,CACf,CAED,OAAOjpB,EAAM+oB,EAAI/oB,CAAG,EAAI+oB,EACzB,CAED,OAAO,OAAO,OACZ,CACE,IAAKtoB,EACL,IAAKooB,EACL,OAAQ,SAAU7oB,EAAK0oB,EAAY,CACjCjoB,EACET,EACA,GACAooB,GAAO,CAAE,EAAEM,EAAY,CACrB,QAAS,EACrB,CAAW,CACX,CACO,EACD,eAAgB,SAAUA,EAAY,CACpC,OAAO9Z,GAAK,KAAK,UAAWwZ,GAAO,CAAA,EAAI,KAAK,WAAYM,CAAU,CAAC,CACpE,EACD,cAAe,SAAUF,EAAW,CAClC,OAAO5Z,GAAKwZ,GAAO,GAAI,KAAK,UAAWI,CAAS,EAAG,KAAK,UAAU,CACnE,CACF,EACD,CACE,WAAY,CAAE,MAAO,OAAO,OAAOC,CAAiB,CAAG,EACvD,UAAW,CAAE,MAAO,OAAO,OAAOD,CAAS,CAAG,CAC/C,CACF,CACH,CAEG,IAACU,GAAMta,GAAK2Z,GAAkB,CAAE,KAAM,GAAK,CAAA","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25]}