/*! * Webflow: Front-end site library * @license MIT * Inline scripts may access the api using an async handler: * var Webflow = Webflow || []; * Webflow.push(readyFunction); */ (() => { // webpackBootstrap var __webpack_modules__ = ({ 1361: (function (module) { /** * https://github.com/gre/bezier-easing * BezierEasing - use bezier curve for transition easing function * by Gaëtan Renaudeau 2014 - 2015 – MIT License */ // These values are established by empiricism with tests (tradeoff: performance VS precision) var NEWTON_ITERATIONS = 4; var NEWTON_MIN_SLOPE = 0.001; var SUBDIVISION_PRECISION = 0.0000001; var SUBDIVISION_MAX_ITERATIONS = 10; var kSplineTableSize = 11; var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0); var float32ArraySupported = typeof Float32Array === 'function'; function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; } function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; } function C (aA1) { return 3.0 * aA1; } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2. function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); } function binarySubdivide (aX, aA, aB, mX1, mX2) { var currentX, currentT, i = 0; do { currentT = aA + (aB - aA) / 2.0; currentX = calcBezier(currentT, mX1, mX2) - aX; if (currentX > 0.0) { aB = currentT; } else { aA = currentT; } } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); return currentT; } function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) { for (var i = 0; i < NEWTON_ITERATIONS; ++i) { var currentSlope = getSlope(aGuessT, mX1, mX2); if (currentSlope === 0.0) { return aGuessT; } var currentX = calcBezier(aGuessT, mX1, mX2) - aX; aGuessT -= currentX / currentSlope; } return aGuessT; } module.exports = function bezier (mX1, mY1, mX2, mY2) { if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { throw new Error('bezier x values must be in [0, 1] range'); } // Precompute samples table var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); if (mX1 !== mY1 || mX2 !== mY2) { for (var i = 0; i < kSplineTableSize; ++i) { sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); } } function getTForX (aX) { var intervalStart = 0.0; var currentSample = 1; var lastSample = kSplineTableSize - 1; for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) { intervalStart += kSampleStepSize; } --currentSample; // Interpolate to provide an initial guess for t var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]); var guessForT = intervalStart + dist * kSampleStepSize; var initialSlope = getSlope(guessForT, mX1, mX2); if (initialSlope >= NEWTON_MIN_SLOPE) { return newtonRaphsonIterate(aX, guessForT, mX1, mX2); } else if (initialSlope === 0.0) { return guessForT; } else { return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); } } return function BezierEasing (x) { if (mX1 === mY1 && mX2 === mY2) { return x; // linear } // Because JavaScript number are imprecise, we should guarantee the extremes are right. if (x === 0) { return 0; } if (x === 1) { return 1; } return calcBezier(getTForX(x), mY1, mY2); }; }; }), 8172: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var DataView = getNative(root, 'DataView'); module.exports = DataView; }), 1796: (function (module, __unused_webpack_exports, __webpack_require__) { var hashClear = __webpack_require__(7322), hashDelete = __webpack_require__(2937), hashGet = __webpack_require__(207), hashHas = __webpack_require__(2165), hashSet = __webpack_require__(7523); /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; module.exports = Hash; }), 4281: (function (module, __unused_webpack_exports, __webpack_require__) { var baseCreate = __webpack_require__(5940), baseLodash = __webpack_require__(4382); /** Used as references for the maximum length and index of an array. */ var MAX_ARRAY_LENGTH = 4294967295; /** * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. * * @private * @constructor * @param {*} value The value to wrap. */ function LazyWrapper(value) { this.__wrapped__ = value; this.__actions__ = []; this.__dir__ = 1; this.__filtered__ = false; this.__iteratees__ = []; this.__takeCount__ = MAX_ARRAY_LENGTH; this.__views__ = []; } // Ensure `LazyWrapper` is an instance of `baseLodash`. LazyWrapper.prototype = baseCreate(baseLodash.prototype); LazyWrapper.prototype.constructor = LazyWrapper; module.exports = LazyWrapper; }), 283: (function (module, __unused_webpack_exports, __webpack_require__) { var listCacheClear = __webpack_require__(7435), listCacheDelete = __webpack_require__(8438), listCacheGet = __webpack_require__(3067), listCacheHas = __webpack_require__(9679), listCacheSet = __webpack_require__(2426); /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; module.exports = ListCache; }), 9675: (function (module, __unused_webpack_exports, __webpack_require__) { var baseCreate = __webpack_require__(5940), baseLodash = __webpack_require__(4382); /** * The base constructor for creating `lodash` wrapper objects. * * @private * @param {*} value The value to wrap. * @param {boolean} [chainAll] Enable explicit method chain sequences. */ function LodashWrapper(value, chainAll) { this.__wrapped__ = value; this.__actions__ = []; this.__chain__ = !!chainAll; this.__index__ = 0; this.__values__ = undefined; } LodashWrapper.prototype = baseCreate(baseLodash.prototype); LodashWrapper.prototype.constructor = LodashWrapper; module.exports = LodashWrapper; }), 9036: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'); module.exports = Map; }), 4544: (function (module, __unused_webpack_exports, __webpack_require__) { var mapCacheClear = __webpack_require__(6409), mapCacheDelete = __webpack_require__(5335), mapCacheGet = __webpack_require__(5601), mapCacheHas = __webpack_require__(1533), mapCacheSet = __webpack_require__(151); /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; module.exports = MapCache; }), 44: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var Promise = getNative(root, 'Promise'); module.exports = Promise; }), 6656: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var Set = getNative(root, 'Set'); module.exports = Set; }), 3290: (function (module, __unused_webpack_exports, __webpack_require__) { var MapCache = __webpack_require__(4544), setCacheAdd = __webpack_require__(1760), setCacheHas = __webpack_require__(5484); /** * * Creates an array cache object to store unique values. * * @private * @constructor * @param {Array} [values] The values to cache. */ function SetCache(values) { var index = -1, length = values == null ? 0 : values.length; this.__data__ = new MapCache; while (++index < length) { this.add(values[index]); } } // Add methods to `SetCache`. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; module.exports = SetCache; }), 1902: (function (module, __unused_webpack_exports, __webpack_require__) { var ListCache = __webpack_require__(283), stackClear = __webpack_require__(6063), stackDelete = __webpack_require__(7727), stackGet = __webpack_require__(3281), stackHas = __webpack_require__(6667), stackSet = __webpack_require__(1270); /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } // Add methods to `Stack`. Stack.prototype.clear = stackClear; Stack.prototype['delete'] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; module.exports = Stack; }), 4886: (function (module, __unused_webpack_exports, __webpack_require__) { var root = __webpack_require__(5238); /** Built-in value references. */ var Symbol = root.Symbol; module.exports = Symbol; }), 8965: (function (module, __unused_webpack_exports, __webpack_require__) { var root = __webpack_require__(5238); /** Built-in value references. */ var Uint8Array = root.Uint8Array; module.exports = Uint8Array; }), 3283: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var WeakMap = getNative(root, 'WeakMap'); module.exports = WeakMap; }), 9198: (function (module) { /** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. * * @private * @param {Function} func The function to invoke. * @param {*} thisArg The `this` binding of `func`. * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */ function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } module.exports = apply; }), 4970: (function (module) { /** * A specialized version of `_.forEach` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } module.exports = arrayEach; }), 2654: (function (module) { /** * A specialized version of `_.filter` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } module.exports = arrayFilter; }), 4979: (function (module, __unused_webpack_exports, __webpack_require__) { var baseTimes = __webpack_require__(1682), isArguments = __webpack_require__(9732), isArray = __webpack_require__(6377), isBuffer = __webpack_require__(6018), isIndex = __webpack_require__(9251), isTypedArray = __webpack_require__(8586); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex(key, length) ))) { result.push(key); } } return result; } module.exports = arrayLikeKeys; }), 1098: (function (module) { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; }), 5741: (function (module) { /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } module.exports = arrayPush; }), 2607: (function (module) { /** * A specialized version of `_.reduce` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {*} [accumulator] The initial value. * @param {boolean} [initAccum] Specify using the first element of `array` as * the initial value. * @returns {*} Returns the accumulated value. */ function arrayReduce(array, iteratee, accumulator, initAccum) { var index = -1, length = array == null ? 0 : array.length; if (initAccum && length) { accumulator = array[++index]; } while (++index < length) { accumulator = iteratee(accumulator, array[index], index, array); } return accumulator; } module.exports = arrayReduce; }), 3955: (function (module) { /** * A specialized version of `_.some` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } module.exports = arraySome; }), 609: (function (module, __unused_webpack_exports, __webpack_require__) { var baseProperty = __webpack_require__(2726); /** * Gets the size of an ASCII `string`. * * @private * @param {string} string The string inspect. * @returns {number} Returns the string size. */ var asciiSize = baseProperty('length'); module.exports = asciiSize; }), 3615: (function (module, __unused_webpack_exports, __webpack_require__) { var baseAssignValue = __webpack_require__(2676), eq = __webpack_require__(4071); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) { baseAssignValue(object, key, value); } } module.exports = assignValue; }), 8357: (function (module, __unused_webpack_exports, __webpack_require__) { var eq = __webpack_require__(4071); /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } module.exports = assocIndexOf; }), 2676: (function (module, __unused_webpack_exports, __webpack_require__) { var defineProperty = __webpack_require__(9833); /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function baseAssignValue(object, key, value) { if (key == '__proto__' && defineProperty) { defineProperty(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } module.exports = baseAssignValue; }), 2009: (function (module) { /** * The base implementation of `_.clamp` which doesn't coerce arguments. * * @private * @param {number} number The number to clamp. * @param {number} [lower] The lower bound. * @param {number} upper The upper bound. * @returns {number} Returns the clamped number. */ function baseClamp(number, lower, upper) { if (number === number) { if (upper !== undefined) { number = number <= upper ? number : upper; } if (lower !== undefined) { number = number >= lower ? number : lower; } } return number; } module.exports = baseClamp; }), 5940: (function (module, __unused_webpack_exports, __webpack_require__) { var isObject = __webpack_require__(8532); /** Built-in value references. */ var objectCreate = Object.create; /** * The base implementation of `_.create` without support for assigning * properties to the created object. * * @private * @param {Object} proto The object to inherit from. * @returns {Object} Returns the new object. */ var baseCreate = (function() { function object() {} return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object; object.prototype = undefined; return result; }; }()); module.exports = baseCreate; }), 8264: (function (module, __unused_webpack_exports, __webpack_require__) { var baseForOwn = __webpack_require__(3406), createBaseEach = __webpack_require__(2679); /** * The base implementation of `_.forEach` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */ var baseEach = createBaseEach(baseForOwn); module.exports = baseEach; }), 2056: (function (module) { /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } module.exports = baseFindIndex; }), 5265: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayPush = __webpack_require__(5741), isFlattenable = __webpack_require__(1668); /** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } module.exports = baseFlatten; }), 1: (function (module, __unused_webpack_exports, __webpack_require__) { var createBaseFor = __webpack_require__(132); /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor = createBaseFor(); module.exports = baseFor; }), 3406: (function (module, __unused_webpack_exports, __webpack_require__) { var baseFor = __webpack_require__(1), keys = __webpack_require__(7361); /** * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } module.exports = baseForOwn; }), 1957: (function (module, __unused_webpack_exports, __webpack_require__) { var castPath = __webpack_require__(3835), toKey = __webpack_require__(8481); /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } module.exports = baseGet; }), 7743: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayPush = __webpack_require__(5741), isArray = __webpack_require__(6377); /** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses * `keysFunc` and `symbolsFunc` to get the enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @param {Function} keysFunc The function to get the keys of `object`. * @param {Function} symbolsFunc The function to get the symbols of `object`. * @returns {Array} Returns the array of property names and symbols. */ function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } module.exports = baseGetAllKeys; }), 3757: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886), getRawTag = __webpack_require__(5118), objectToString = __webpack_require__(7070); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; }), 6993: (function (module) { /** * The base implementation of `_.hasIn` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ function baseHasIn(object, key) { return object != null && key in Object(object); } module.exports = baseHasIn; }), 841: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isObjectLike = __webpack_require__(7013); /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } module.exports = baseIsArguments; }), 5447: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsEqualDeep = __webpack_require__(906), isObjectLike = __webpack_require__(7013); /** * The base implementation of `_.isEqual` which supports partial comparisons * and tracks traversed objects. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @param {boolean} bitmask The bitmask flags. * 1 - Unordered comparison * 2 - Partial comparison * @param {Function} [customizer] The function to customize comparisons. * @param {Object} [stack] Tracks traversed `value` and `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } module.exports = baseIsEqual; }), 906: (function (module, __unused_webpack_exports, __webpack_require__) { var Stack = __webpack_require__(1902), equalArrays = __webpack_require__(4476), equalByTag = __webpack_require__(9027), equalObjects = __webpack_require__(8714), getTag = __webpack_require__(9937), isArray = __webpack_require__(6377), isBuffer = __webpack_require__(6018), isTypedArray = __webpack_require__(8586); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', objectTag = '[object Object]'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular * references to be compared. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack); return (objIsArr || isTypedArray(object)) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } module.exports = baseIsEqualDeep; }), 7293: (function (module, __unused_webpack_exports, __webpack_require__) { var Stack = __webpack_require__(1902), baseIsEqual = __webpack_require__(5447); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.isMatch` without support for iteratee shorthands. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @param {Array} matchData The property names, values, and compare flags to match. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ function baseIsMatch(object, source, matchData, customizer) { var index = matchData.length, length = index, noCustomizer = !customizer; if (object == null) { return !length; } object = Object(object); while (index--) { var data = matchData[index]; if ((noCustomizer && data[2]) ? data[1] !== object[data[0]] : !(data[0] in object) ) { return false; } } while (++index < length) { data = matchData[index]; var key = data[0], objValue = object[key], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === undefined && !(key in object)) { return false; } } else { var stack = new Stack; if (customizer) { var result = customizer(objValue, srcValue, key, object, source, stack); } if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result )) { return false; } } } return true; } module.exports = baseIsMatch; }), 692: (function (module, __unused_webpack_exports, __webpack_require__) { var isFunction = __webpack_require__(6644), isMasked = __webpack_require__(3417), isObject = __webpack_require__(8532), toSource = __webpack_require__(1473); /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } module.exports = baseIsNative; }), 2195: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isLength = __webpack_require__(7924), isObjectLike = __webpack_require__(7013); /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } module.exports = baseIsTypedArray; }), 5462: (function (module, __unused_webpack_exports, __webpack_require__) { var baseMatches = __webpack_require__(6358), baseMatchesProperty = __webpack_require__(4503), identity = __webpack_require__(1622), isArray = __webpack_require__(6377), property = __webpack_require__(8303); /** * The base implementation of `_.iteratee`. * * @private * @param {*} [value=_.identity] The value to convert to an iteratee. * @returns {Function} Returns the iteratee. */ function baseIteratee(value) { // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if (typeof value == 'function') { return value; } if (value == null) { return identity; } if (typeof value == 'object') { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } module.exports = baseIteratee; }), 7407: (function (module, __unused_webpack_exports, __webpack_require__) { var isPrototype = __webpack_require__(8857), nativeKeys = __webpack_require__(2440); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key); } } return result; } module.exports = baseKeys; }), 9237: (function (module, __unused_webpack_exports, __webpack_require__) { var isObject = __webpack_require__(8532), isPrototype = __webpack_require__(8857), nativeKeysIn = __webpack_require__(1308); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result = []; for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { result.push(key); } } return result; } module.exports = baseKeysIn; }), 4382: (function (module) { /** * The function whose prototype chain sequence wrappers inherit from. * * @private */ function baseLodash() { // No operation performed. } module.exports = baseLodash; }), 6358: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsMatch = __webpack_require__(7293), getMatchData = __webpack_require__(7145), matchesStrictComparable = __webpack_require__(4167); /** * The base implementation of `_.matches` which doesn't clone `source`. * * @private * @param {Object} source The object of property values to match. * @returns {Function} Returns the new spec function. */ function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } module.exports = baseMatches; }), 4503: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsEqual = __webpack_require__(5447), get = __webpack_require__(4738), hasIn = __webpack_require__(9290), isKey = __webpack_require__(7074), isStrictComparable = __webpack_require__(1542), matchesStrictComparable = __webpack_require__(4167), toKey = __webpack_require__(8481); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * * @private * @param {string} path The path of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get(object, path); return (objValue === undefined && objValue === srcValue) ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } module.exports = baseMatchesProperty; }), 7100: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGet = __webpack_require__(1957), baseSet = __webpack_require__(5495), castPath = __webpack_require__(3835); /** * The base implementation of `_.pickBy` without support for iteratee shorthands. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @param {Function} predicate The function invoked per property. * @returns {Object} Returns the new object. */ function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result = {}; while (++index < length) { var path = paths[index], value = baseGet(object, path); if (predicate(value, path)) { baseSet(result, castPath(path, object), value); } } return result; } module.exports = basePickBy; }), 2726: (function (module) { /** * The base implementation of `_.property` without support for deep paths. * * @private * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */ function baseProperty(key) { return function(object) { return object == null ? undefined : object[key]; }; } module.exports = baseProperty; }), 1374: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGet = __webpack_require__(1957); /** * A specialized version of `baseProperty` which supports deep paths. * * @private * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. */ function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } module.exports = basePropertyDeep; }), 9864: (function (module) { /** * The base implementation of `_.reduce` and `_.reduceRight`, without support * for iteratee shorthands, which iterates over `collection` using `eachFunc`. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {*} accumulator The initial value. * @param {boolean} initAccum Specify using the first or last element of * `collection` as the initial value. * @param {Function} eachFunc The function to iterate over `collection`. * @returns {*} Returns the accumulated value. */ function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { eachFunc(collection, function(value, index, collection) { accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection); }); return accumulator; } module.exports = baseReduce; }), 5495: (function (module, __unused_webpack_exports, __webpack_require__) { var assignValue = __webpack_require__(3615), castPath = __webpack_require__(3835), isIndex = __webpack_require__(9251), isObject = __webpack_require__(8532), toKey = __webpack_require__(8481); /** * The base implementation of `_.set`. * * @private * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {*} value The value to set. * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ function baseSet(object, path, value, customizer) { if (!isObject(object)) { return object; } path = castPath(path, object); var index = -1, length = path.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { var key = toKey(path[index]), newValue = value; if (key === '__proto__' || key === 'constructor' || key === 'prototype') { return object; } if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : undefined; if (newValue === undefined) { newValue = isObject(objValue) ? objValue : (isIndex(path[index + 1]) ? [] : {}); } } assignValue(nested, key, newValue); nested = nested[key]; } return object; } module.exports = baseSet; }), 2422: (function (module, __unused_webpack_exports, __webpack_require__) { var constant = __webpack_require__(5055), defineProperty = __webpack_require__(9833), identity = __webpack_require__(1622); /** * The base implementation of `setToString` without support for hot loop shorting. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); }; module.exports = baseSetToString; }), 1682: (function (module) { /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } module.exports = baseTimes; }), 9653: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886), arrayMap = __webpack_require__(1098), isArray = __webpack_require__(6377), isSymbol = __webpack_require__(1359); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = baseToString; }), 1072: (function (module, __unused_webpack_exports, __webpack_require__) { var trimmedEndIndex = __webpack_require__(3230); /** Used to match leading whitespace. */ var reTrimStart = /^\s+/; /** * The base implementation of `_.trim`. * * @private * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */ function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } module.exports = baseTrim; }), 7509: (function (module) { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } module.exports = baseUnary; }), 2471: (function (module) { /** * Checks if a `cache` value for `key` exists. * * @private * @param {Object} cache The cache to query. * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function cacheHas(cache, key) { return cache.has(key); } module.exports = cacheHas; }), 8269: (function (module, __unused_webpack_exports, __webpack_require__) { var identity = __webpack_require__(1622); /** * Casts `value` to `identity` if it's not a function. * * @private * @param {*} value The value to inspect. * @returns {Function} Returns cast function. */ function castFunction(value) { return typeof value == 'function' ? value : identity; } module.exports = castFunction; }), 3835: (function (module, __unused_webpack_exports, __webpack_require__) { var isArray = __webpack_require__(6377), isKey = __webpack_require__(7074), stringToPath = __webpack_require__(8997), toString = __webpack_require__(6214); /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } module.exports = castPath; }), 8606: (function (module) { /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } module.exports = copyArray; }), 5772: (function (module, __unused_webpack_exports, __webpack_require__) { var root = __webpack_require__(5238); /** Used to detect overreaching core-js shims. */ var coreJsData = root['__core-js_shared__']; module.exports = coreJsData; }), 2679: (function (module, __unused_webpack_exports, __webpack_require__) { var isArrayLike = __webpack_require__(508); /** * Creates a `baseEach` or `baseEachRight` function. * * @private * @param {Function} eachFunc The function to iterate over a collection. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); while ((fromRight ? index-- : ++index < length)) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } module.exports = createBaseEach; }), 132: (function (module) { /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } module.exports = createBaseFor; }), 727: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIteratee = __webpack_require__(5462), isArrayLike = __webpack_require__(508), keys = __webpack_require__(7361); /** * Creates a `_.find` or `_.findLast` function. * * @private * @param {Function} findIndexFunc The function to find the collection index. * @returns {Function} Returns the new find function. */ function createFind(findIndexFunc) { return function(collection, predicate, fromIndex) { var iterable = Object(collection); if (!isArrayLike(collection)) { var iteratee = baseIteratee(predicate, 3); collection = keys(collection); predicate = function(key) { return iteratee(iterable[key], key, iterable); }; } var index = findIndexFunc(collection, predicate, fromIndex); return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; }; } module.exports = createFind; }), 914: (function (module, __unused_webpack_exports, __webpack_require__) { var LodashWrapper = __webpack_require__(9675), flatRest = __webpack_require__(4502), getData = __webpack_require__(6007), getFuncName = __webpack_require__(195), isArray = __webpack_require__(6377), isLaziable = __webpack_require__(6252); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** Used to compose bitmasks for function metadata. */ var WRAP_CURRY_FLAG = 8, WRAP_PARTIAL_FLAG = 32, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256; /** * Creates a `_.flow` or `_.flowRight` function. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new flow function. */ function createFlow(fromRight) { return flatRest(function(funcs) { var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; if (fromRight) { funcs.reverse(); } while (index--) { var func = funcs[index]; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } if (prereq && !wrapper && getFuncName(func) == 'wrapper') { var wrapper = new LodashWrapper([], true); } } index = wrapper ? index : length; while (++index < length) { func = funcs[index]; var funcName = getFuncName(func), data = funcName == 'wrapper' ? getData(func) : undefined; if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1 ) { wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); } else { wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); } } return function() { var args = arguments, value = args[0]; if (wrapper && args.length == 1 && isArray(value)) { return wrapper.plant(value).value(); } var index = 0, result = length ? funcs[index].apply(this, args) : value; while (++index < length) { result = funcs[index].call(this, result); } return result; }; }); } module.exports = createFlow; }), 9833: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440); var defineProperty = (function() { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }()); module.exports = defineProperty; }), 4476: (function (module, __unused_webpack_exports, __webpack_require__) { var SetCache = __webpack_require__(3290), arraySome = __webpack_require__(3955), cacheHas = __webpack_require__(2471); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * A specialized version of `baseIsEqualDeep` for arrays with support for * partial deep comparisons. * * @private * @param {Array} array The array to compare. * @param {Array} other The other array to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `array` and `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } // Check that cyclic values are equal. var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result = true, seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; stack.set(array, other); stack.set(other, array); // Ignore non-index properties. while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== undefined) { if (compared) { continue; } result = false; break; } // Recursively compare arrays (susceptible to call stack limits). if (seen) { if (!arraySome(other, function(othValue, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!( arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack) )) { result = false; break; } } stack['delete'](array); stack['delete'](other); return result; } module.exports = equalArrays; }), 9027: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886), Uint8Array = __webpack_require__(8965), eq = __webpack_require__(4071), equalArrays = __webpack_require__(4476), mapToArray = __webpack_require__(7170), setToArray = __webpack_require__(2779); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** `Object#toString` result references. */ var boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', mapTag = '[object Map]', numberTag = '[object Number]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]'; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; /** * A specialized version of `baseIsEqualDeep` for comparing objects of * the same `toStringTag`. * * **Note:** This function only supports comparing values with tags of * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {string} tag The `toStringTag` of the objects to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if ((object.byteLength != other.byteLength) || (object.byteOffset != other.byteOffset)) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if ((object.byteLength != other.byteLength) || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: // Coerce booleans to `1` or `0` and dates to milliseconds. // Invalid dates are coerced to `NaN`. return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: // Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring // for more details. return object == (other + ''); case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } // Assume cyclic values are equal. var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits). stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack['delete'](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } module.exports = equalByTag; }), 8714: (function (module, __unused_webpack_exports, __webpack_require__) { var getAllKeys = __webpack_require__(3948); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * A specialized version of `baseIsEqualDeep` for objects with support for * partial deep comparisons. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { return false; } } // Check that cyclic values are equal. var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } // Recursively compare objects (susceptible to call stack limits). if (!(compared === undefined ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) : compared )) { result = false; break; } skipCtor || (skipCtor = key == 'constructor'); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal. if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { result = false; } } stack['delete'](object); stack['delete'](other); return result; } module.exports = equalObjects; }), 4502: (function (module, __unused_webpack_exports, __webpack_require__) { var flatten = __webpack_require__(6380), overRest = __webpack_require__(6813), setToString = __webpack_require__(2413); /** * A specialized version of `baseRest` which flattens the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @returns {Function} Returns the new function. */ function flatRest(func) { return setToString(overRest(func, undefined, flatten), func + ''); } module.exports = flatRest; }), 2593: (function (module, __unused_webpack_exports, __webpack_require__) { /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; module.exports = freeGlobal; }), 3948: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetAllKeys = __webpack_require__(7743), getSymbols = __webpack_require__(6230), keys = __webpack_require__(7361); /** * Creates an array of own enumerable property names and symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } module.exports = getAllKeys; }), 9254: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetAllKeys = __webpack_require__(7743), getSymbolsIn = __webpack_require__(2992), keysIn = __webpack_require__(3747); /** * Creates an array of own and inherited enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeysIn(object) { return baseGetAllKeys(object, keysIn, getSymbolsIn); } module.exports = getAllKeysIn; }), 6007: (function (module, __unused_webpack_exports, __webpack_require__) { var metaMap = __webpack_require__(900), noop = __webpack_require__(6032); /** * Gets metadata for `func`. * * @private * @param {Function} func The function to query. * @returns {*} Returns the metadata for `func`. */ var getData = !metaMap ? noop : function(func) { return metaMap.get(func); }; module.exports = getData; }), 195: (function (module, __unused_webpack_exports, __webpack_require__) { var realNames = __webpack_require__(8564); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the name of `func`. * * @private * @param {Function} func The function to query. * @returns {string} Returns the function name. */ function getFuncName(func) { var result = (func.name + ''), array = realNames[result], length = hasOwnProperty.call(realNames, result) ? array.length : 0; while (length--) { var data = array[length], otherFunc = data.func; if (otherFunc == null || otherFunc == func) { return data.name; } } return result; } module.exports = getFuncName; }), 1143: (function (module, __unused_webpack_exports, __webpack_require__) { var isKeyable = __webpack_require__(6669); /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } module.exports = getMapData; }), 7145: (function (module, __unused_webpack_exports, __webpack_require__) { var isStrictComparable = __webpack_require__(1542), keys = __webpack_require__(7361); /** * Gets the property names, values, and compare flags of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */ function getMatchData(object) { var result = keys(object), length = result.length; while (length--) { var key = result[length], value = object[key]; result[length] = [key, value, isStrictComparable(value)]; } return result; } module.exports = getMatchData; }), 440: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsNative = __webpack_require__(692), getValue = __webpack_require__(8974); /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } module.exports = getNative; }), 6095: (function (module, __unused_webpack_exports, __webpack_require__) { var overArg = __webpack_require__(6512); /** Built-in value references. */ var getPrototype = overArg(Object.getPrototypeOf, Object); module.exports = getPrototype; }), 5118: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; }), 6230: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayFilter = __webpack_require__(2654), stubArray = __webpack_require__(1036); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols; /** * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; module.exports = getSymbols; }), 2992: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayPush = __webpack_require__(5741), getPrototype = __webpack_require__(6095), getSymbols = __webpack_require__(6230), stubArray = __webpack_require__(1036); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols; /** * Creates an array of the own and inherited enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { var result = []; while (object) { arrayPush(result, getSymbols(object)); object = getPrototype(object); } return result; }; module.exports = getSymbolsIn; }), 9937: (function (module, __unused_webpack_exports, __webpack_require__) { var DataView = __webpack_require__(8172), Map = __webpack_require__(9036), Promise = __webpack_require__(44), Set = __webpack_require__(6656), WeakMap = __webpack_require__(3283), baseGetTag = __webpack_require__(3757), toSource = __webpack_require__(1473); /** `Object#toString` result references. */ var mapTag = '[object Map]', objectTag = '[object Object]', promiseTag = '[object Promise]', setTag = '[object Set]', weakMapTag = '[object WeakMap]'; var dataViewTag = '[object DataView]'; /** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap); /** * Gets the `toStringTag` of `value`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || (Map && getTag(new Map) != mapTag) || (Promise && getTag(Promise.resolve()) != promiseTag) || (Set && getTag(new Set) != setTag) || (WeakMap && getTag(new WeakMap) != weakMapTag)) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : ''; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } module.exports = getTag; }), 8974: (function (module) { /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } module.exports = getValue; }), 7635: (function (module, __unused_webpack_exports, __webpack_require__) { var castPath = __webpack_require__(3835), isArguments = __webpack_require__(9732), isArray = __webpack_require__(6377), isIndex = __webpack_require__(9251), isLength = __webpack_require__(7924), toKey = __webpack_require__(8481); /** * Checks if `path` exists on `object`. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */ function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key = toKey(path[index]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } module.exports = hasPath; }), 9520: (function (module) { /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff', rsComboMarksRange = '\\u0300-\\u036f', reComboHalfMarksRange = '\\ufe20-\\ufe2f', rsComboSymbolsRange = '\\u20d0-\\u20ff', rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsZWJ = '\\u200d'; /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); /** * Checks if `string` contains Unicode symbols. * * @private * @param {string} string The string to inspect. * @returns {boolean} Returns `true` if a symbol is found, else `false`. */ function hasUnicode(string) { return reHasUnicode.test(string); } module.exports = hasUnicode; }), 7322: (function (module, __unused_webpack_exports, __webpack_require__) { var nativeCreate = __webpack_require__(7305); /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } module.exports = hashClear; }), 2937: (function (module) { /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } module.exports = hashDelete; }), 207: (function (module, __unused_webpack_exports, __webpack_require__) { var nativeCreate = __webpack_require__(7305); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } module.exports = hashGet; }), 2165: (function (module, __unused_webpack_exports, __webpack_require__) { var nativeCreate = __webpack_require__(7305); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } module.exports = hashHas; }), 7523: (function (module, __unused_webpack_exports, __webpack_require__) { var nativeCreate = __webpack_require__(7305); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } module.exports = hashSet; }), 1668: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886), isArguments = __webpack_require__(9732), isArray = __webpack_require__(6377); /** Built-in value references. */ var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; /** * Checks if `value` is a flattenable `arguments` object or array. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } module.exports = isFlattenable; }), 9251: (function (module) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length); } module.exports = isIndex; }), 7074: (function (module, __unused_webpack_exports, __webpack_require__) { var isArray = __webpack_require__(6377), isSymbol = __webpack_require__(1359); /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } module.exports = isKey; }), 6669: (function (module) { /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } module.exports = isKeyable; }), 6252: (function (module, __unused_webpack_exports, __webpack_require__) { var LazyWrapper = __webpack_require__(4281), getData = __webpack_require__(6007), getFuncName = __webpack_require__(195), lodash = __webpack_require__(6985); /** * Checks if `func` has a lazy counterpart. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` has a lazy counterpart, * else `false`. */ function isLaziable(func) { var funcName = getFuncName(func), other = lodash[funcName]; if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { return false; } if (func === other) { return true; } var data = getData(other); return !!data && func === data[0]; } module.exports = isLaziable; }), 3417: (function (module, __unused_webpack_exports, __webpack_require__) { var coreJsData = __webpack_require__(5772); /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } module.exports = isMasked; }), 8857: (function (module) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; return value === proto; } module.exports = isPrototype; }), 1542: (function (module, __unused_webpack_exports, __webpack_require__) { var isObject = __webpack_require__(8532); /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */ function isStrictComparable(value) { return value === value && !isObject(value); } module.exports = isStrictComparable; }), 7435: (function (module) { /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; this.size = 0; } module.exports = listCacheClear; }), 8438: (function (module, __unused_webpack_exports, __webpack_require__) { var assocIndexOf = __webpack_require__(8357); /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } module.exports = listCacheDelete; }), 3067: (function (module, __unused_webpack_exports, __webpack_require__) { var assocIndexOf = __webpack_require__(8357); /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } module.exports = listCacheGet; }), 9679: (function (module, __unused_webpack_exports, __webpack_require__) { var assocIndexOf = __webpack_require__(8357); /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } module.exports = listCacheHas; }), 2426: (function (module, __unused_webpack_exports, __webpack_require__) { var assocIndexOf = __webpack_require__(8357); /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } module.exports = listCacheSet; }), 6409: (function (module, __unused_webpack_exports, __webpack_require__) { var Hash = __webpack_require__(1796), ListCache = __webpack_require__(283), Map = __webpack_require__(9036); /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new Hash, 'map': new (Map || ListCache), 'string': new Hash }; } module.exports = mapCacheClear; }), 5335: (function (module, __unused_webpack_exports, __webpack_require__) { var getMapData = __webpack_require__(1143); /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { var result = getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } module.exports = mapCacheDelete; }), 5601: (function (module, __unused_webpack_exports, __webpack_require__) { var getMapData = __webpack_require__(1143); /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } module.exports = mapCacheGet; }), 1533: (function (module, __unused_webpack_exports, __webpack_require__) { var getMapData = __webpack_require__(1143); /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } module.exports = mapCacheHas; }), 151: (function (module, __unused_webpack_exports, __webpack_require__) { var getMapData = __webpack_require__(1143); /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } module.exports = mapCacheSet; }), 7170: (function (module) { /** * Converts `map` to its key-value pairs. * * @private * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */ function mapToArray(map) { var index = -1, result = Array(map.size); map.forEach(function(value, key) { result[++index] = [key, value]; }); return result; } module.exports = mapToArray; }), 4167: (function (module) { /** * A specialized version of `matchesProperty` for source values suitable * for strict equality comparisons, i.e. `===`. * * @private * @param {string} key The key of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function matchesStrictComparable(key, srcValue) { return function(object) { if (object == null) { return false; } return object[key] === srcValue && (srcValue !== undefined || (key in Object(object))); }; } module.exports = matchesStrictComparable; }), 6141: (function (module, __unused_webpack_exports, __webpack_require__) { var memoize = __webpack_require__(4984); /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } module.exports = memoizeCapped; }), 900: (function (module, __unused_webpack_exports, __webpack_require__) { var WeakMap = __webpack_require__(3283); /** Used to store function metadata. */ var metaMap = WeakMap && new WeakMap; module.exports = metaMap; }), 7305: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440); /* Built-in method references that are verified to be native. */ var nativeCreate = getNative(Object, 'create'); module.exports = nativeCreate; }), 2440: (function (module, __unused_webpack_exports, __webpack_require__) { var overArg = __webpack_require__(6512); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys = overArg(Object.keys, Object); module.exports = nativeKeys; }), 1308: (function (module) { /** * This function is like * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * except that it includes inherited enumerable properties. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function nativeKeysIn(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } module.exports = nativeKeysIn; }), 895: (function (module, exports, __webpack_require__) { /* module decorator */ module = __webpack_require__.nmd(module); var freeGlobal = __webpack_require__(2593); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); module.exports = nodeUtil; }), 7070: (function (module) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; }), 6512: (function (module) { /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } module.exports = overArg; }), 6813: (function (module, __unused_webpack_exports, __webpack_require__) { var apply = __webpack_require__(9198); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * A specialized version of `baseRest` which transforms the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @param {Function} transform The rest array transform. * @returns {Function} Returns the new function. */ function overRest(func, start, transform) { start = nativeMax(start === undefined ? (func.length - 1) : start, 0); return function() { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply(func, this, otherArgs); }; } module.exports = overRest; }), 8564: (function (module) { /** Used to lookup unminified function names. */ var realNames = {}; module.exports = realNames; }), 5238: (function (module, __unused_webpack_exports, __webpack_require__) { var freeGlobal = __webpack_require__(2593); /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; }), 1760: (function (module) { /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Adds `value` to the array cache. * * @private * @name add * @memberOf SetCache * @alias push * @param {*} value The value to cache. * @returns {Object} Returns the cache instance. */ function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } module.exports = setCacheAdd; }), 5484: (function (module) { /** * Checks if `value` is in the array cache. * * @private * @name has * @memberOf SetCache * @param {*} value The value to search for. * @returns {number} Returns `true` if `value` is found, else `false`. */ function setCacheHas(value) { return this.__data__.has(value); } module.exports = setCacheHas; }), 2779: (function (module) { /** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = value; }); return result; } module.exports = setToArray; }), 2413: (function (module, __unused_webpack_exports, __webpack_require__) { var baseSetToString = __webpack_require__(2422), shortOut = __webpack_require__(7890); /** * Sets the `toString` method of `func` to return `string`. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var setToString = shortOut(baseSetToString); module.exports = setToString; }), 7890: (function (module) { /** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800, HOT_SPAN = 16; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeNow = Date.now; /** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` * milliseconds. * * @private * @param {Function} func The function to restrict. * @returns {Function} Returns the new shortable function. */ function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } module.exports = shortOut; }), 6063: (function (module, __unused_webpack_exports, __webpack_require__) { var ListCache = __webpack_require__(283); /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear() { this.__data__ = new ListCache; this.size = 0; } module.exports = stackClear; }), 7727: (function (module) { /** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function stackDelete(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } module.exports = stackDelete; }), 3281: (function (module) { /** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function stackGet(key) { return this.__data__.get(key); } module.exports = stackGet; }), 6667: (function (module) { /** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function stackHas(key) { return this.__data__.has(key); } module.exports = stackHas; }), 1270: (function (module, __unused_webpack_exports, __webpack_require__) { var ListCache = __webpack_require__(283), Map = __webpack_require__(9036), MapCache = __webpack_require__(4544); /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } module.exports = stackSet; }), 6749: (function (module, __unused_webpack_exports, __webpack_require__) { var asciiSize = __webpack_require__(609), hasUnicode = __webpack_require__(9520), unicodeSize = __webpack_require__(9668); /** * Gets the number of symbols in `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the string size. */ function stringSize(string) { return hasUnicode(string) ? unicodeSize(string) : asciiSize(string); } module.exports = stringSize; }), 8997: (function (module, __unused_webpack_exports, __webpack_require__) { var memoizeCapped = __webpack_require__(6141); /** Used to match property names within property paths. */ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46 /* . */) { result.push(''); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); module.exports = stringToPath; }), 8481: (function (module, __unused_webpack_exports, __webpack_require__) { var isSymbol = __webpack_require__(1359); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = toKey; }), 1473: (function (module) { /** Used for built-in method references. */ var funcProto = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } module.exports = toSource; }), 3230: (function (module) { /** Used to match a single whitespace character. */ var reWhitespace = /\s/; /** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ function trimmedEndIndex(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) {} return index; } module.exports = trimmedEndIndex; }), 9668: (function (module) { /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff', rsComboMarksRange = '\\u0300-\\u036f', reComboHalfMarksRange = '\\ufe20-\\ufe2f', rsComboSymbolsRange = '\\u20d0-\\u20ff', rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsAstral = '[' + rsAstralRange + ']', rsCombo = '[' + rsComboRange + ']', rsFitz = '\\ud83c[\\udffb-\\udfff]', rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsNonAstral = '[^' + rsAstralRange + ']', rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsZWJ = '\\u200d'; /** Used to compose unicode regexes. */ var reOptMod = rsModifier + '?', rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); /** * Gets the size of a Unicode `string`. * * @private * @param {string} string The string inspect. * @returns {number} Returns the string size. */ function unicodeSize(string) { var result = reUnicode.lastIndex = 0; while (reUnicode.test(string)) { ++result; } return result; } module.exports = unicodeSize; }), 219: (function (module, __unused_webpack_exports, __webpack_require__) { var LazyWrapper = __webpack_require__(4281), LodashWrapper = __webpack_require__(9675), copyArray = __webpack_require__(8606); /** * Creates a clone of `wrapper`. * * @private * @param {Object} wrapper The wrapper to clone. * @returns {Object} Returns the cloned wrapper. */ function wrapperClone(wrapper) { if (wrapper instanceof LazyWrapper) { return wrapper.clone(); } var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); result.__actions__ = copyArray(wrapper.__actions__); result.__index__ = wrapper.__index__; result.__values__ = wrapper.__values__; return result; } module.exports = wrapperClone; }), 3789: (function (module, __unused_webpack_exports, __webpack_require__) { var baseClamp = __webpack_require__(2009), toNumber = __webpack_require__(6127); /** * Clamps `number` within the inclusive `lower` and `upper` bounds. * * @static * @memberOf _ * @since 4.0.0 * @category Number * @param {number} number The number to clamp. * @param {number} [lower] The lower bound. * @param {number} upper The upper bound. * @returns {number} Returns the clamped number. * @example * * _.clamp(-10, -5, 5); * // => -5 * * _.clamp(10, -5, 5); * // => 5 */ function clamp(number, lower, upper) { if (upper === undefined) { upper = lower; lower = undefined; } if (upper !== undefined) { upper = toNumber(upper); upper = upper === upper ? upper : 0; } if (lower !== undefined) { lower = toNumber(lower); lower = lower === lower ? lower : 0; } return baseClamp(toNumber(number), lower, upper); } module.exports = clamp; }), 5055: (function (module) { /** * Creates a function that returns `value`. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {*} value The value to return from the new function. * @returns {Function} Returns the new constant function. * @example * * var objects = _.times(2, _.constant({ 'a': 1 })); * * console.log(objects); * // => [{ 'a': 1 }, { 'a': 1 }] * * console.log(objects[0] === objects[1]); * // => true */ function constant(value) { return function() { return value; }; } module.exports = constant; }), 8305: (function (module, __unused_webpack_exports, __webpack_require__) { var isObject = __webpack_require__(8532), now = __webpack_require__(806), toNumber = __webpack_require__(6127); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max, nativeMin = Math.min; /** * Creates a debounced function that delays invoking `func` until after `wait` * milliseconds have elapsed since the last time the debounced function was * invoked. The debounced function comes with a `cancel` method to cancel * delayed `func` invocations and a `flush` method to immediately invoke them. * Provide `options` to indicate whether `func` should be invoked on the * leading and/or trailing edge of the `wait` timeout. The `func` is invoked * with the last arguments provided to the debounced function. Subsequent * calls to the debounced function return the result of the last `func` * invocation. * * **Note:** If `leading` and `trailing` options are `true`, `func` is * invoked on the trailing edge of the timeout only if the debounced function * is invoked more than once during the `wait` timeout. * * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred * until to the next tick, similar to `setTimeout` with a timeout of `0`. * * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) * for details over the differences between `_.debounce` and `_.throttle`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to debounce. * @param {number} [wait=0] The number of milliseconds to delay. * @param {Object} [options={}] The options object. * @param {boolean} [options.leading=false] * Specify invoking on the leading edge of the timeout. * @param {number} [options.maxWait] * The maximum time `func` is allowed to be delayed before it's invoked. * @param {boolean} [options.trailing=true] * Specify invoking on the trailing edge of the timeout. * @returns {Function} Returns the new debounced function. * @example * * // Avoid costly calculations while the window size is in flux. * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); * * // Invoke `sendMail` when clicked, debouncing subsequent calls. * jQuery(element).on('click', _.debounce(sendMail, 300, { * 'leading': true, * 'trailing': false * })); * * // Ensure `batchLog` is invoked once after 1 second of debounced calls. * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); * var source = new EventSource('/stream'); * jQuery(source).on('message', debounced); * * // Cancel the trailing debounced invocation. * jQuery(window).on('popstate', debounced.cancel); */ function debounce(func, wait, options) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } wait = toNumber(wait) || 0; if (isObject(options)) { leading = !!options.leading; maxing = 'maxWait' in options; maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = 'trailing' in options ? !!options.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = undefined; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } function leadingEdge(time) { // Reset any `maxWait` timer. lastInvokeTime = time; // Start the timer for the trailing edge. timerId = setTimeout(timerExpired, wait); // Invoke the leading edge. return leading ? invokeFunc(time) : result; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the // trailing edge, the system time has gone backwards and we're treating // it as the trailing edge, or we've hit the `maxWait` limit. return (lastCallTime === undefined || (timeSinceLastCall >= wait) || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); } function timerExpired() { var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); } // Restart the timer. timerId = setTimeout(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been // debounced at least once. if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = undefined; return result; } function cancel() { if (timerId !== undefined) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = undefined; } function flush() { return timerId === undefined ? result : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === undefined) { return leadingEdge(lastCallTime); } if (maxing) { // Handle invocations in a tight loop. clearTimeout(timerId); timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === undefined) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } module.exports = debounce; }), 4075: (function (module) { /** * Checks `value` to determine whether a default value should be returned in * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, * or `undefined`. * * @static * @memberOf _ * @since 4.14.0 * @category Util * @param {*} value The value to check. * @param {*} defaultValue The default value. * @returns {*} Returns the resolved value. * @example * * _.defaultTo(1, 10); * // => 1 * * _.defaultTo(undefined, 10); * // => 10 */ function defaultTo(value, defaultValue) { return (value == null || value !== value) ? defaultValue : value; } module.exports = defaultTo; }), 4071: (function (module) { /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || (value !== value && other !== other); } module.exports = eq; }), 9777: (function (module, __unused_webpack_exports, __webpack_require__) { var createFind = __webpack_require__(727), findIndex = __webpack_require__(3142); /** * Iterates over elements of `collection`, returning the first element * `predicate` returns truthy for. The predicate is invoked with three * arguments: (value, index|key, collection). * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=0] The index to search from. * @returns {*} Returns the matched element, else `undefined`. * @example * * var users = [ * { 'user': 'barney', 'age': 36, 'active': true }, * { 'user': 'fred', 'age': 40, 'active': false }, * { 'user': 'pebbles', 'age': 1, 'active': true } * ]; * * _.find(users, function(o) { return o.age < 40; }); * // => object for 'barney' * * // The `_.matches` iteratee shorthand. * _.find(users, { 'age': 1, 'active': true }); * // => object for 'pebbles' * * // The `_.matchesProperty` iteratee shorthand. * _.find(users, ['active', false]); * // => object for 'fred' * * // The `_.property` iteratee shorthand. * _.find(users, 'active'); * // => object for 'barney' */ var find = createFind(findIndex); module.exports = find; }), 3142: (function (module, __unused_webpack_exports, __webpack_require__) { var baseFindIndex = __webpack_require__(2056), baseIteratee = __webpack_require__(5462), toInteger = __webpack_require__(8536); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * This method is like `_.find` except that it returns the index of the first * element `predicate` returns truthy for instead of the element itself. * * @static * @memberOf _ * @since 1.1.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=0] The index to search from. * @returns {number} Returns the index of the found element, else `-1`. * @example * * var users = [ * { 'user': 'barney', 'active': false }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': true } * ]; * * _.findIndex(users, function(o) { return o.user == 'barney'; }); * // => 0 * * // The `_.matches` iteratee shorthand. * _.findIndex(users, { 'user': 'fred', 'active': false }); * // => 1 * * // The `_.matchesProperty` iteratee shorthand. * _.findIndex(users, ['active', false]); * // => 0 * * // The `_.property` iteratee shorthand. * _.findIndex(users, 'active'); * // => 2 */ function findIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = fromIndex == null ? 0 : toInteger(fromIndex); if (index < 0) { index = nativeMax(length + index, 0); } return baseFindIndex(array, baseIteratee(predicate, 3), index); } module.exports = findIndex; }), 5720: (function (module, __unused_webpack_exports, __webpack_require__) { var createFind = __webpack_require__(727), findLastIndex = __webpack_require__(3758); /** * This method is like `_.find` except that it iterates over elements of * `collection` from right to left. * * @static * @memberOf _ * @since 2.0.0 * @category Collection * @param {Array|Object} collection The collection to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=collection.length-1] The index to search from. * @returns {*} Returns the matched element, else `undefined`. * @example * * _.findLast([1, 2, 3, 4], function(n) { * return n % 2 == 1; * }); * // => 3 */ var findLast = createFind(findLastIndex); module.exports = findLast; }), 3758: (function (module, __unused_webpack_exports, __webpack_require__) { var baseFindIndex = __webpack_require__(2056), baseIteratee = __webpack_require__(5462), toInteger = __webpack_require__(8536); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max, nativeMin = Math.min; /** * This method is like `_.findIndex` except that it iterates over elements * of `collection` from right to left. * * @static * @memberOf _ * @since 2.0.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=array.length-1] The index to search from. * @returns {number} Returns the index of the found element, else `-1`. * @example * * var users = [ * { 'user': 'barney', 'active': true }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': false } * ]; * * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); * // => 2 * * // The `_.matches` iteratee shorthand. * _.findLastIndex(users, { 'user': 'barney', 'active': true }); * // => 0 * * // The `_.matchesProperty` iteratee shorthand. * _.findLastIndex(users, ['active', false]); * // => 2 * * // The `_.property` iteratee shorthand. * _.findLastIndex(users, 'active'); * // => 0 */ function findLastIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = length - 1; if (fromIndex !== undefined) { index = toInteger(fromIndex); index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); } return baseFindIndex(array, baseIteratee(predicate, 3), index, true); } module.exports = findLastIndex; }), 6380: (function (module, __unused_webpack_exports, __webpack_require__) { var baseFlatten = __webpack_require__(5265); /** * Flattens `array` a single level deep. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } module.exports = flatten; }), 5801: (function (module, __unused_webpack_exports, __webpack_require__) { var createFlow = __webpack_require__(914); /** * Creates a function that returns the result of invoking the given functions * with the `this` binding of the created function, where each successive * invocation is supplied the return value of the previous. * * @static * @memberOf _ * @since 3.0.0 * @category Util * @param {...(Function|Function[])} [funcs] The functions to invoke. * @returns {Function} Returns the new composite function. * @see _.flowRight * @example * * function square(n) { * return n * n; * } * * var addSquare = _.flow([_.add, square]); * addSquare(1, 2); * // => 9 */ var flow = createFlow(); module.exports = flow; }), 2397: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayEach = __webpack_require__(4970), baseEach = __webpack_require__(8264), castFunction = __webpack_require__(8269), isArray = __webpack_require__(6377); /** * Iterates over elements of `collection` and invokes `iteratee` for each element. * The iteratee is invoked with three arguments: (value, index|key, collection). * Iteratee functions may exit iteration early by explicitly returning `false`. * * **Note:** As with other "Collections" methods, objects with a "length" * property are iterated like arrays. To avoid this behavior use `_.forIn` * or `_.forOwn` for object iteration. * * @static * @memberOf _ * @since 0.1.0 * @alias each * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array|Object} Returns `collection`. * @see _.forEachRight * @example * * _.forEach([1, 2], function(value) { * console.log(value); * }); * // => Logs `1` then `2`. * * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { * console.log(key); * }); * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ function forEach(collection, iteratee) { var func = isArray(collection) ? arrayEach : baseEach; return func(collection, castFunction(iteratee)); } module.exports = forEach; }), 4738: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGet = __webpack_require__(1957); /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } module.exports = get; }), 9290: (function (module, __unused_webpack_exports, __webpack_require__) { var baseHasIn = __webpack_require__(6993), hasPath = __webpack_require__(7635); /** * Checks if `path` is a direct or inherited property of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.hasIn(object, 'a'); * // => true * * _.hasIn(object, 'a.b'); * // => true * * _.hasIn(object, ['a', 'b']); * // => true * * _.hasIn(object, 'b'); * // => false */ function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } module.exports = hasIn; }), 1622: (function (module) { /** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */ function identity(value) { return value; } module.exports = identity; }), 9732: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsArguments = __webpack_require__(841), isObjectLike = __webpack_require__(7013); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; module.exports = isArguments; }), 6377: (function (module) { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; }), 508: (function (module, __unused_webpack_exports, __webpack_require__) { var isFunction = __webpack_require__(6644), isLength = __webpack_require__(7924); /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } module.exports = isArrayLike; }), 6018: (function (module, exports, __webpack_require__) { /* module decorator */ module = __webpack_require__.nmd(module); var root = __webpack_require__(5238), stubFalse = __webpack_require__(5786); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; }), 6633: (function (module, __unused_webpack_exports, __webpack_require__) { var baseKeys = __webpack_require__(7407), getTag = __webpack_require__(9937), isArguments = __webpack_require__(9732), isArray = __webpack_require__(6377), isArrayLike = __webpack_require__(508), isBuffer = __webpack_require__(6018), isPrototype = __webpack_require__(8857), isTypedArray = __webpack_require__(8586); /** `Object#toString` result references. */ var mapTag = '[object Map]', setTag = '[object Set]'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if `value` is an empty object, collection, map, or set. * * Objects are considered empty if they have no own enumerable string keyed * properties. * * Array-like values such as `arguments` objects, arrays, buffers, strings, or * jQuery-like collections are considered empty if they have a `length` of `0`. * Similarly, maps and sets are considered empty if they have a `size` of `0`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is empty, else `false`. * @example * * _.isEmpty(null); * // => true * * _.isEmpty(true); * // => true * * _.isEmpty(1); * // => true * * _.isEmpty([1, 2, 3]); * // => false * * _.isEmpty({ 'a': 1 }); * // => false */ function isEmpty(value) { if (value == null) { return true; } if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isTypedArray(value) || isArguments(value))) { return !value.length; } var tag = getTag(value); if (tag == mapTag || tag == setTag) { return !value.size; } if (isPrototype(value)) { return !baseKeys(value).length; } for (var key in value) { if (hasOwnProperty.call(value, key)) { return false; } } return true; } module.exports = isEmpty; }), 6644: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isObject = __webpack_require__(8532); /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } module.exports = isFunction; }), 7924: (function (module) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } module.exports = isLength; }), 8532: (function (module) { /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } module.exports = isObject; }), 7013: (function (module) { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } module.exports = isObjectLike; }), 1085: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isArray = __webpack_require__(6377), isObjectLike = __webpack_require__(7013); /** `Object#toString` result references. */ var stringTag = '[object String]'; /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */ function isString(value) { return typeof value == 'string' || (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); } module.exports = isString; }), 1359: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isObjectLike = __webpack_require__(7013); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } module.exports = isSymbol; }), 8586: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsTypedArray = __webpack_require__(2195), baseUnary = __webpack_require__(7509), nodeUtil = __webpack_require__(895); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; module.exports = isTypedArray; }), 7361: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(4979), baseKeys = __webpack_require__(7407), isArrayLike = __webpack_require__(508); /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } module.exports = keys; }), 3747: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(4979), baseKeysIn = __webpack_require__(9237), isArrayLike = __webpack_require__(508); /** * Creates an array of the own and inherited enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } module.exports = keysIn; }), 3729: (function (module, __unused_webpack_exports, __webpack_require__) { var baseAssignValue = __webpack_require__(2676), baseForOwn = __webpack_require__(3406), baseIteratee = __webpack_require__(5462); /** * Creates an object with the same keys as `object` and values generated * by running each own enumerable string keyed property of `object` thru * `iteratee`. The iteratee is invoked with three arguments: * (value, key, object). * * @static * @memberOf _ * @since 2.4.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns the new mapped object. * @see _.mapKeys * @example * * var users = { * 'fred': { 'user': 'fred', 'age': 40 }, * 'pebbles': { 'user': 'pebbles', 'age': 1 } * }; * * _.mapValues(users, function(o) { return o.age; }); * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) * * // The `_.property` iteratee shorthand. * _.mapValues(users, 'age'); * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) */ function mapValues(object, iteratee) { var result = {}; iteratee = baseIteratee(iteratee, 3); baseForOwn(object, function(value, key, object) { baseAssignValue(result, key, iteratee(value, key, object)); }); return result; } module.exports = mapValues; }), 4984: (function (module, __unused_webpack_exports, __webpack_require__) { var MapCache = __webpack_require__(4544); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize(func, resolver) { if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache); return memoized; } // Expose `MapCache`. memoize.Cache = MapCache; module.exports = memoize; }), 3103: (function (module) { /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that negates the result of the predicate `func`. The * `func` predicate is invoked with the `this` binding and arguments of the * created function. * * @static * @memberOf _ * @since 3.0.0 * @category Function * @param {Function} predicate The predicate to negate. * @returns {Function} Returns the new negated function. * @example * * function isEven(n) { * return n % 2 == 0; * } * * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); * // => [1, 3, 5] */ function negate(predicate) { if (typeof predicate != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } return function() { var args = arguments; switch (args.length) { case 0: return !predicate.call(this); case 1: return !predicate.call(this, args[0]); case 2: return !predicate.call(this, args[0], args[1]); case 3: return !predicate.call(this, args[0], args[1], args[2]); } return !predicate.apply(this, args); }; } module.exports = negate; }), 6032: (function (module) { /** * This method returns `undefined`. * * @static * @memberOf _ * @since 2.3.0 * @category Util * @example * * _.times(2, _.noop); * // => [undefined, undefined] */ function noop() { // No operation performed. } module.exports = noop; }), 806: (function (module, __unused_webpack_exports, __webpack_require__) { var root = __webpack_require__(5238); /** * Gets the timestamp of the number of milliseconds that have elapsed since * the Unix epoch (1 January 1970 00:00:00 UTC). * * @static * @memberOf _ * @since 2.4.0 * @category Date * @returns {number} Returns the timestamp. * @example * * _.defer(function(stamp) { * console.log(_.now() - stamp); * }, _.now()); * // => Logs the number of milliseconds it took for the deferred invocation. */ var now = function() { return root.Date.now(); }; module.exports = now; }), 3452: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIteratee = __webpack_require__(5462), negate = __webpack_require__(3103), pickBy = __webpack_require__(4103); /** * The opposite of `_.pickBy`; this method creates an object composed of * the own and inherited enumerable string keyed properties of `object` that * `predicate` doesn't return truthy for. The predicate is invoked with two * arguments: (value, key). * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The source object. * @param {Function} [predicate=_.identity] The function invoked per property. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.omitBy(object, _.isNumber); * // => { 'b': '2' } */ function omitBy(object, predicate) { return pickBy(object, negate(baseIteratee(predicate))); } module.exports = omitBy; }), 4103: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayMap = __webpack_require__(1098), baseIteratee = __webpack_require__(5462), basePickBy = __webpack_require__(7100), getAllKeysIn = __webpack_require__(9254); /** * Creates an object composed of the `object` properties `predicate` returns * truthy for. The predicate is invoked with two arguments: (value, key). * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The source object. * @param {Function} [predicate=_.identity] The function invoked per property. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.pickBy(object, _.isNumber); * // => { 'a': 1, 'c': 3 } */ function pickBy(object, predicate) { if (object == null) { return {}; } var props = arrayMap(getAllKeysIn(object), function(prop) { return [prop]; }); predicate = baseIteratee(predicate); return basePickBy(object, props, function(value, path) { return predicate(value, path[0]); }); } module.exports = pickBy; }), 8303: (function (module, __unused_webpack_exports, __webpack_require__) { var baseProperty = __webpack_require__(2726), basePropertyDeep = __webpack_require__(1374), isKey = __webpack_require__(7074), toKey = __webpack_require__(8481); /** * Creates a function that returns the value at `path` of a given object. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. * @example * * var objects = [ * { 'a': { 'b': 2 } }, * { 'a': { 'b': 1 } } * ]; * * _.map(objects, _.property('a.b')); * // => [2, 1] * * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); * // => [1, 2] */ function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } module.exports = property; }), 1455: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayReduce = __webpack_require__(2607), baseEach = __webpack_require__(8264), baseIteratee = __webpack_require__(5462), baseReduce = __webpack_require__(9864), isArray = __webpack_require__(6377); /** * Reduces `collection` to a value which is the accumulated result of running * each element in `collection` thru `iteratee`, where each successive * invocation is supplied the return value of the previous. If `accumulator` * is not given, the first element of `collection` is used as the initial * value. The iteratee is invoked with four arguments: * (accumulator, value, index|key, collection). * * Many lodash methods are guarded to work as iteratees for methods like * `_.reduce`, `_.reduceRight`, and `_.transform`. * * The guarded methods are: * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, * and `sortBy` * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @param {*} [accumulator] The initial value. * @returns {*} Returns the accumulated value. * @see _.reduceRight * @example * * _.reduce([1, 2], function(sum, n) { * return sum + n; * }, 0); * // => 3 * * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { * (result[value] || (result[value] = [])).push(key); * return result; * }, {}); * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) */ function reduce(collection, iteratee, accumulator) { var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach); } module.exports = reduce; }), 4659: (function (module, __unused_webpack_exports, __webpack_require__) { var baseKeys = __webpack_require__(7407), getTag = __webpack_require__(9937), isArrayLike = __webpack_require__(508), isString = __webpack_require__(1085), stringSize = __webpack_require__(6749); /** `Object#toString` result references. */ var mapTag = '[object Map]', setTag = '[object Set]'; /** * Gets the size of `collection` by returning its length for array-like * values or the number of own enumerable string keyed properties for objects. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @returns {number} Returns the collection size. * @example * * _.size([1, 2, 3]); * // => 3 * * _.size({ 'a': 1, 'b': 2 }); * // => 2 * * _.size('pebbles'); * // => 7 */ function size(collection) { if (collection == null) { return 0; } if (isArrayLike(collection)) { return isString(collection) ? stringSize(collection) : collection.length; } var tag = getTag(collection); if (tag == mapTag || tag == setTag) { return collection.size; } return baseKeys(collection).length; } module.exports = size; }), 1036: (function (module) { /** * This method returns a new empty array. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {Array} Returns the new empty array. * @example * * var arrays = _.times(2, _.stubArray); * * console.log(arrays); * // => [[], []] * * console.log(arrays[0] === arrays[1]); * // => false */ function stubArray() { return []; } module.exports = stubArray; }), 5786: (function (module) { /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } module.exports = stubFalse; }), 5082: (function (module, __unused_webpack_exports, __webpack_require__) { var debounce = __webpack_require__(8305), isObject = __webpack_require__(8532); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a throttled function that only invokes `func` at most once per * every `wait` milliseconds. The throttled function comes with a `cancel` * method to cancel delayed `func` invocations and a `flush` method to * immediately invoke them. Provide `options` to indicate whether `func` * should be invoked on the leading and/or trailing edge of the `wait` * timeout. The `func` is invoked with the last arguments provided to the * throttled function. Subsequent calls to the throttled function return the * result of the last `func` invocation. * * **Note:** If `leading` and `trailing` options are `true`, `func` is * invoked on the trailing edge of the timeout only if the throttled function * is invoked more than once during the `wait` timeout. * * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred * until to the next tick, similar to `setTimeout` with a timeout of `0`. * * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) * for details over the differences between `_.throttle` and `_.debounce`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to throttle. * @param {number} [wait=0] The number of milliseconds to throttle invocations to. * @param {Object} [options={}] The options object. * @param {boolean} [options.leading=true] * Specify invoking on the leading edge of the timeout. * @param {boolean} [options.trailing=true] * Specify invoking on the trailing edge of the timeout. * @returns {Function} Returns the new throttled function. * @example * * // Avoid excessively updating the position while scrolling. * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); * * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); * jQuery(element).on('click', throttled); * * // Cancel the trailing throttled invocation. * jQuery(window).on('popstate', throttled.cancel); */ function throttle(func, wait, options) { var leading = true, trailing = true; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } if (isObject(options)) { leading = 'leading' in options ? !!options.leading : leading; trailing = 'trailing' in options ? !!options.trailing : trailing; } return debounce(func, wait, { 'leading': leading, 'maxWait': wait, 'trailing': trailing }); } module.exports = throttle; }), 5597: (function (module, __unused_webpack_exports, __webpack_require__) { var toNumber = __webpack_require__(6127); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; /** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */ function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = (value < 0 ? -1 : 1); return sign * MAX_INTEGER; } return value === value ? value : 0; } module.exports = toFinite; }), 8536: (function (module, __unused_webpack_exports, __webpack_require__) { var toFinite = __webpack_require__(5597); /** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */ function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; } module.exports = toInteger; }), 6127: (function (module, __unused_webpack_exports, __webpack_require__) { var baseTrim = __webpack_require__(1072), isObject = __webpack_require__(8532), isSymbol = __webpack_require__(1359); /** Used as references for various `Number` constants. */ var NAN = 0 / 0; /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; /** Built-in method references without a dependency on `root`. */ var freeParseInt = parseInt; /** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */ function toNumber(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject(other) ? (other + '') : other; } if (typeof value != 'string') { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return (isBinary || reIsOctal.test(value)) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : (reIsBadHex.test(value) ? NAN : +value); } module.exports = toNumber; }), 6214: (function (module, __unused_webpack_exports, __webpack_require__) { var baseToString = __webpack_require__(9653); /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } module.exports = toString; }), 6985: (function (module, __unused_webpack_exports, __webpack_require__) { var LazyWrapper = __webpack_require__(4281), LodashWrapper = __webpack_require__(9675), baseLodash = __webpack_require__(4382), isArray = __webpack_require__(6377), isObjectLike = __webpack_require__(7013), wrapperClone = __webpack_require__(219); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates a `lodash` object which wraps `value` to enable implicit method * chain sequences. Methods that operate on and return arrays, collections, * and functions can be chained together. Methods that retrieve a single value * or may return a primitive value will automatically end the chain sequence * and return the unwrapped value. Otherwise, the value must be unwrapped * with `_#value`. * * Explicit chain sequences, which must be unwrapped with `_#value`, may be * enabled using `_.chain`. * * The execution of chained methods is lazy, that is, it's deferred until * `_#value` is implicitly or explicitly called. * * Lazy evaluation allows several methods to support shortcut fusion. * Shortcut fusion is an optimization to merge iteratee calls; this avoids * the creation of intermediate arrays and can greatly reduce the number of * iteratee executions. Sections of a chain sequence qualify for shortcut * fusion if the section is applied to an array and iteratees accept only * one argument. The heuristic for whether a section qualifies for shortcut * fusion is subject to change. * * Chaining is supported in custom builds as long as the `_#value` method is * directly or indirectly included in the build. * * In addition to lodash methods, wrappers have `Array` and `String` methods. * * The wrapper `Array` methods are: * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` * * The wrapper `String` methods are: * `replace` and `split` * * The wrapper methods that support shortcut fusion are: * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` * * The chainable wrapper methods are: * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, * `zipObject`, `zipObjectDeep`, and `zipWith` * * The wrapper methods that are **not** chainable by default are: * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, * `upperFirst`, `value`, and `words` * * @name _ * @constructor * @category Seq * @param {*} value The value to wrap in a `lodash` instance. * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * function square(n) { * return n * n; * } * * var wrapped = _([1, 2, 3]); * * // Returns an unwrapped value. * wrapped.reduce(_.add); * // => 6 * * // Returns a wrapped value. * var squares = wrapped.map(square); * * _.isArray(squares); * // => false * * _.isArray(squares.value()); * // => true */ function lodash(value) { if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { if (value instanceof LodashWrapper) { return value; } if (hasOwnProperty.call(value, '__wrapped__')) { return wrapperClone(value); } } return new LodashWrapper(value); } // Ensure wrappers are instances of `baseLodash`. lodash.prototype = baseLodash.prototype; lodash.prototype.constructor = lodash; module.exports = lodash; }), 9516: (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { compose: () => (/* reexport */ compose), createStore: () => (/* reexport */ createStore_createStore), bindActionCreators: () => (/* reexport */ bindActionCreators), combineReducers: () => (/* reexport */ combineReducers), applyMiddleware: () => (/* reexport */ applyMiddleware) }); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_freeGlobal.js /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; /* ESM default export */ const _freeGlobal = (freeGlobal); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_root.js /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = _freeGlobal || freeSelf || Function('return this')(); /* ESM default export */ const _root = (root); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_Symbol.js /** Built-in value references. */ var Symbol = _root.Symbol; /* ESM default export */ const _Symbol = (Symbol); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_getRawTag.js /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var _getRawTag_hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = _getRawTag_hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } /* ESM default export */ const _getRawTag = (getRawTag); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_objectToString.js /** Used for built-in method references. */ var _objectToString_objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var _objectToString_nativeObjectToString = _objectToString_objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return _objectToString_nativeObjectToString.call(value); } /* ESM default export */ const _objectToString = (objectToString); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_baseGetTag.js /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var _baseGetTag_symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (_baseGetTag_symToStringTag && _baseGetTag_symToStringTag in Object(value)) ? _getRawTag(value) : _objectToString(value); } /* ESM default export */ const _baseGetTag = (baseGetTag); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_overArg.js /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } /* ESM default export */ const _overArg = (overArg); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_getPrototype.js /** Built-in value references. */ var getPrototype = _overArg(Object.getPrototypeOf, Object); /* ESM default export */ const _getPrototype = (getPrototype); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/isObjectLike.js /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } /* ESM default export */ const lodash_es_isObjectLike = (isObjectLike); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/isPlainObject.js /** `Object#toString` result references. */ var objectTag = '[object Object]'; /** Used for built-in method references. */ var funcProto = Function.prototype, isPlainObject_objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var isPlainObject_hasOwnProperty = isPlainObject_objectProto.hasOwnProperty; /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */ function isPlainObject_isPlainObject(value) { if (!lodash_es_isObjectLike(value) || _baseGetTag(value) != objectTag) { return false; } var proto = _getPrototype(value); if (proto === null) { return true; } var Ctor = isPlainObject_hasOwnProperty.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } /* ESM default export */ const lodash_es_isPlainObject = (isPlainObject_isPlainObject); // EXTERNAL MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/index.js + 1 modules var es = __webpack_require__(3485); ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/createStore.js /** * These are private action types reserved by Redux. * For any unknown actions, you must return the current state. * If the current state is undefined, you must return the initial state. * Do not reference these action types directly in your code. */ var createStore_ActionTypes = { INIT: '@@redux/INIT' }; /** * Creates a Redux store that holds the state tree. * The only way to change the data in the store is to call `dispatch()` on it. * * There should only be a single store in your app. To specify how different * parts of the state tree respond to actions, you may combine several reducers * into a single reducer function by using `combineReducers`. * * @param {Function} reducer A function that returns the next state tree, given * the current state tree and the action to handle. * * @param {any} [preloadedState] The initial state. You may optionally specify it * to hydrate the state from the server in universal apps, or to restore a * previously serialized user session. * If you use `combineReducers` to produce the root reducer function, this must be * an object with the same shape as `combineReducers` keys. * * @param {Function} enhancer The store enhancer. You may optionally specify it * to enhance the store with third-party capabilities such as middleware, * time travel, persistence, etc. The only store enhancer that ships with Redux * is `applyMiddleware()`. * * @returns {Store} A Redux store that lets you read the state, dispatch actions * and subscribe to changes. */ function createStore_createStore(reducer, preloadedState, enhancer) { var _ref2; if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { enhancer = preloadedState; preloadedState = undefined; } if (typeof enhancer !== 'undefined') { if (typeof enhancer !== 'function') { throw new Error('Expected the enhancer to be a function.'); } return enhancer(createStore_createStore)(reducer, preloadedState); } if (typeof reducer !== 'function') { throw new Error('Expected the reducer to be a function.'); } var currentReducer = reducer; var currentState = preloadedState; var currentListeners = []; var nextListeners = currentListeners; var isDispatching = false; function ensureCanMutateNextListeners() { if (nextListeners === currentListeners) { nextListeners = currentListeners.slice(); } } /** * Reads the state tree managed by the store. * * @returns {any} The current state tree of your application. */ function getState() { return currentState; } /** * Adds a change listener. It will be called any time an action is dispatched, * and some part of the state tree may potentially have changed. You may then * call `getState()` to read the current state tree inside the callback. * * You may call `dispatch()` from a change listener, with the following * caveats: * * 1. The subscriptions are snapshotted just before every `dispatch()` call. * If you subscribe or unsubscribe while the listeners are being invoked, this * will not have any effect on the `dispatch()` that is currently in progress. * However, the next `dispatch()` call, whether nested or not, will use a more * recent snapshot of the subscription list. * * 2. The listener should not expect to see all state changes, as the state * might have been updated multiple times during a nested `dispatch()` before * the listener is called. It is, however, guaranteed that all subscribers * registered before the `dispatch()` started will be called with the latest * state by the time it exits. * * @param {Function} listener A callback to be invoked on every dispatch. * @returns {Function} A function to remove this change listener. */ function subscribe(listener) { if (typeof listener !== 'function') { throw new Error('Expected listener to be a function.'); } var isSubscribed = true; ensureCanMutateNextListeners(); nextListeners.push(listener); return function unsubscribe() { if (!isSubscribed) { return; } isSubscribed = false; ensureCanMutateNextListeners(); var index = nextListeners.indexOf(listener); nextListeners.splice(index, 1); }; } /** * Dispatches an action. It is the only way to trigger a state change. * * The `reducer` function, used to create the store, will be called with the * current state tree and the given `action`. Its return value will * be considered the **next** state of the tree, and the change listeners * will be notified. * * The base implementation only supports plain object actions. If you want to * dispatch a Promise, an Observable, a thunk, or something else, you need to * wrap your store creating function into the corresponding middleware. For * example, see the documentation for the `redux-thunk` package. Even the * middleware will eventually dispatch plain object actions using this method. * * @param {Object} action A plain object representing “what changed”. It is * a good idea to keep actions serializable so you can record and replay user * sessions, or use the time travelling `redux-devtools`. An action must have * a `type` property which may not be `undefined`. It is a good idea to use * string constants for action types. * * @returns {Object} For convenience, the same action object you dispatched. * * Note that, if you use a custom middleware, it may wrap `dispatch()` to * return something else (for example, a Promise you can await). */ function dispatch(action) { if (!lodash_es_isPlainObject(action)) { throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.'); } if (typeof action.type === 'undefined') { throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?'); } if (isDispatching) { throw new Error('Reducers may not dispatch actions.'); } try { isDispatching = true; currentState = currentReducer(currentState, action); } finally { isDispatching = false; } var listeners = currentListeners = nextListeners; for (var i = 0; i < listeners.length; i++) { listeners[i](); } return action; } /** * Replaces the reducer currently used by the store to calculate the state. * * You might need this if your app implements code splitting and you want to * load some of the reducers dynamically. You might also need this if you * implement a hot reloading mechanism for Redux. * * @param {Function} nextReducer The reducer for the store to use instead. * @returns {void} */ function replaceReducer(nextReducer) { if (typeof nextReducer !== 'function') { throw new Error('Expected the nextReducer to be a function.'); } currentReducer = nextReducer; dispatch({ type: createStore_ActionTypes.INIT }); } /** * Interoperability point for observable/reactive libraries. * @returns {observable} A minimal observable of state changes. * For more information, see the observable proposal: * https://github.com/zenparsing/es-observable */ function observable() { var _ref; var outerSubscribe = subscribe; return _ref = { /** * The minimal observable subscription method. * @param {Object} observer Any object that can be used as an observer. * The observer object should have a `next` method. * @returns {subscription} An object with an `unsubscribe` method that can * be used to unsubscribe the observable from the store, and prevent further * emission of values from the observable. */ subscribe: function subscribe(observer) { if (typeof observer !== 'object') { throw new TypeError('Expected the observer to be an object.'); } function observeState() { if (observer.next) { observer.next(getState()); } } observeState(); var unsubscribe = outerSubscribe(observeState); return { unsubscribe: unsubscribe }; } }, _ref[es/* default */.Z] = function () { return this; }, _ref; } // When a store is created, an "INIT" action is dispatched so that every // reducer returns their initial state. This effectively populates // the initial state tree. dispatch({ type: createStore_ActionTypes.INIT }); return _ref2 = { dispatch: dispatch, subscribe: subscribe, getState: getState, replaceReducer: replaceReducer }, _ref2[es/* default */.Z] = observable, _ref2; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/combineReducers.js function getUndefinedStateErrorMessage(key, action) { var actionType = action && action.type; var actionName = actionType && '"' + actionType.toString() + '"' || 'an action'; return 'Given action ' + actionName + ', reducer "' + key + '" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state.'; } function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) { var reducerKeys = Object.keys(reducers); var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer'; if (reducerKeys.length === 0) { return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.'; } if (!isPlainObject(inputState)) { return 'The ' + argumentName + ' has unexpected type of "' + {}.toString.call(inputState).match(/\s([a-z|A-Z]+)/)[1] + '". Expected argument to be an object with the following ' + ('keys: "' + reducerKeys.join('", "') + '"'); } var unexpectedKeys = Object.keys(inputState).filter(function (key) { return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]; }); unexpectedKeys.forEach(function (key) { unexpectedKeyCache[key] = true; }); if (unexpectedKeys.length > 0) { return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('"' + unexpectedKeys.join('", "') + '" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('"' + reducerKeys.join('", "') + '". Unexpected keys will be ignored.'); } } function assertReducerSanity(reducers) { Object.keys(reducers).forEach(function (key) { var reducer = reducers[key]; var initialState = reducer(undefined, { type: createStore_ActionTypes.INIT }); if (typeof initialState === 'undefined') { throw new Error('Reducer "' + key + '" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined.'); } var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.'); if (typeof reducer(undefined, { type: type }) === 'undefined') { throw new Error('Reducer "' + key + '" returned undefined when probed with a random type. ' + ('Don\'t try to handle ' + createStore_ActionTypes.INIT + ' or other actions in "redux/*" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined.'); } }); } /** * Turns an object whose values are different reducer functions, into a single * reducer function. It will call every child reducer, and gather their results * into a single state object, whose keys correspond to the keys of the passed * reducer functions. * * @param {Object} reducers An object whose values correspond to different * reducer functions that need to be combined into one. One handy way to obtain * it is to use ES6 `import * as reducers` syntax. The reducers may never return * undefined for any action. Instead, they should return their initial state * if the state passed to them was undefined, and the current state for any * unrecognized action. * * @returns {Function} A reducer function that invokes every reducer inside the * passed object, and builds a state object with the same shape. */ function combineReducers(reducers) { var reducerKeys = Object.keys(reducers); var finalReducers = {}; for (var i = 0; i < reducerKeys.length; i++) { var key = reducerKeys[i]; if (false) {} if (typeof reducers[key] === 'function') { finalReducers[key] = reducers[key]; } } var finalReducerKeys = Object.keys(finalReducers); if (false) { var unexpectedKeyCache } var sanityError; try { assertReducerSanity(finalReducers); } catch (e) { sanityError = e; } return function combination() { var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; var action = arguments[1]; if (sanityError) { throw sanityError; } if (false) { var warningMessage } var hasChanged = false; var nextState = {}; for (var i = 0; i < finalReducerKeys.length; i++) { var key = finalReducerKeys[i]; var reducer = finalReducers[key]; var previousStateForKey = state[key]; var nextStateForKey = reducer(previousStateForKey, action); if (typeof nextStateForKey === 'undefined') { var errorMessage = getUndefinedStateErrorMessage(key, action); throw new Error(errorMessage); } nextState[key] = nextStateForKey; hasChanged = hasChanged || nextStateForKey !== previousStateForKey; } return hasChanged ? nextState : state; }; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/bindActionCreators.js function bindActionCreator(actionCreator, dispatch) { return function () { return dispatch(actionCreator.apply(undefined, arguments)); }; } /** * Turns an object whose values are action creators, into an object with the * same keys, but with every function wrapped into a `dispatch` call so they * may be invoked directly. This is just a convenience method, as you can call * `store.dispatch(MyActionCreators.doSomething())` yourself just fine. * * For convenience, you can also pass a single function as the first argument, * and get a function in return. * * @param {Function|Object} actionCreators An object whose values are action * creator functions. One handy way to obtain it is to use ES6 `import * as` * syntax. You may also pass a single function. * * @param {Function} dispatch The `dispatch` function available on your Redux * store. * * @returns {Function|Object} The object mimicking the original object, but with * every action creator wrapped into the `dispatch` call. If you passed a * function as `actionCreators`, the return value will also be a single * function. */ function bindActionCreators(actionCreators, dispatch) { if (typeof actionCreators === 'function') { return bindActionCreator(actionCreators, dispatch); } if (typeof actionCreators !== 'object' || actionCreators === null) { throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?'); } var keys = Object.keys(actionCreators); var boundActionCreators = {}; for (var i = 0; i < keys.length; i++) { var key = keys[i]; var actionCreator = actionCreators[key]; if (typeof actionCreator === 'function') { boundActionCreators[key] = bindActionCreator(actionCreator, dispatch); } } return boundActionCreators; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/compose.js /** * Composes single-argument functions from right to left. The rightmost * function can take multiple arguments as it provides the signature for * the resulting composite function. * * @param {...Function} funcs The functions to compose. * @returns {Function} A function obtained by composing the argument functions * from right to left. For example, compose(f, g, h) is identical to doing * (...args) => f(g(h(...args))). */ function compose() { for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) { funcs[_key] = arguments[_key]; } if (funcs.length === 0) { return function (arg) { return arg; }; } if (funcs.length === 1) { return funcs[0]; } var last = funcs[funcs.length - 1]; var rest = funcs.slice(0, -1); return function () { return rest.reduceRight(function (composed, f) { return f(composed); }, last.apply(undefined, arguments)); }; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/applyMiddleware.js var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** * Creates a store enhancer that applies middleware to the dispatch method * of the Redux store. This is handy for a variety of tasks, such as expressing * asynchronous actions in a concise manner, or logging every action payload. * * See `redux-thunk` package as an example of the Redux middleware. * * Because middleware is potentially asynchronous, this should be the first * store enhancer in the composition chain. * * Note that each middleware will be given the `dispatch` and `getState` functions * as named arguments. * * @param {...Function} middlewares The middleware chain to be applied. * @returns {Function} A store enhancer applying the middleware. */ function applyMiddleware() { for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) { middlewares[_key] = arguments[_key]; } return function (createStore) { return function (reducer, preloadedState, enhancer) { var store = createStore(reducer, preloadedState, enhancer); var _dispatch = store.dispatch; var chain = []; var middlewareAPI = { getState: store.getState, dispatch: function dispatch(action) { return _dispatch(action); } }; chain = middlewares.map(function (middleware) { return middleware(middlewareAPI); }); _dispatch = compose.apply(undefined, chain)(store.dispatch); return _extends({}, store, { dispatch: _dispatch }); }; }; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/index.js /* * This is a dummy function to check if the function name has been altered by minification. * If the function has been minified and NODE_ENV !== 'production', warn the user. */ function isCrushed() {} if (false) {} }), 3485: (function (module, __webpack_exports__, __webpack_require__) { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Z: () => (/* binding */ es) }); ;// CONCATENATED MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/ponyfill.js function symbolObservablePonyfill(root) { var result; var Symbol = root.Symbol; if (typeof Symbol === 'function') { if (Symbol.observable) { result = Symbol.observable; } else { result = Symbol('observable'); Symbol.observable = result; } } else { result = '@@observable'; } return result; }; ;// CONCATENATED MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/index.js /* module decorator */ module = __webpack_require__.hmd(module); /* global window */ var es_root; if (typeof self !== 'undefined') { es_root = self; } else if (typeof window !== 'undefined') { es_root = window; } else if (typeof __webpack_require__.g !== 'undefined') { es_root = __webpack_require__.g; } else if (true) { es_root = module; } else {} var es_result = symbolObservablePonyfill(es_root); /* ESM default export */ const es = (es_result); }), 1185: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.clone = clone; exports.addLast = addLast; exports.addFirst = addFirst; exports.removeLast = removeLast; exports.removeFirst = removeFirst; exports.insert = insert; exports.removeAt = removeAt; exports.replaceAt = replaceAt; exports.getIn = getIn; exports.set = set; exports.setIn = setIn; exports.update = update; exports.updateIn = updateIn; exports.merge = merge; exports.mergeDeep = mergeDeep; exports.mergeIn = mergeIn; exports.omit = omit; exports.addDefaults = addDefaults; /*! * Timm * * Immutability helpers with fast reads and acceptable writes. * * @copyright Guillermo Grau Panea 2016 * @license MIT */ var INVALID_ARGS = 'INVALID_ARGS'; // =============================================== // ### Helpers // =============================================== function throwStr(msg) { throw new Error(msg); } function getKeysAndSymbols(obj) { var keys = Object.keys(obj); if (Object.getOwnPropertySymbols) { return keys.concat(Object.getOwnPropertySymbols(obj)); } return keys; } var hasOwnProperty = {}.hasOwnProperty; function clone(obj) { if (Array.isArray(obj)) return obj.slice(); var keys = getKeysAndSymbols(obj); var out = {}; for (var i = 0; i < keys.length; i++) { var key = keys[i]; out[key] = obj[key]; } return out; } function doMerge(fAddDefaults, fDeep, first) { var out = first; !(out != null) && throwStr( false ? 0 : INVALID_ARGS); var fChanged = false; for (var _len = arguments.length, rest = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { rest[_key - 3] = arguments[_key]; } for (var idx = 0; idx < rest.length; idx++) { var obj = rest[idx]; if (obj == null) continue; var keys = getKeysAndSymbols(obj); if (!keys.length) continue; for (var j = 0; j <= keys.length; j++) { var key = keys[j]; if (fAddDefaults && out[key] !== undefined) continue; var nextVal = obj[key]; if (fDeep && isObject(out[key]) && isObject(nextVal)) { nextVal = doMerge(fAddDefaults, fDeep, out[key], nextVal); } if (nextVal === undefined || nextVal === out[key]) continue; if (!fChanged) { fChanged = true; out = clone(out); } out[key] = nextVal; } } return out; } function isObject(o) { var type = typeof o === 'undefined' ? 'undefined' : _typeof(o); return o != null && (type === 'object' || type === 'function'); } // _deepFreeze = (obj) -> // Object.freeze obj // for key in Object.getOwnPropertyNames obj // val = obj[key] // if isObject(val) and not Object.isFrozen val // _deepFreeze val // obj // =============================================== // -- ### Arrays // =============================================== // -- #### addLast() // -- Returns a new array with an appended item or items. // -- // -- Usage: `addLast(array: Array, val: Array|T): Array` // -- // -- ```js // -- arr = ['a', 'b'] // -- arr2 = addLast(arr, 'c') // -- // ['a', 'b', 'c'] // -- arr2 === arr // -- // false // -- arr3 = addLast(arr, ['c', 'd']) // -- // ['a', 'b', 'c', 'd'] // -- ``` // `array.concat(val)` also handles the scalar case, // but is apparently very slow function addLast(array, val) { if (Array.isArray(val)) return array.concat(val); return array.concat([val]); } // -- #### addFirst() // -- Returns a new array with a prepended item or items. // -- // -- Usage: `addFirst(array: Array, val: Array|T): Array` // -- // -- ```js // -- arr = ['a', 'b'] // -- arr2 = addFirst(arr, 'c') // -- // ['c', 'a', 'b'] // -- arr2 === arr // -- // false // -- arr3 = addFirst(arr, ['c', 'd']) // -- // ['c', 'd', 'a', 'b'] // -- ``` function addFirst(array, val) { if (Array.isArray(val)) return val.concat(array); return [val].concat(array); } // -- #### removeLast() // -- Returns a new array removing the last item. // -- // -- Usage: `removeLast(array: Array): Array` // -- // -- ```js // -- arr = ['a', 'b'] // -- arr2 = removeLast(arr) // -- // ['a'] // -- arr2 === arr // -- // false // -- // -- // The same array is returned if there are no changes: // -- arr3 = [] // -- removeLast(arr3) === arr3 // -- // true // -- ``` function removeLast(array) { if (!array.length) return array; return array.slice(0, array.length - 1); } // -- #### removeFirst() // -- Returns a new array removing the first item. // -- // -- Usage: `removeFirst(array: Array): Array` // -- // -- ```js // -- arr = ['a', 'b'] // -- arr2 = removeFirst(arr) // -- // ['b'] // -- arr2 === arr // -- // false // -- // -- // The same array is returned if there are no changes: // -- arr3 = [] // -- removeFirst(arr3) === arr3 // -- // true // -- ``` function removeFirst(array) { if (!array.length) return array; return array.slice(1); } // -- #### insert() // -- Returns a new array obtained by inserting an item or items // -- at a specified index. // -- // -- Usage: `insert(array: Array, idx: number, val: Array|T): Array` // -- // -- ```js // -- arr = ['a', 'b', 'c'] // -- arr2 = insert(arr, 1, 'd') // -- // ['a', 'd', 'b', 'c'] // -- arr2 === arr // -- // false // -- insert(arr, 1, ['d', 'e']) // -- // ['a', 'd', 'e', 'b', 'c'] // -- ``` function insert(array, idx, val) { return array.slice(0, idx).concat(Array.isArray(val) ? val : [val]).concat(array.slice(idx)); } // -- #### removeAt() // -- Returns a new array obtained by removing an item at // -- a specified index. // -- // -- Usage: `removeAt(array: Array, idx: number): Array` // -- // -- ```js // -- arr = ['a', 'b', 'c'] // -- arr2 = removeAt(arr, 1) // -- // ['a', 'c'] // -- arr2 === arr // -- // false // -- // -- // The same array is returned if there are no changes: // -- removeAt(arr, 4) === arr // -- // true // -- ``` function removeAt(array, idx) { if (idx >= array.length || idx < 0) return array; return array.slice(0, idx).concat(array.slice(idx + 1)); } // -- #### replaceAt() // -- Returns a new array obtained by replacing an item at // -- a specified index. If the provided item is the same as // -- (*referentially equal to*) the previous item at that position, // -- the original array is returned. // -- // -- Usage: `replaceAt(array: Array, idx: number, newItem: T): Array` // -- // -- ```js // -- arr = ['a', 'b', 'c'] // -- arr2 = replaceAt(arr, 1, 'd') // -- // ['a', 'd', 'c'] // -- arr2 === arr // -- // false // -- // -- // The same object is returned if there are no changes: // -- replaceAt(arr, 1, 'b') === arr // -- // true // -- ``` function replaceAt(array, idx, newItem) { if (array[idx] === newItem) return array; var len = array.length; var result = Array(len); for (var i = 0; i < len; i++) { result[i] = array[i]; } result[idx] = newItem; return result; } // =============================================== // -- ### Collections (objects and arrays) // =============================================== // -- The following types are used throughout this section // -- ```js // -- type ArrayOrObject = Array|Object; // -- type Key = number|string; // -- ``` // -- #### getIn() // -- Returns a value from an object at a given path. Works with // -- nested arrays and objects. If the path does not exist, it returns // -- `undefined`. // -- // -- Usage: `getIn(obj: ?ArrayOrObject, path: Array): any` // -- // -- ```js // -- obj = { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: ['a', 'b', 'c'] } // -- getIn(obj, ['d', 'd1']) // -- // 3 // -- getIn(obj, ['e', 1]) // -- // 'b' // -- ``` function getIn(obj, path) { !Array.isArray(path) && throwStr( false ? 0 : INVALID_ARGS); if (obj == null) return undefined; var ptr = obj; for (var i = 0; i < path.length; i++) { var key = path[i]; ptr = ptr != null ? ptr[key] : undefined; if (ptr === undefined) return ptr; } return ptr; } // -- #### set() // -- Returns a new object with a modified attribute. // -- If the provided value is the same as (*referentially equal to*) // -- the previous value, the original object is returned. // -- // -- Usage: `set(obj: ?T, key: Key, val: any): T` // -- // -- ```js // -- obj = { a: 1, b: 2, c: 3 } // -- obj2 = set(obj, 'b', 5) // -- // { a: 1, b: 5, c: 3 } // -- obj2 === obj // -- // false // -- // -- // The same object is returned if there are no changes: // -- set(obj, 'b', 2) === obj // -- // true // -- ``` function set(obj, key, val) { var fallback = typeof key === 'number' ? [] : {}; var finalObj = obj == null ? fallback : obj; if (finalObj[key] === val) return finalObj; var obj2 = clone(finalObj); obj2[key] = val; return obj2; } // -- #### setIn() // -- Returns a new object with a modified **nested** attribute. // -- // -- Notes: // -- // -- * If the provided value is the same as (*referentially equal to*) // -- the previous value, the original object is returned. // -- * If the path does not exist, it will be created before setting // -- the new value. // -- // -- Usage: `setIn(obj: T, path: Array, val: any): T` // -- // -- ```js // -- obj = { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: { e1: 'foo', e2: 'bar' } } // -- obj2 = setIn(obj, ['d', 'd1'], 4) // -- // { a: 1, b: 2, d: { d1: 4, d2: 4 }, e: { e1: 'foo', e2: 'bar' } } // -- obj2 === obj // -- // false // -- obj2.d === obj.d // -- // false // -- obj2.e === obj.e // -- // true // -- // -- // The same object is returned if there are no changes: // -- obj3 = setIn(obj, ['d', 'd1'], 3) // -- // { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: { e1: 'foo', e2: 'bar' } } // -- obj3 === obj // -- // true // -- obj3.d === obj.d // -- // true // -- obj3.e === obj.e // -- // true // -- // -- // ... unknown paths create intermediate keys. Numeric segments are treated as array indices: // -- setIn({ a: 3 }, ['unknown', 0, 'path'], 4) // -- // { a: 3, unknown: [{ path: 4 }] } // -- ``` function doSetIn(obj, path, val, idx) { var newValue = void 0; var key = path[idx]; if (idx === path.length - 1) { newValue = val; } else { var nestedObj = isObject(obj) && isObject(obj[key]) ? obj[key] : typeof path[idx + 1] === 'number' ? [] : {}; newValue = doSetIn(nestedObj, path, val, idx + 1); } return set(obj, key, newValue); } function setIn(obj, path, val) { if (!path.length) return val; return doSetIn(obj, path, val, 0); } // -- #### update() // -- Returns a new object with a modified attribute, // -- calculated via a user-provided callback based on the current value. // -- If the calculated value is the same as (*referentially equal to*) // -- the previous value, the original object is returned. // -- // -- Usage: `update(obj: T, key: Key, // -- fnUpdate: (prevValue: any) => any): T` // -- // -- ```js // -- obj = { a: 1, b: 2, c: 3 } // -- obj2 = update(obj, 'b', (val) => val + 1) // -- // { a: 1, b: 3, c: 3 } // -- obj2 === obj // -- // false // -- // -- // The same object is returned if there are no changes: // -- update(obj, 'b', (val) => val) === obj // -- // true // -- ``` function update(obj, key, fnUpdate) { var prevVal = obj == null ? undefined : obj[key]; var nextVal = fnUpdate(prevVal); return set(obj, key, nextVal); } // -- #### updateIn() // -- Returns a new object with a modified **nested** attribute, // -- calculated via a user-provided callback based on the current value. // -- If the calculated value is the same as (*referentially equal to*) // -- the previous value, the original object is returned. // -- // -- Usage: `updateIn(obj: T, path: Array, // -- fnUpdate: (prevValue: any) => any): T` // -- // -- ```js // -- obj = { a: 1, d: { d1: 3, d2: 4 } } // -- obj2 = updateIn(obj, ['d', 'd1'], (val) => val + 1) // -- // { a: 1, d: { d1: 4, d2: 4 } } // -- obj2 === obj // -- // false // -- // -- // The same object is returned if there are no changes: // -- obj3 = updateIn(obj, ['d', 'd1'], (val) => val) // -- // { a: 1, d: { d1: 3, d2: 4 } } // -- obj3 === obj // -- // true // -- ``` function updateIn(obj, path, fnUpdate) { var prevVal = getIn(obj, path); var nextVal = fnUpdate(prevVal); return setIn(obj, path, nextVal); } // -- #### merge() // -- Returns a new object built as follows: the overlapping keys from the // -- second one overwrite the corresponding entries from the first one. // -- Similar to `Object.assign()`, but immutable. // -- // -- Usage: // -- // -- * `merge(obj1: Object, obj2: ?Object): Object` // -- * `merge(obj1: Object, ...objects: Array): Object` // -- // -- The unmodified `obj1` is returned if `obj2` does not *provide something // -- new to* `obj1`, i.e. if either of the following // -- conditions are true: // -- // -- * `obj2` is `null` or `undefined` // -- * `obj2` is an object, but it is empty // -- * All attributes of `obj2` are `undefined` // -- * All attributes of `obj2` are referentially equal to the // -- corresponding attributes of `obj1` // -- // -- Note that `undefined` attributes in `obj2` do not modify the // -- corresponding attributes in `obj1`. // -- // -- ```js // -- obj1 = { a: 1, b: 2, c: 3 } // -- obj2 = { c: 4, d: 5 } // -- obj3 = merge(obj1, obj2) // -- // { a: 1, b: 2, c: 4, d: 5 } // -- obj3 === obj1 // -- // false // -- // -- // The same object is returned if there are no changes: // -- merge(obj1, { c: 3 }) === obj1 // -- // true // -- ``` function merge(a, b, c, d, e, f) { for (var _len2 = arguments.length, rest = Array(_len2 > 6 ? _len2 - 6 : 0), _key2 = 6; _key2 < _len2; _key2++) { rest[_key2 - 6] = arguments[_key2]; } return rest.length ? doMerge.call.apply(doMerge, [null, false, false, a, b, c, d, e, f].concat(rest)) : doMerge(false, false, a, b, c, d, e, f); } // -- #### mergeDeep() // -- Returns a new object built as follows: the overlapping keys from the // -- second one overwrite the corresponding entries from the first one. // -- If both the first and second entries are objects they are merged recursively. // -- Similar to `Object.assign()`, but immutable, and deeply merging. // -- // -- Usage: // -- // -- * `mergeDeep(obj1: Object, obj2: ?Object): Object` // -- * `mergeDeep(obj1: Object, ...objects: Array): Object` // -- // -- The unmodified `obj1` is returned if `obj2` does not *provide something // -- new to* `obj1`, i.e. if either of the following // -- conditions are true: // -- // -- * `obj2` is `null` or `undefined` // -- * `obj2` is an object, but it is empty // -- * All attributes of `obj2` are `undefined` // -- * All attributes of `obj2` are referentially equal to the // -- corresponding attributes of `obj1` // -- // -- Note that `undefined` attributes in `obj2` do not modify the // -- corresponding attributes in `obj1`. // -- // -- ```js // -- obj1 = { a: 1, b: 2, c: { a: 1 } } // -- obj2 = { b: 3, c: { b: 2 } } // -- obj3 = mergeDeep(obj1, obj2) // -- // { a: 1, b: 3, c: { a: 1, b: 2 } } // -- obj3 === obj1 // -- // false // -- // -- // The same object is returned if there are no changes: // -- mergeDeep(obj1, { c: { a: 1 } }) === obj1 // -- // true // -- ``` function mergeDeep(a, b, c, d, e, f) { for (var _len3 = arguments.length, rest = Array(_len3 > 6 ? _len3 - 6 : 0), _key3 = 6; _key3 < _len3; _key3++) { rest[_key3 - 6] = arguments[_key3]; } return rest.length ? doMerge.call.apply(doMerge, [null, false, true, a, b, c, d, e, f].concat(rest)) : doMerge(false, true, a, b, c, d, e, f); } // -- #### mergeIn() // -- Similar to `merge()`, but merging the value at a given nested path. // -- Note that the returned type is the same as that of the first argument. // -- // -- Usage: // -- // -- * `mergeIn(obj1: T, path: Array, obj2: ?Object): T` // -- * `mergeIn(obj1: T, path: Array, // -- ...objects: Array): T` // -- // -- ```js // -- obj1 = { a: 1, d: { b: { d1: 3, d2: 4 } } } // -- obj2 = { d3: 5 } // -- obj3 = mergeIn(obj1, ['d', 'b'], obj2) // -- // { a: 1, d: { b: { d1: 3, d2: 4, d3: 5 } } } // -- obj3 === obj1 // -- // false // -- // -- // The same object is returned if there are no changes: // -- mergeIn(obj1, ['d', 'b'], { d2: 4 }) === obj1 // -- // true // -- ``` function mergeIn(a, path, b, c, d, e, f) { var prevVal = getIn(a, path); if (prevVal == null) prevVal = {}; var nextVal = void 0; for (var _len4 = arguments.length, rest = Array(_len4 > 7 ? _len4 - 7 : 0), _key4 = 7; _key4 < _len4; _key4++) { rest[_key4 - 7] = arguments[_key4]; } if (rest.length) { nextVal = doMerge.call.apply(doMerge, [null, false, false, prevVal, b, c, d, e, f].concat(rest)); } else { nextVal = doMerge(false, false, prevVal, b, c, d, e, f); } return setIn(a, path, nextVal); } // -- #### omit() // -- Returns an object excluding one or several attributes. // -- // -- Usage: `omit(obj: Object, attrs: Array|string): Object` // // -- ```js // -- obj = { a: 1, b: 2, c: 3, d: 4 } // -- omit(obj, 'a') // -- // { b: 2, c: 3, d: 4 } // -- omit(obj, ['b', 'c']) // -- // { a: 1, d: 4 } // -- // -- // The same object is returned if there are no changes: // -- omit(obj, 'z') === obj1 // -- // true // -- ``` function omit(obj, attrs) { var omitList = Array.isArray(attrs) ? attrs : [attrs]; var fDoSomething = false; for (var i = 0; i < omitList.length; i++) { if (hasOwnProperty.call(obj, omitList[i])) { fDoSomething = true; break; } } if (!fDoSomething) return obj; var out = {}; var keys = getKeysAndSymbols(obj); for (var _i = 0; _i < keys.length; _i++) { var key = keys[_i]; if (omitList.indexOf(key) >= 0) continue; out[key] = obj[key]; } return out; } // -- #### addDefaults() // -- Returns a new object built as follows: `undefined` keys in the first one // -- are filled in with the corresponding values from the second one // -- (even if they are `null`). // -- // -- Usage: // -- // -- * `addDefaults(obj: Object, defaults: Object): Object` // -- * `addDefaults(obj: Object, ...defaultObjects: Array): Object` // -- // -- ```js // -- obj1 = { a: 1, b: 2, c: 3 } // -- obj2 = { c: 4, d: 5, e: null } // -- obj3 = addDefaults(obj1, obj2) // -- // { a: 1, b: 2, c: 3, d: 5, e: null } // -- obj3 === obj1 // -- // false // -- // -- // The same object is returned if there are no changes: // -- addDefaults(obj1, { c: 4 }) === obj1 // -- // true // -- ``` function addDefaults(a, b, c, d, e, f) { for (var _len5 = arguments.length, rest = Array(_len5 > 6 ? _len5 - 6 : 0), _key5 = 6; _key5 < _len5; _key5++) { rest[_key5 - 6] = arguments[_key5]; } return rest.length ? doMerge.call.apply(doMerge, [null, true, false, a, b, c, d, e, f].concat(rest)) : doMerge(true, false, a, b, c, d, e, f); } // =============================================== // ### Public API // =============================================== var timm = { clone: clone, addLast: addLast, addFirst: addFirst, removeLast: removeLast, removeFirst: removeFirst, insert: insert, removeAt: removeAt, replaceAt: replaceAt, getIn: getIn, // eslint-disable-next-line object-shorthand set: set, // so that flow doesn't complain setIn: setIn, update: update, updateIn: updateIn, merge: merge, mergeDeep: mergeDeep, mergeIn: mergeIn, omit: omit, addDefaults: addDefaults }; exports["default"] = timm; }), 5487: (function () { "use strict"; /* eslint-disable eslint-comments/no-unlimited-disable */ /* eslint-disable */ /*! * tram.js v0.8.2-global * Cross-browser CSS3 transitions in JavaScript * https://github.com/bkwld/tram * MIT License */ /* prettier-ignore */ window.tram = function(a) { function b(a, b) { var c = new M.Bare; return c.init(a, b); } function c(a) { return a.replace(/[A-Z]/g, function(a) { return "-" + a.toLowerCase(); }); } function d(a) { var b = parseInt(a.slice(1), 16), c = b >> 16 & 255, d = b >> 8 & 255, e = 255 & b; return [ c, d, e ]; } function e(a, b, c) { return "#" + (1 << 24 | a << 16 | b << 8 | c).toString(16).slice(1); } function f() {} function g(a, b) { j("Type warning: Expected: [" + a + "] Got: [" + typeof b + "] " + b); } function h(a, b, c) { j("Units do not match [" + a + "]: " + b + ", " + c); } function i(a, b, c) { if (void 0 !== b && (c = b), void 0 === a) return c; var d = c; return $.test(a) || !_.test(a) ? d = parseInt(a, 10) : _.test(a) && (d = 1e3 * parseFloat(a)), 0 > d && (d = 0), d === d ? d : c; } function j(a) { U.debug && window && window.console.warn(a); } function k(a) { for(var b = -1, c = a ? a.length : 0, d = []; ++b < c;){ var e = a[b]; e && d.push(e); } return d; } var l = function(a, b, c) { function d(a) { return "object" == typeof a; } function e(a) { return "function" == typeof a; } function f() {} function g(h, i) { function j() { var a = new k; return e(a.init) && a.init.apply(a, arguments), a; } function k() {} i === c && (i = h, h = Object), j.Bare = k; var l, m = f[a] = h[a], n = k[a] = j[a] = new f; return n.constructor = j, j.mixin = function(b) { return k[a] = j[a] = g(j, b)[a], j; }, j.open = function(a) { if (l = {}, e(a) ? l = a.call(j, n, m, j, h) : d(a) && (l = a), d(l)) for(var c in l)b.call(l, c) && (n[c] = l[c]); return e(n.init) || (n.init = h), j; }, j.open(i); } return g; }("prototype", {}.hasOwnProperty), m = { ease: [ "ease", function(a, b, c, d) { var e = (a /= d) * a, f = e * a; return b + c * (-2.75 * f * e + 11 * e * e + -15.5 * f + 8 * e + .25 * a); } ], "ease-in": [ "ease-in", function(a, b, c, d) { var e = (a /= d) * a, f = e * a; return b + c * (-1 * f * e + 3 * e * e + -3 * f + 2 * e); } ], "ease-out": [ "ease-out", function(a, b, c, d) { var e = (a /= d) * a, f = e * a; return b + c * (.3 * f * e + -1.6 * e * e + 2.2 * f + -1.8 * e + 1.9 * a); } ], "ease-in-out": [ "ease-in-out", function(a, b, c, d) { var e = (a /= d) * a, f = e * a; return b + c * (2 * f * e + -5 * e * e + 2 * f + 2 * e); } ], linear: [ "linear", function(a, b, c, d) { return c * a / d + b; } ], "ease-in-quad": [ "cubic-bezier(0.550, 0.085, 0.680, 0.530)", function(a, b, c, d) { return c * (a /= d) * a + b; } ], "ease-out-quad": [ "cubic-bezier(0.250, 0.460, 0.450, 0.940)", function(a, b, c, d) { return -c * (a /= d) * (a - 2) + b; } ], "ease-in-out-quad": [ "cubic-bezier(0.455, 0.030, 0.515, 0.955)", function(a, b, c, d) { return (a /= d / 2) < 1 ? c / 2 * a * a + b : -c / 2 * (--a * (a - 2) - 1) + b; } ], "ease-in-cubic": [ "cubic-bezier(0.550, 0.055, 0.675, 0.190)", function(a, b, c, d) { return c * (a /= d) * a * a + b; } ], "ease-out-cubic": [ "cubic-bezier(0.215, 0.610, 0.355, 1)", function(a, b, c, d) { return c * ((a = a / d - 1) * a * a + 1) + b; } ], "ease-in-out-cubic": [ "cubic-bezier(0.645, 0.045, 0.355, 1)", function(a, b, c, d) { return (a /= d / 2) < 1 ? c / 2 * a * a * a + b : c / 2 * ((a -= 2) * a * a + 2) + b; } ], "ease-in-quart": [ "cubic-bezier(0.895, 0.030, 0.685, 0.220)", function(a, b, c, d) { return c * (a /= d) * a * a * a + b; } ], "ease-out-quart": [ "cubic-bezier(0.165, 0.840, 0.440, 1)", function(a, b, c, d) { return -c * ((a = a / d - 1) * a * a * a - 1) + b; } ], "ease-in-out-quart": [ "cubic-bezier(0.770, 0, 0.175, 1)", function(a, b, c, d) { return (a /= d / 2) < 1 ? c / 2 * a * a * a * a + b : -c / 2 * ((a -= 2) * a * a * a - 2) + b; } ], "ease-in-quint": [ "cubic-bezier(0.755, 0.050, 0.855, 0.060)", function(a, b, c, d) { return c * (a /= d) * a * a * a * a + b; } ], "ease-out-quint": [ "cubic-bezier(0.230, 1, 0.320, 1)", function(a, b, c, d) { return c * ((a = a / d - 1) * a * a * a * a + 1) + b; } ], "ease-in-out-quint": [ "cubic-bezier(0.860, 0, 0.070, 1)", function(a, b, c, d) { return (a /= d / 2) < 1 ? c / 2 * a * a * a * a * a + b : c / 2 * ((a -= 2) * a * a * a * a + 2) + b; } ], "ease-in-sine": [ "cubic-bezier(0.470, 0, 0.745, 0.715)", function(a, b, c, d) { return -c * Math.cos(a / d * (Math.PI / 2)) + c + b; } ], "ease-out-sine": [ "cubic-bezier(0.390, 0.575, 0.565, 1)", function(a, b, c, d) { return c * Math.sin(a / d * (Math.PI / 2)) + b; } ], "ease-in-out-sine": [ "cubic-bezier(0.445, 0.050, 0.550, 0.950)", function(a, b, c, d) { return -c / 2 * (Math.cos(Math.PI * a / d) - 1) + b; } ], "ease-in-expo": [ "cubic-bezier(0.950, 0.050, 0.795, 0.035)", function(a, b, c, d) { return 0 === a ? b : c * Math.pow(2, 10 * (a / d - 1)) + b; } ], "ease-out-expo": [ "cubic-bezier(0.190, 1, 0.220, 1)", function(a, b, c, d) { return a === d ? b + c : c * (-Math.pow(2, -10 * a / d) + 1) + b; } ], "ease-in-out-expo": [ "cubic-bezier(1, 0, 0, 1)", function(a, b, c, d) { return 0 === a ? b : a === d ? b + c : (a /= d / 2) < 1 ? c / 2 * Math.pow(2, 10 * (a - 1)) + b : c / 2 * (-Math.pow(2, -10 * --a) + 2) + b; } ], "ease-in-circ": [ "cubic-bezier(0.600, 0.040, 0.980, 0.335)", function(a, b, c, d) { return -c * (Math.sqrt(1 - (a /= d) * a) - 1) + b; } ], "ease-out-circ": [ "cubic-bezier(0.075, 0.820, 0.165, 1)", function(a, b, c, d) { return c * Math.sqrt(1 - (a = a / d - 1) * a) + b; } ], "ease-in-out-circ": [ "cubic-bezier(0.785, 0.135, 0.150, 0.860)", function(a, b, c, d) { return (a /= d / 2) < 1 ? -c / 2 * (Math.sqrt(1 - a * a) - 1) + b : c / 2 * (Math.sqrt(1 - (a -= 2) * a) + 1) + b; } ], "ease-in-back": [ "cubic-bezier(0.600, -0.280, 0.735, 0.045)", function(a, b, c, d, e) { return void 0 === e && (e = 1.70158), c * (a /= d) * a * ((e + 1) * a - e) + b; } ], "ease-out-back": [ "cubic-bezier(0.175, 0.885, 0.320, 1.275)", function(a, b, c, d, e) { return void 0 === e && (e = 1.70158), c * ((a = a / d - 1) * a * ((e + 1) * a + e) + 1) + b; } ], "ease-in-out-back": [ "cubic-bezier(0.680, -0.550, 0.265, 1.550)", function(a, b, c, d, e) { return void 0 === e && (e = 1.70158), (a /= d / 2) < 1 ? c / 2 * a * a * (((e *= 1.525) + 1) * a - e) + b : c / 2 * ((a -= 2) * a * (((e *= 1.525) + 1) * a + e) + 2) + b; } ] }, n = { "ease-in-back": "cubic-bezier(0.600, 0, 0.735, 0.045)", "ease-out-back": "cubic-bezier(0.175, 0.885, 0.320, 1)", "ease-in-out-back": "cubic-bezier(0.680, 0, 0.265, 1)" }, o = document, p = window, q = "bkwld-tram", r = /[\-\.0-9]/g, s = /[A-Z]/, t = "number", u = /^(rgb|#)/, v = /(em|cm|mm|in|pt|pc|px)$/, w = /(em|cm|mm|in|pt|pc|px|%)$/, x = /(deg|rad|turn)$/, y = "unitless", z = /(all|none) 0s ease 0s/, A = /^(width|height)$/, B = " ", C = o.createElement("a"), D = [ "Webkit", "Moz", "O", "ms" ], E = [ "-webkit-", "-moz-", "-o-", "-ms-" ], F = function(a) { if (a in C.style) return { dom: a, css: a }; var b, c, d = "", e = a.split("-"); for(b = 0; b < e.length; b++)d += e[b].charAt(0).toUpperCase() + e[b].slice(1); for(b = 0; b < D.length; b++)if (c = D[b] + d, c in C.style) return { dom: c, css: E[b] + a }; }, G = b.support = { bind: Function.prototype.bind, transform: F("transform"), transition: F("transition"), backface: F("backface-visibility"), timing: F("transition-timing-function") }; if (G.transition) { var H = G.timing.dom; if (C.style[H] = m["ease-in-back"][0], !C.style[H]) for(var I in n)m[I][0] = n[I]; } var J = b.frame = function() { var a = p.requestAnimationFrame || p.webkitRequestAnimationFrame || p.mozRequestAnimationFrame || p.oRequestAnimationFrame || p.msRequestAnimationFrame; return a && G.bind ? a.bind(p) : function(a) { p.setTimeout(a, 16); }; }(), K = b.now = function() { var a = p.performance, b = a && (a.now || a.webkitNow || a.msNow || a.mozNow); return b && G.bind ? b.bind(a) : Date.now || function() { return +new Date; }; }(), L = l(function(b) { function d(a, b) { var c = k(("" + a).split(B)), d = c[0]; b = b || {}; var e = Y[d]; if (!e) return j("Unsupported property: " + d); if (!b.weak || !this.props[d]) { var f = e[0], g = this.props[d]; return g || (g = this.props[d] = new f.Bare), g.init(this.$el, c, e, b), g; } } function e(a, b, c) { if (a) { var e = typeof a; if (b || (this.timer && this.timer.destroy(), this.queue = [], this.active = !1), "number" == e && b) return this.timer = new S({ duration: a, context: this, complete: h }), void (this.active = !0); if ("string" == e && b) { switch(a){ case "hide": o.call(this); break; case "stop": l.call(this); break; case "redraw": p.call(this); break; default: d.call(this, a, c && c[1]); } return h.call(this); } if ("function" == e) return void a.call(this, this); if ("object" == e) { var f = 0; u.call(this, a, function(a, b) { a.span > f && (f = a.span), a.stop(), a.animate(b); }, function(a) { "wait" in a && (f = i(a.wait, 0)); }), t.call(this), f > 0 && (this.timer = new S({ duration: f, context: this }), this.active = !0, b && (this.timer.complete = h)); var g = this, j = !1, k = {}; J(function() { u.call(g, a, function(a) { a.active && (j = !0, k[a.name] = a.nextStyle); }), j && g.$el.css(k); }); } } } function f(a) { a = i(a, 0), this.active ? this.queue.push({ options: a }) : (this.timer = new S({ duration: a, context: this, complete: h }), this.active = !0); } function g(a) { return this.active ? (this.queue.push({ options: a, args: arguments }), void (this.timer.complete = h)) : j("No active transition timer. Use start() or wait() before then()."); } function h() { if (this.timer && this.timer.destroy(), this.active = !1, this.queue.length) { var a = this.queue.shift(); e.call(this, a.options, !0, a.args); } } function l(a) { this.timer && this.timer.destroy(), this.queue = [], this.active = !1; var b; "string" == typeof a ? (b = {}, b[a] = 1) : b = "object" == typeof a && null != a ? a : this.props, u.call(this, b, v), t.call(this); } function m(a) { l.call(this, a), u.call(this, a, w, x); } function n(a) { "string" != typeof a && (a = "block"), this.el.style.display = a; } function o() { l.call(this), this.el.style.display = "none"; } function p() { this.el.offsetHeight; } function r() { l.call(this), a.removeData(this.el, q), this.$el = this.el = null; } function t() { var a, b, c = []; this.upstream && c.push(this.upstream); for(a in this.props)b = this.props[a], b.active && c.push(b.string); c = c.join(","), this.style !== c && (this.style = c, this.el.style[G.transition.dom] = c); } function u(a, b, e) { var f, g, h, i, j = b !== v, k = {}; for(f in a)h = a[f], f in Z ? (k.transform || (k.transform = {}), k.transform[f] = h) : (s.test(f) && (f = c(f)), f in Y ? k[f] = h : (i || (i = {}), i[f] = h)); for(f in k){ if (h = k[f], g = this.props[f], !g) { if (!j) continue; g = d.call(this, f); } b.call(this, g, h); } e && i && e.call(this, i); } function v(a) { a.stop(); } function w(a, b) { a.set(b); } function x(a) { this.$el.css(a); } function y(a, c) { b[a] = function() { return this.children ? A.call(this, c, arguments) : (this.el && c.apply(this, arguments), this); }; } function A(a, b) { var c, d = this.children.length; for(c = 0; d > c; c++)a.apply(this.children[c], b); return this; } b.init = function(b) { if (this.$el = a(b), this.el = this.$el[0], this.props = {}, this.queue = [], this.style = "", this.active = !1, U.keepInherited && !U.fallback) { var c = W(this.el, "transition"); c && !z.test(c) && (this.upstream = c); } G.backface && U.hideBackface && V(this.el, G.backface.css, "hidden"); }, y("add", d), y("start", e), y("wait", f), y("then", g), y("next", h), y("stop", l), y("set", m), y("show", n), y("hide", o), y("redraw", p), y("destroy", r); }), M = l(L, function(b) { function c(b, c) { var d = a.data(b, q) || a.data(b, q, new L.Bare); return d.el || d.init(b), c ? d.start(c) : d; } b.init = function(b, d) { var e = a(b); if (!e.length) return this; if (1 === e.length) return c(e[0], d); var f = []; return e.each(function(a, b) { f.push(c(b, d)); }), this.children = f, this; }; }), N = l(function(a) { function b() { var a = this.get(); this.update("auto"); var b = this.get(); return this.update(a), b; } function c(a, b, c) { return void 0 !== b && (c = b), a in m ? a : c; } function d(a) { var b = /rgba?\((\d+),\s*(\d+),\s*(\d+)/.exec(a); return (b ? e(b[1], b[2], b[3]) : a).replace(/#(\w)(\w)(\w)$/, "#$1$1$2$2$3$3"); } var f = { duration: 500, ease: "ease", delay: 0 }; a.init = function(a, b, d, e) { this.$el = a, this.el = a[0]; var g = b[0]; d[2] && (g = d[2]), X[g] && (g = X[g]), this.name = g, this.type = d[1], this.duration = i(b[1], this.duration, f.duration), this.ease = c(b[2], this.ease, f.ease), this.delay = i(b[3], this.delay, f.delay), this.span = this.duration + this.delay, this.active = !1, this.nextStyle = null, this.auto = A.test(this.name), this.unit = e.unit || this.unit || U.defaultUnit, this.angle = e.angle || this.angle || U.defaultAngle, U.fallback || e.fallback ? this.animate = this.fallback : (this.animate = this.transition, this.string = this.name + B + this.duration + "ms" + ("ease" != this.ease ? B + m[this.ease][0] : "") + (this.delay ? B + this.delay + "ms" : "")); }, a.set = function(a) { a = this.convert(a, this.type), this.update(a), this.redraw(); }, a.transition = function(a) { this.active = !0, a = this.convert(a, this.type), this.auto && ("auto" == this.el.style[this.name] && (this.update(this.get()), this.redraw()), "auto" == a && (a = b.call(this))), this.nextStyle = a; }, a.fallback = function(a) { var c = this.el.style[this.name] || this.convert(this.get(), this.type); a = this.convert(a, this.type), this.auto && ("auto" == c && (c = this.convert(this.get(), this.type)), "auto" == a && (a = b.call(this))), this.tween = new R({ from: c, to: a, duration: this.duration, delay: this.delay, ease: this.ease, update: this.update, context: this }); }, a.get = function() { return W(this.el, this.name); }, a.update = function(a) { V(this.el, this.name, a); }, a.stop = function() { (this.active || this.nextStyle) && (this.active = !1, this.nextStyle = null, V(this.el, this.name, this.get())); var a = this.tween; a && a.context && a.destroy(); }, a.convert = function(a, b) { if ("auto" == a && this.auto) return a; var c, e = "number" == typeof a, f = "string" == typeof a; switch(b){ case t: if (e) return a; if (f && "" === a.replace(r, "")) return +a; c = "number(unitless)"; break; case u: if (f) { if ("" === a && this.original) return this.original; if (b.test(a)) return "#" == a.charAt(0) && 7 == a.length ? a : d(a); } c = "hex or rgb string"; break; case v: if (e) return a + this.unit; if (f && b.test(a)) return a; c = "number(px) or string(unit)"; break; case w: if (e) return a + this.unit; if (f && b.test(a)) return a; c = "number(px) or string(unit or %)"; break; case x: if (e) return a + this.angle; if (f && b.test(a)) return a; c = "number(deg) or string(angle)"; break; case y: if (e) return a; if (f && w.test(a)) return a; c = "number(unitless) or string(unit or %)"; } return g(c, a), a; }, a.redraw = function() { this.el.offsetHeight; }; }), O = l(N, function(a, b) { a.init = function() { b.init.apply(this, arguments), this.original || (this.original = this.convert(this.get(), u)); }; }), P = l(N, function(a, b) { a.init = function() { b.init.apply(this, arguments), this.animate = this.fallback; }, a.get = function() { return this.$el[this.name](); }, a.update = function(a) { this.$el[this.name](a); }; }), Q = l(N, function(a, b) { function c(a, b) { var c, d, e, f, g; for(c in a)f = Z[c], e = f[0], d = f[1] || c, g = this.convert(a[c], e), b.call(this, d, g, e); } a.init = function() { b.init.apply(this, arguments), this.current || (this.current = {}, Z.perspective && U.perspective && (this.current.perspective = U.perspective, V(this.el, this.name, this.style(this.current)), this.redraw())); }, a.set = function(a) { c.call(this, a, function(a, b) { this.current[a] = b; }), V(this.el, this.name, this.style(this.current)), this.redraw(); }, a.transition = function(a) { var b = this.values(a); this.tween = new T({ current: this.current, values: b, duration: this.duration, delay: this.delay, ease: this.ease }); var c, d = {}; for(c in this.current)d[c] = c in b ? b[c] : this.current[c]; this.active = !0, this.nextStyle = this.style(d); }, a.fallback = function(a) { var b = this.values(a); this.tween = new T({ current: this.current, values: b, duration: this.duration, delay: this.delay, ease: this.ease, update: this.update, context: this }); }, a.update = function() { V(this.el, this.name, this.style(this.current)); }, a.style = function(a) { var b, c = ""; for(b in a)c += b + "(" + a[b] + ") "; return c; }, a.values = function(a) { var b, d = {}; return c.call(this, a, function(a, c, e) { d[a] = c, void 0 === this.current[a] && (b = 0, ~a.indexOf("scale") && (b = 1), this.current[a] = this.convert(b, e)); }), d; }; }), R = l(function(b) { function c(a) { 1 === n.push(a) && J(g); } function g() { var a, b, c, d = n.length; if (d) for(J(g), b = K(), a = d; a--;)c = n[a], c && c.render(b); } function i(b) { var c, d = a.inArray(b, n); d >= 0 && (c = n.slice(d + 1), n.length = d, c.length && (n = n.concat(c))); } function j(a) { return Math.round(a * o) / o; } function k(a, b, c) { return e(a[0] + c * (b[0] - a[0]), a[1] + c * (b[1] - a[1]), a[2] + c * (b[2] - a[2])); } var l = { ease: m.ease[1], from: 0, to: 1 }; b.init = function(a) { this.duration = a.duration || 0, this.delay = a.delay || 0; var b = a.ease || l.ease; m[b] && (b = m[b][1]), "function" != typeof b && (b = l.ease), this.ease = b, this.update = a.update || f, this.complete = a.complete || f, this.context = a.context || this, this.name = a.name; var c = a.from, d = a.to; void 0 === c && (c = l.from), void 0 === d && (d = l.to), this.unit = a.unit || "", "number" == typeof c && "number" == typeof d ? (this.begin = c, this.change = d - c) : this.format(d, c), this.value = this.begin + this.unit, this.start = K(), a.autoplay !== !1 && this.play(); }, b.play = function() { this.active || (this.start || (this.start = K()), this.active = !0, c(this)); }, b.stop = function() { this.active && (this.active = !1, i(this)); }, b.render = function(a) { var b, c = a - this.start; if (this.delay) { if (c <= this.delay) return; c -= this.delay; } if (c < this.duration) { var d = this.ease(c, 0, 1, this.duration); return b = this.startRGB ? k(this.startRGB, this.endRGB, d) : j(this.begin + d * this.change), this.value = b + this.unit, void this.update.call(this.context, this.value); } b = this.endHex || this.begin + this.change, this.value = b + this.unit, this.update.call(this.context, this.value), this.complete.call(this.context), this.destroy(); }, b.format = function(a, b) { if (b += "", a += "", "#" == a.charAt(0)) return this.startRGB = d(b), this.endRGB = d(a), this.endHex = a, this.begin = 0, void (this.change = 1); if (!this.unit) { var c = b.replace(r, ""), e = a.replace(r, ""); c !== e && h("tween", b, a), this.unit = c; } b = parseFloat(b), a = parseFloat(a), this.begin = this.value = b, this.change = a - b; }, b.destroy = function() { this.stop(), this.context = null, this.ease = this.update = this.complete = f; }; var n = [], o = 1e3; }), S = l(R, function(a) { a.init = function(a) { this.duration = a.duration || 0, this.complete = a.complete || f, this.context = a.context, this.play(); }, a.render = function(a) { var b = a - this.start; b < this.duration || (this.complete.call(this.context), this.destroy()); }; }), T = l(R, function(a, b) { a.init = function(a) { this.context = a.context, this.update = a.update, this.tweens = [], this.current = a.current; var b, c; for(b in a.values)c = a.values[b], this.current[b] !== c && this.tweens.push(new R({ name: b, from: this.current[b], to: c, duration: a.duration, delay: a.delay, ease: a.ease, autoplay: !1 })); this.play(); }, a.render = function(a) { var b, c, d = this.tweens.length, e = !1; for(b = d; b--;)c = this.tweens[b], c.context && (c.render(a), this.current[c.name] = c.value, e = !0); return e ? void (this.update && this.update.call(this.context)) : this.destroy(); }, a.destroy = function() { if (b.destroy.call(this), this.tweens) { var a, c = this.tweens.length; for(a = c; a--;)this.tweens[a].destroy(); this.tweens = null, this.current = null; } }; }), U = b.config = { debug: !1, defaultUnit: "px", defaultAngle: "deg", keepInherited: !1, hideBackface: !1, perspective: "", fallback: !G.transition, agentTests: [] }; b.fallback = function(a) { if (!G.transition) return U.fallback = !0; U.agentTests.push("(" + a + ")"); var b = new RegExp(U.agentTests.join("|"), "i"); U.fallback = b.test(navigator.userAgent); }, b.fallback("6.0.[2-5] Safari"), b.tween = function(a) { return new R(a); }, b.delay = function(a, b, c) { return new S({ complete: b, duration: a, context: c }); }, a.fn.tram = function(a) { return b.call(null, this, a); }; var V = a.style, W = a.css, X = { transform: G.transform && G.transform.css }, Y = { color: [ O, u ], background: [ O, u, "background-color" ], "outline-color": [ O, u ], "border-color": [ O, u ], "border-top-color": [ O, u ], "border-right-color": [ O, u ], "border-bottom-color": [ O, u ], "border-left-color": [ O, u ], "border-width": [ N, v ], "border-top-width": [ N, v ], "border-right-width": [ N, v ], "border-bottom-width": [ N, v ], "border-left-width": [ N, v ], "border-spacing": [ N, v ], "letter-spacing": [ N, v ], margin: [ N, v ], "margin-top": [ N, v ], "margin-right": [ N, v ], "margin-bottom": [ N, v ], "margin-left": [ N, v ], padding: [ N, v ], "padding-top": [ N, v ], "padding-right": [ N, v ], "padding-bottom": [ N, v ], "padding-left": [ N, v ], "outline-width": [ N, v ], opacity: [ N, t ], top: [ N, w ], right: [ N, w ], bottom: [ N, w ], left: [ N, w ], "font-size": [ N, w ], "text-indent": [ N, w ], "word-spacing": [ N, w ], width: [ N, w ], "min-width": [ N, w ], "max-width": [ N, w ], height: [ N, w ], "min-height": [ N, w ], "max-height": [ N, w ], "line-height": [ N, y ], "scroll-top": [ P, t, "scrollTop" ], "scroll-left": [ P, t, "scrollLeft" ] }, Z = {}; G.transform && (Y.transform = [ Q ], Z = { x: [ w, "translateX" ], y: [ w, "translateY" ], rotate: [ x ], rotateX: [ x ], rotateY: [ x ], scale: [ t ], scaleX: [ t ], scaleY: [ t ], skew: [ x ], skewX: [ x ], skewY: [ x ] }), G.transform && G.backface && (Z.z = [ w, "translateZ" ], Z.rotateZ = [ x ], Z.scaleZ = [ t ], Z.perspective = [ v ]); var $ = /ms/, _ = /s|\./; return a.tram = b; }(window.jQuery); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyYW0tbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGVzbGludC1jb21tZW50cy9uby11bmxpbWl0ZWQtZGlzYWJsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8qIVxuICogdHJhbS5qcyB2MC44LjItZ2xvYmFsXG4gKiBDcm9zcy1icm93c2VyIENTUzMgdHJhbnNpdGlvbnMgaW4gSmF2YVNjcmlwdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2Jrd2xkL3RyYW1cbiAqIE1JVCBMaWNlbnNlXG4gKi9cbi8qIHByZXR0aWVyLWlnbm9yZSAqL1xud2luZG93LnRyYW09ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIpe3ZhciBjPW5ldyBNLkJhcmU7cmV0dXJuIGMuaW5pdChhLGIpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuIGEucmVwbGFjZSgvW0EtWl0vZyxmdW5jdGlvbihhKXtyZXR1cm5cIi1cIithLnRvTG93ZXJDYXNlKCl9KTt9ZnVuY3Rpb24gZChhKXt2YXIgYj1wYXJzZUludChhLnNsaWNlKDEpLDE2KSxjPWI+PjE2JjI1NSxkPWI+PjgmMjU1LGU9MjU1JmI7cmV0dXJuW2MsZCxlXX1mdW5jdGlvbiBlKGEsYixjKXtyZXR1cm5cIiNcIisoMTw8MjR8YTw8MTZ8Yjw8OHxjKS50b1N0cmluZygxNikuc2xpY2UoMSl9ZnVuY3Rpb24gZigpe31mdW5jdGlvbiBnKGEsYil7aihcIlR5cGUgd2FybmluZzogRXhwZWN0ZWQ6IFtcIithK1wiXSBHb3Q6IFtcIit0eXBlb2YgYitcIl0gXCIrYil9ZnVuY3Rpb24gaChhLGIsYyl7aihcIlVuaXRzIGRvIG5vdCBtYXRjaCBbXCIrYStcIl06IFwiK2IrXCIsIFwiK2MpfWZ1bmN0aW9uIGkoYSxiLGMpe2lmKHZvaWQgMCE9PWImJihjPWIpLHZvaWQgMD09PWEpcmV0dXJuIGM7dmFyIGQ9YztyZXR1cm4gJC50ZXN0KGEpfHwhXy50ZXN0KGEpP2Q9cGFyc2VJbnQoYSwxMCk6Xy50ZXN0KGEpJiYoZD0xZTMqcGFyc2VGbG9hdChhKSksMD5kJiYoZD0wKSxkPT09ZD9kOmN9ZnVuY3Rpb24gaihhKXtVLmRlYnVnJiZ3aW5kb3cmJndpbmRvdy5jb25zb2xlLndhcm4oYSl9ZnVuY3Rpb24gayhhKXtmb3IodmFyIGI9LTEsYz1hP2EubGVuZ3RoOjAsZD1bXTsrK2I8Yzspe3ZhciBlPWFbYl07ZSYmZC5wdXNoKGUpfXJldHVybiBkfXZhciBsPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBhfWZ1bmN0aW9uIGUoYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYX1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoaCxpKXtmdW5jdGlvbiBqKCl7dmFyIGE9bmV3IGs7cmV0dXJuIGUoYS5pbml0KSYmYS5pbml0LmFwcGx5KGEsYXJndW1lbnRzKSxhfWZ1bmN0aW9uIGsoKXt9aT09PWMmJihpPWgsaD1PYmplY3QpLGouQmFyZT1rO3ZhciBsLG09ZlthXT1oW2FdLG49a1thXT1qW2FdPW5ldyBmO3JldHVybiBuLmNvbnN0cnVjdG9yPWosai5taXhpbj1mdW5jdGlvbihiKXtyZXR1cm4ga1thXT1qW2FdPWcoaixiKVthXSxqfSxqLm9wZW49ZnVuY3Rpb24oYSl7aWYobD17fSxlKGEpP2w9YS5jYWxsKGosbixtLGosaCk6ZChhKSYmKGw9YSksZChsKSlmb3IodmFyIGMgaW4gbCliLmNhbGwobCxjKSYmKG5bY109bFtjXSk7cmV0dXJuIGUobi5pbml0KXx8KG4uaW5pdD1oKSxqfSxqLm9wZW4oaSl9cmV0dXJuIGd9KFwicHJvdG90eXBlXCIse30uaGFzT3duUHJvcGVydHkpLG09e2Vhc2U6W1wiZWFzZVwiLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPShhLz1kKSphLGY9ZSphO3JldHVybiBiK2MqKC0yLjc1KmYqZSsxMSplKmUrLTE1LjUqZis4KmUrLjI1KmEpfV0sXCJlYXNlLWluXCI6W1wiZWFzZS1pblwiLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPShhLz1kKSphLGY9ZSphO3JldHVybiBiK2MqKC0xKmYqZSszKmUqZSstMypmKzIqZSl9XSxcImVhc2Utb3V0XCI6W1wiZWFzZS1vdXRcIixmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0oYS89ZCkqYSxmPWUqYTtyZXR1cm4gYitjKiguMypmKmUrLTEuNiplKmUrMi4yKmYrLTEuOCplKzEuOSphKX1dLFwiZWFzZS1pbi1vdXRcIjpbXCJlYXNlLWluLW91dFwiLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPShhLz1kKSphLGY9ZSphO3JldHVybiBiK2MqKDIqZiplKy01KmUqZSsyKmYrMiplKX1dLGxpbmVhcjpbXCJsaW5lYXJcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYyphL2QrYn1dLFwiZWFzZS1pbi1xdWFkXCI6W1wiY3ViaWMtYmV6aWVyKDAuNTUwLCAwLjA4NSwgMC42ODAsIDAuNTMwKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKihhLz1kKSphK2J9XSxcImVhc2Utb3V0LXF1YWRcIjpbXCJjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuLWMqKGEvPWQpKihhLTIpK2J9XSxcImVhc2UtaW4tb3V0LXF1YWRcIjpbXCJjdWJpYy1iZXppZXIoMC40NTUsIDAuMDMwLCAwLjUxNSwgMC45NTUpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGEvPWQvMik8MT9jLzIqYSphK2I6LWMvMiooLS1hKihhLTIpLTEpK2J9XSxcImVhc2UtaW4tY3ViaWNcIjpbXCJjdWJpYy1iZXppZXIoMC41NTAsIDAuMDU1LCAwLjY3NSwgMC4xOTApXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMqKGEvPWQpKmEqYStifV0sXCJlYXNlLW91dC1jdWJpY1wiOltcImN1YmljLWJlemllcigwLjIxNSwgMC42MTAsIDAuMzU1LCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKigoYT1hL2QtMSkqYSphKzEpK2J9XSxcImVhc2UtaW4tb3V0LWN1YmljXCI6W1wiY3ViaWMtYmV6aWVyKDAuNjQ1LCAwLjA0NSwgMC4zNTUsIDEpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGEvPWQvMik8MT9jLzIqYSphKmErYjpjLzIqKChhLT0yKSphKmErMikrYn1dLFwiZWFzZS1pbi1xdWFydFwiOltcImN1YmljLWJlemllcigwLjg5NSwgMC4wMzAsIDAuNjg1LCAwLjIyMClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYyooYS89ZCkqYSphKmErYn1dLFwiZWFzZS1vdXQtcXVhcnRcIjpbXCJjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQwLCAwLjQ0MCwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYyooKGE9YS9kLTEpKmEqYSphLTEpK2J9XSxcImVhc2UtaW4tb3V0LXF1YXJ0XCI6W1wiY3ViaWMtYmV6aWVyKDAuNzcwLCAwLCAwLjE3NSwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYS89ZC8yKTwxP2MvMiphKmEqYSphK2I6LWMvMiooKGEtPTIpKmEqYSphLTIpK2J9XSxcImVhc2UtaW4tcXVpbnRcIjpbXCJjdWJpYy1iZXppZXIoMC43NTUsIDAuMDUwLCAwLjg1NSwgMC4wNjApXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMqKGEvPWQpKmEqYSphKmErYn1dLFwiZWFzZS1vdXQtcXVpbnRcIjpbXCJjdWJpYy1iZXppZXIoMC4yMzAsIDEsIDAuMzIwLCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKigoYT1hL2QtMSkqYSphKmEqYSsxKStifV0sXCJlYXNlLWluLW91dC1xdWludFwiOltcImN1YmljLWJlemllcigwLjg2MCwgMCwgMC4wNzAsIDEpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGEvPWQvMik8MT9jLzIqYSphKmEqYSphK2I6Yy8yKigoYS09MikqYSphKmEqYSsyKStifV0sXCJlYXNlLWluLXNpbmVcIjpbXCJjdWJpYy1iZXppZXIoMC40NzAsIDAsIDAuNzQ1LCAwLjcxNSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYypNYXRoLmNvcyhhL2QqKE1hdGguUEkvMikpK2MrYn1dLFwiZWFzZS1vdXQtc2luZVwiOltcImN1YmljLWJlemllcigwLjM5MCwgMC41NzUsIDAuNTY1LCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKk1hdGguc2luKGEvZCooTWF0aC5QSS8yKSkrYn1dLFwiZWFzZS1pbi1vdXQtc2luZVwiOltcImN1YmljLWJlemllcigwLjQ0NSwgMC4wNTAsIDAuNTUwLCAwLjk1MClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYy8yKihNYXRoLmNvcyhNYXRoLlBJKmEvZCktMSkrYn1dLFwiZWFzZS1pbi1leHBvXCI6W1wiY3ViaWMtYmV6aWVyKDAuOTUwLCAwLjA1MCwgMC43OTUsIDAuMDM1KVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiAwPT09YT9iOmMqTWF0aC5wb3coMiwxMCooYS9kLTEpKStifV0sXCJlYXNlLW91dC1leHBvXCI6W1wiY3ViaWMtYmV6aWVyKDAuMTkwLCAxLCAwLjIyMCwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYT09PWQ/YitjOmMqKC1NYXRoLnBvdygyLC0xMCphL2QpKzEpK2J9XSxcImVhc2UtaW4tb3V0LWV4cG9cIjpbXCJjdWJpYy1iZXppZXIoMSwgMCwgMCwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gMD09PWE/YjphPT09ZD9iK2M6KGEvPWQvMik8MT9jLzIqTWF0aC5wb3coMiwxMCooYS0xKSkrYjpjLzIqKC1NYXRoLnBvdygyLC0xMCotLWEpKzIpK2J9XSxcImVhc2UtaW4tY2lyY1wiOltcImN1YmljLWJlemllcigwLjYwMCwgMC4wNDAsIDAuOTgwLCAwLjMzNSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYyooTWF0aC5zcXJ0KDEtKGEvPWQpKmEpLTEpK2J9XSxcImVhc2Utb3V0LWNpcmNcIjpbXCJjdWJpYy1iZXppZXIoMC4wNzUsIDAuODIwLCAwLjE2NSwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYypNYXRoLnNxcnQoMS0oYT1hL2QtMSkqYSkrYn1dLFwiZWFzZS1pbi1vdXQtY2lyY1wiOltcImN1YmljLWJlemllcigwLjc4NSwgMC4xMzUsIDAuMTUwLCAwLjg2MClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYS89ZC8yKTwxPy1jLzIqKE1hdGguc3FydCgxLWEqYSktMSkrYjpjLzIqKE1hdGguc3FydCgxLShhLT0yKSphKSsxKStifV0sXCJlYXNlLWluLWJhY2tcIjpbXCJjdWJpYy1iZXppZXIoMC42MDAsIC0wLjI4MCwgMC43MzUsIDAuMDQ1KVwiLGZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTEuNzAxNTgpLGMqKGEvPWQpKmEqKChlKzEpKmEtZSkrYn1dLFwiZWFzZS1vdXQtYmFja1wiOltcImN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIwLCAxLjI3NSlcIixmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0xLjcwMTU4KSxjKigoYT1hL2QtMSkqYSooKGUrMSkqYStlKSsxKStifV0sXCJlYXNlLWluLW91dC1iYWNrXCI6W1wiY3ViaWMtYmV6aWVyKDAuNjgwLCAtMC41NTAsIDAuMjY1LCAxLjU1MClcIixmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0xLjcwMTU4KSwoYS89ZC8yKTwxP2MvMiphKmEqKCgoZSo9MS41MjUpKzEpKmEtZSkrYjpjLzIqKChhLT0yKSphKigoKGUqPTEuNTI1KSsxKSphK2UpKzIpK2J9XX0sbj17XCJlYXNlLWluLWJhY2tcIjpcImN1YmljLWJlemllcigwLjYwMCwgMCwgMC43MzUsIDAuMDQ1KVwiLFwiZWFzZS1vdXQtYmFja1wiOlwiY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMjAsIDEpXCIsXCJlYXNlLWluLW91dC1iYWNrXCI6XCJjdWJpYy1iZXppZXIoMC42ODAsIDAsIDAuMjY1LCAxKVwifSxvPWRvY3VtZW50LHA9d2luZG93LHE9XCJia3dsZC10cmFtXCIscj0vW1xcLVxcLjAtOV0vZyxzPS9bQS1aXS8sdD1cIm51bWJlclwiLHU9L14ocmdifCMpLyx2PS8oZW18Y218bW18aW58cHR8cGN8cHgpJC8sdz0vKGVtfGNtfG1tfGlufHB0fHBjfHB4fCUpJC8seD0vKGRlZ3xyYWR8dHVybikkLyx5PVwidW5pdGxlc3NcIix6PS8oYWxsfG5vbmUpIDBzIGVhc2UgMHMvLEE9L14od2lkdGh8aGVpZ2h0KSQvLEI9XCIgXCIsQz1vLmNyZWF0ZUVsZW1lbnQoXCJhXCIpLEQ9W1wiV2Via2l0XCIsXCJNb3pcIixcIk9cIixcIm1zXCJdLEU9W1wiLXdlYmtpdC1cIixcIi1tb3otXCIsXCItby1cIixcIi1tcy1cIl0sRj1mdW5jdGlvbihhKXtpZihhIGluIEMuc3R5bGUpcmV0dXJue2RvbTphLGNzczphfTt2YXIgYixjLGQ9XCJcIixlPWEuc3BsaXQoXCItXCIpO2ZvcihiPTA7YjxlLmxlbmd0aDtiKyspZCs9ZVtiXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlW2JdLnNsaWNlKDEpO2ZvcihiPTA7YjxELmxlbmd0aDtiKyspaWYoYz1EW2JdK2QsYyBpbiBDLnN0eWxlKXJldHVybntkb206Yyxjc3M6RVtiXSthfX0sRz1iLnN1cHBvcnQ9e2JpbmQ6RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsdHJhbnNmb3JtOkYoXCJ0cmFuc2Zvcm1cIiksdHJhbnNpdGlvbjpGKFwidHJhbnNpdGlvblwiKSxiYWNrZmFjZTpGKFwiYmFja2ZhY2UtdmlzaWJpbGl0eVwiKSx0aW1pbmc6RihcInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uXCIpfTtpZihHLnRyYW5zaXRpb24pe3ZhciBIPUcudGltaW5nLmRvbTtpZihDLnN0eWxlW0hdPW1bXCJlYXNlLWluLWJhY2tcIl1bMF0sIUMuc3R5bGVbSF0pZm9yKHZhciBJIGluIG4pbVtJXVswXT1uW0ldfXZhciBKPWIuZnJhbWU9ZnVuY3Rpb24oKXt2YXIgYT1wLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxwLm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7cmV0dXJuIGEmJkcuYmluZD9hLmJpbmQocCk6ZnVuY3Rpb24oYSl7cC5zZXRUaW1lb3V0KGEsMTYpfX0oKSxLPWIubm93PWZ1bmN0aW9uKCl7dmFyIGE9cC5wZXJmb3JtYW5jZSxiPWEmJihhLm5vd3x8YS53ZWJraXROb3d8fGEubXNOb3d8fGEubW96Tm93KTtyZXR1cm4gYiYmRy5iaW5kP2IuYmluZChhKTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSgpLEw9bChmdW5jdGlvbihiKXtmdW5jdGlvbiBkKGEsYil7dmFyIGM9aygoXCJcIithKS5zcGxpdChCKSksZD1jWzBdO2I9Ynx8e307dmFyIGU9WVtkXTtpZighZSlyZXR1cm4gaihcIlVuc3VwcG9ydGVkIHByb3BlcnR5OiBcIitkKTtpZighYi53ZWFrfHwhdGhpcy5wcm9wc1tkXSl7dmFyIGY9ZVswXSxnPXRoaXMucHJvcHNbZF07cmV0dXJuIGd8fChnPXRoaXMucHJvcHNbZF09bmV3IGYuQmFyZSksZy5pbml0KHRoaXMuJGVsLGMsZSxiKSxnfX1mdW5jdGlvbiBlKGEsYixjKXtpZihhKXt2YXIgZT10eXBlb2YgYTtpZihifHwodGhpcy50aW1lciYmdGhpcy50aW1lci5kZXN0cm95KCksdGhpcy5xdWV1ZT1bXSx0aGlzLmFjdGl2ZT0hMSksXCJudW1iZXJcIj09ZSYmYilyZXR1cm4gdGhpcy50aW1lcj1uZXcgUyh7ZHVyYXRpb246YSxjb250ZXh0OnRoaXMsY29tcGxldGU6aH0pLHZvaWQodGhpcy5hY3RpdmU9ITApO2lmKFwic3RyaW5nXCI9PWUmJmIpe3N3aXRjaChhKXtjYXNlXCJoaWRlXCI6by5jYWxsKHRoaXMpO2JyZWFrO2Nhc2VcInN0b3BcIjpsLmNhbGwodGhpcyk7YnJlYWs7Y2FzZVwicmVkcmF3XCI6cC5jYWxsKHRoaXMpO2JyZWFrO2RlZmF1bHQ6ZC5jYWxsKHRoaXMsYSxjJiZjWzFdKX1yZXR1cm4gaC5jYWxsKHRoaXMpfWlmKFwiZnVuY3Rpb25cIj09ZSlyZXR1cm4gdm9pZCBhLmNhbGwodGhpcyx0aGlzKTtpZihcIm9iamVjdFwiPT1lKXt2YXIgZj0wO3UuY2FsbCh0aGlzLGEsZnVuY3Rpb24oYSxiKXthLnNwYW4+ZiYmKGY9YS5zcGFuKSxhLnN0b3AoKSxhLmFuaW1hdGUoYil9LGZ1bmN0aW9uKGEpe1wid2FpdFwiaW4gYSYmKGY9aShhLndhaXQsMCkpfSksdC5jYWxsKHRoaXMpLGY+MCYmKHRoaXMudGltZXI9bmV3IFMoe2R1cmF0aW9uOmYsY29udGV4dDp0aGlzfSksdGhpcy5hY3RpdmU9ITAsYiYmKHRoaXMudGltZXIuY29tcGxldGU9aCkpO3ZhciBnPXRoaXMsaj0hMSxrPXt9O0ooZnVuY3Rpb24oKXt1LmNhbGwoZyxhLGZ1bmN0aW9uKGEpe2EuYWN0aXZlJiYoaj0hMCxrW2EubmFtZV09YS5uZXh0U3R5bGUpfSksaiYmZy4kZWwuY3NzKGspfSl9fX1mdW5jdGlvbiBmKGEpe2E9aShhLDApLHRoaXMuYWN0aXZlP3RoaXMucXVldWUucHVzaCh7b3B0aW9uczphfSk6KHRoaXMudGltZXI9bmV3IFMoe2R1cmF0aW9uOmEsY29udGV4dDp0aGlzLGNvbXBsZXRlOmh9KSx0aGlzLmFjdGl2ZT0hMCl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gdGhpcy5hY3RpdmU/KHRoaXMucXVldWUucHVzaCh7b3B0aW9uczphLGFyZ3M6YXJndW1lbnRzfSksdm9pZCh0aGlzLnRpbWVyLmNvbXBsZXRlPWgpKTpqKFwiTm8gYWN0aXZlIHRyYW5zaXRpb24gdGltZXIuIFVzZSBzdGFydCgpIG9yIHdhaXQoKSBiZWZvcmUgdGhlbigpLlwiKX1mdW5jdGlvbiBoKCl7aWYodGhpcy50aW1lciYmdGhpcy50aW1lci5kZXN0cm95KCksdGhpcy5hY3RpdmU9ITEsdGhpcy5xdWV1ZS5sZW5ndGgpe3ZhciBhPXRoaXMucXVldWUuc2hpZnQoKTtlLmNhbGwodGhpcyxhLm9wdGlvbnMsITAsYS5hcmdzKX19ZnVuY3Rpb24gbChhKXt0aGlzLnRpbWVyJiZ0aGlzLnRpbWVyLmRlc3Ryb3koKSx0aGlzLnF1ZXVlPVtdLHRoaXMuYWN0aXZlPSExO3ZhciBiO1wic3RyaW5nXCI9PXR5cGVvZiBhPyhiPXt9LGJbYV09MSk6Yj1cIm9iamVjdFwiPT10eXBlb2YgYSYmbnVsbCE9YT9hOnRoaXMucHJvcHMsdS5jYWxsKHRoaXMsYix2KSx0LmNhbGwodGhpcyl9ZnVuY3Rpb24gbShhKXtsLmNhbGwodGhpcyxhKSx1LmNhbGwodGhpcyxhLHcseCl9ZnVuY3Rpb24gbihhKXtcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9XCJibG9ja1wiKSx0aGlzLmVsLnN0eWxlLmRpc3BsYXk9YX1mdW5jdGlvbiBvKCl7bC5jYWxsKHRoaXMpLHRoaXMuZWwuc3R5bGUuZGlzcGxheT1cIm5vbmVcIn1mdW5jdGlvbiBwKCl7dGhpcy5lbC5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gcigpe2wuY2FsbCh0aGlzKSxhLnJlbW92ZURhdGEodGhpcy5lbCxxKSx0aGlzLiRlbD10aGlzLmVsPW51bGx9ZnVuY3Rpb24gdCgpe3ZhciBhLGIsYz1bXTt0aGlzLnVwc3RyZWFtJiZjLnB1c2godGhpcy51cHN0cmVhbSk7Zm9yKGEgaW4gdGhpcy5wcm9wcyliPXRoaXMucHJvcHNbYV0sYi5hY3RpdmUmJmMucHVzaChiLnN0cmluZyk7Yz1jLmpvaW4oXCIsXCIpLHRoaXMuc3R5bGUhPT1jJiYodGhpcy5zdHlsZT1jLHRoaXMuZWwuc3R5bGVbRy50cmFuc2l0aW9uLmRvbV09Yyl9ZnVuY3Rpb24gdShhLGIsZSl7dmFyIGYsZyxoLGksaj1iIT09dixrPXt9O2ZvcihmIGluIGEpaD1hW2ZdLGYgaW4gWj8oay50cmFuc2Zvcm18fChrLnRyYW5zZm9ybT17fSksay50cmFuc2Zvcm1bZl09aCk6KHMudGVzdChmKSYmKGY9YyhmKSksZiBpbiBZP2tbZl09aDooaXx8KGk9e30pLGlbZl09aCkpO2ZvcihmIGluIGspe2lmKGg9a1tmXSxnPXRoaXMucHJvcHNbZl0sIWcpe2lmKCFqKWNvbnRpbnVlO2c9ZC5jYWxsKHRoaXMsZil9Yi5jYWxsKHRoaXMsZyxoKX1lJiZpJiZlLmNhbGwodGhpcyxpKX1mdW5jdGlvbiB2KGEpe2Euc3RvcCgpfWZ1bmN0aW9uIHcoYSxiKXthLnNldChiKX1mdW5jdGlvbiB4KGEpe3RoaXMuJGVsLmNzcyhhKX1mdW5jdGlvbiB5KGEsYyl7YlthXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuP0EuY2FsbCh0aGlzLGMsYXJndW1lbnRzKToodGhpcy5lbCYmYy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyl9fWZ1bmN0aW9uIEEoYSxiKXt2YXIgYyxkPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ZvcihjPTA7ZD5jO2MrKylhLmFwcGx5KHRoaXMuY2hpbGRyZW5bY10sYik7cmV0dXJuIHRoaXN9Yi5pbml0PWZ1bmN0aW9uKGIpe2lmKHRoaXMuJGVsPWEoYiksdGhpcy5lbD10aGlzLiRlbFswXSx0aGlzLnByb3BzPXt9LHRoaXMucXVldWU9W10sdGhpcy5zdHlsZT1cIlwiLHRoaXMuYWN0aXZlPSExLFUua2VlcEluaGVyaXRlZCYmIVUuZmFsbGJhY2spe3ZhciBjPVcodGhpcy5lbCxcInRyYW5zaXRpb25cIik7YyYmIXoudGVzdChjKSYmKHRoaXMudXBzdHJlYW09Yyl9Ry5iYWNrZmFjZSYmVS5oaWRlQmFja2ZhY2UmJlYodGhpcy5lbCxHLmJhY2tmYWNlLmNzcyxcImhpZGRlblwiKX0seShcImFkZFwiLGQpLHkoXCJzdGFydFwiLGUpLHkoXCJ3YWl0XCIsZikseShcInRoZW5cIixnKSx5KFwibmV4dFwiLGgpLHkoXCJzdG9wXCIsbCkseShcInNldFwiLG0pLHkoXCJzaG93XCIsbikseShcImhpZGVcIixvKSx5KFwicmVkcmF3XCIscCkseShcImRlc3Ryb3lcIixyKX0pLE09bChMLGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYixjKXt2YXIgZD1hLmRhdGEoYixxKXx8YS5kYXRhKGIscSxuZXcgTC5CYXJlKTtyZXR1cm4gZC5lbHx8ZC5pbml0KGIpLGM/ZC5zdGFydChjKTpkfWIuaW5pdD1mdW5jdGlvbihiLGQpe3ZhciBlPWEoYik7aWYoIWUubGVuZ3RoKXJldHVybiB0aGlzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gYyhlWzBdLGQpO3ZhciBmPVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24oYSxiKXtmLnB1c2goYyhiLGQpKX0pLHRoaXMuY2hpbGRyZW49Zix0aGlzfX0pLE49bChmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7dmFyIGE9dGhpcy5nZXQoKTt0aGlzLnVwZGF0ZShcImF1dG9cIik7dmFyIGI9dGhpcy5nZXQoKTtyZXR1cm4gdGhpcy51cGRhdGUoYSksYn1mdW5jdGlvbiBjKGEsYixjKXtyZXR1cm4gdm9pZCAwIT09YiYmKGM9YiksYSBpbiBtP2E6Y31mdW5jdGlvbiBkKGEpe3ZhciBiPS9yZ2JhP1xcKChcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKykvLmV4ZWMoYSk7cmV0dXJuIChiP2UoYlsxXSxiWzJdLGJbM10pOmEpLnJlcGxhY2UoLyMoXFx3KShcXHcpKFxcdykkLyxcIiMkMSQxJDIkMiQzJDNcIik7fXZhciBmPXtkdXJhdGlvbjo1MDAsZWFzZTpcImVhc2VcIixkZWxheTowfTthLmluaXQ9ZnVuY3Rpb24oYSxiLGQsZSl7dGhpcy4kZWw9YSx0aGlzLmVsPWFbMF07dmFyIGc9YlswXTtkWzJdJiYoZz1kWzJdKSxYW2ddJiYoZz1YW2ddKSx0aGlzLm5hbWU9Zyx0aGlzLnR5cGU9ZFsxXSx0aGlzLmR1cmF0aW9uPWkoYlsxXSx0aGlzLmR1cmF0aW9uLGYuZHVyYXRpb24pLHRoaXMuZWFzZT1jKGJbMl0sdGhpcy5lYXNlLGYuZWFzZSksdGhpcy5kZWxheT1pKGJbM10sdGhpcy5kZWxheSxmLmRlbGF5KSx0aGlzLnNwYW49dGhpcy5kdXJhdGlvbit0aGlzLmRlbGF5LHRoaXMuYWN0aXZlPSExLHRoaXMubmV4dFN0eWxlPW51bGwsdGhpcy5hdXRvPUEudGVzdCh0aGlzLm5hbWUpLHRoaXMudW5pdD1lLnVuaXR8fHRoaXMudW5pdHx8VS5kZWZhdWx0VW5pdCx0aGlzLmFuZ2xlPWUuYW5nbGV8fHRoaXMuYW5nbGV8fFUuZGVmYXVsdEFuZ2xlLFUuZmFsbGJhY2t8fGUuZmFsbGJhY2s/dGhpcy5hbmltYXRlPXRoaXMuZmFsbGJhY2s6KHRoaXMuYW5pbWF0ZT10aGlzLnRyYW5zaXRpb24sdGhpcy5zdHJpbmc9dGhpcy5uYW1lK0IrdGhpcy5kdXJhdGlvbitcIm1zXCIrKFwiZWFzZVwiIT10aGlzLmVhc2U/QittW3RoaXMuZWFzZV1bMF06XCJcIikrKHRoaXMuZGVsYXk/Qit0aGlzLmRlbGF5K1wibXNcIjpcIlwiKSl9LGEuc2V0PWZ1bmN0aW9uKGEpe2E9dGhpcy5jb252ZXJ0KGEsdGhpcy50eXBlKSx0aGlzLnVwZGF0ZShhKSx0aGlzLnJlZHJhdygpfSxhLnRyYW5zaXRpb249ZnVuY3Rpb24oYSl7dGhpcy5hY3RpdmU9ITAsYT10aGlzLmNvbnZlcnQoYSx0aGlzLnR5cGUpLHRoaXMuYXV0byYmKFwiYXV0b1wiPT10aGlzLmVsLnN0eWxlW3RoaXMubmFtZV0mJih0aGlzLnVwZGF0ZSh0aGlzLmdldCgpKSx0aGlzLnJlZHJhdygpKSxcImF1dG9cIj09YSYmKGE9Yi5jYWxsKHRoaXMpKSksdGhpcy5uZXh0U3R5bGU9YX0sYS5mYWxsYmFjaz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmVsLnN0eWxlW3RoaXMubmFtZV18fHRoaXMuY29udmVydCh0aGlzLmdldCgpLHRoaXMudHlwZSk7YT10aGlzLmNvbnZlcnQoYSx0aGlzLnR5cGUpLHRoaXMuYXV0byYmKFwiYXV0b1wiPT1jJiYoYz10aGlzLmNvbnZlcnQodGhpcy5nZXQoKSx0aGlzLnR5cGUpKSxcImF1dG9cIj09YSYmKGE9Yi5jYWxsKHRoaXMpKSksdGhpcy50d2Vlbj1uZXcgUih7ZnJvbTpjLHRvOmEsZHVyYXRpb246dGhpcy5kdXJhdGlvbixkZWxheTp0aGlzLmRlbGF5LGVhc2U6dGhpcy5lYXNlLHVwZGF0ZTp0aGlzLnVwZGF0ZSxjb250ZXh0OnRoaXN9KX0sYS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gVyh0aGlzLmVsLHRoaXMubmFtZSl9LGEudXBkYXRlPWZ1bmN0aW9uKGEpe1YodGhpcy5lbCx0aGlzLm5hbWUsYSl9LGEuc3RvcD1mdW5jdGlvbigpeyh0aGlzLmFjdGl2ZXx8dGhpcy5uZXh0U3R5bGUpJiYodGhpcy5hY3RpdmU9ITEsdGhpcy5uZXh0U3R5bGU9bnVsbCxWKHRoaXMuZWwsdGhpcy5uYW1lLHRoaXMuZ2V0KCkpKTt2YXIgYT10aGlzLnR3ZWVuO2EmJmEuY29udGV4dCYmYS5kZXN0cm95KCl9LGEuY29udmVydD1mdW5jdGlvbihhLGIpe2lmKFwiYXV0b1wiPT1hJiZ0aGlzLmF1dG8pcmV0dXJuIGE7dmFyIGMsZT1cIm51bWJlclwiPT10eXBlb2YgYSxmPVwic3RyaW5nXCI9PXR5cGVvZiBhO3N3aXRjaChiKXtjYXNlIHQ6aWYoZSlyZXR1cm4gYTtpZihmJiZcIlwiPT09YS5yZXBsYWNlKHIsXCJcIikpcmV0dXJuK2E7Yz1cIm51bWJlcih1bml0bGVzcylcIjticmVhaztjYXNlIHU6aWYoZil7aWYoXCJcIj09PWEmJnRoaXMub3JpZ2luYWwpcmV0dXJuIHRoaXMub3JpZ2luYWw7aWYoYi50ZXN0KGEpKXJldHVyblwiI1wiPT1hLmNoYXJBdCgwKSYmNz09YS5sZW5ndGg/YTpkKGEpfWM9XCJoZXggb3IgcmdiIHN0cmluZ1wiO2JyZWFrO2Nhc2UgdjppZihlKXJldHVybiBhK3RoaXMudW5pdDtpZihmJiZiLnRlc3QoYSkpcmV0dXJuIGE7Yz1cIm51bWJlcihweCkgb3Igc3RyaW5nKHVuaXQpXCI7YnJlYWs7Y2FzZSB3OmlmKGUpcmV0dXJuIGErdGhpcy51bml0O2lmKGYmJmIudGVzdChhKSlyZXR1cm4gYTtjPVwibnVtYmVyKHB4KSBvciBzdHJpbmcodW5pdCBvciAlKVwiO2JyZWFrO2Nhc2UgeDppZihlKXJldHVybiBhK3RoaXMuYW5nbGU7aWYoZiYmYi50ZXN0KGEpKXJldHVybiBhO2M9XCJudW1iZXIoZGVnKSBvciBzdHJpbmcoYW5nbGUpXCI7YnJlYWs7Y2FzZSB5OmlmKGUpcmV0dXJuIGE7aWYoZiYmdy50ZXN0KGEpKXJldHVybiBhO2M9XCJudW1iZXIodW5pdGxlc3MpIG9yIHN0cmluZyh1bml0IG9yICUpXCJ9cmV0dXJuIGcoYyxhKSxhfSxhLnJlZHJhdz1mdW5jdGlvbigpe3RoaXMuZWwub2Zmc2V0SGVpZ2h0fX0pLE89bChOLGZ1bmN0aW9uKGEsYil7YS5pbml0PWZ1bmN0aW9uKCl7Yi5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLm9yaWdpbmFsfHwodGhpcy5vcmlnaW5hbD10aGlzLmNvbnZlcnQodGhpcy5nZXQoKSx1KSl9fSksUD1sKE4sZnVuY3Rpb24oYSxiKXthLmluaXQ9ZnVuY3Rpb24oKXtiLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuYW5pbWF0ZT10aGlzLmZhbGxiYWNrfSxhLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbFt0aGlzLm5hbWVdKCl9LGEudXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMuJGVsW3RoaXMubmFtZV0oYSl9fSksUT1sKE4sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWY9WltjXSxlPWZbMF0sZD1mWzFdfHxjLGc9dGhpcy5jb252ZXJ0KGFbY10sZSksYi5jYWxsKHRoaXMsZCxnLGUpfWEuaW5pdD1mdW5jdGlvbigpe2IuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5jdXJyZW50fHwodGhpcy5jdXJyZW50PXt9LFoucGVyc3BlY3RpdmUmJlUucGVyc3BlY3RpdmUmJih0aGlzLmN1cnJlbnQucGVyc3BlY3RpdmU9VS5wZXJzcGVjdGl2ZSxWKHRoaXMuZWwsdGhpcy5uYW1lLHRoaXMuc3R5bGUodGhpcy5jdXJyZW50KSksdGhpcy5yZWRyYXcoKSkpfSxhLnNldD1mdW5jdGlvbihhKXtjLmNhbGwodGhpcyxhLGZ1bmN0aW9uKGEsYil7dGhpcy5jdXJyZW50W2FdPWJ9KSxWKHRoaXMuZWwsdGhpcy5uYW1lLHRoaXMuc3R5bGUodGhpcy5jdXJyZW50KSksdGhpcy5yZWRyYXcoKX0sYS50cmFuc2l0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudmFsdWVzKGEpO3RoaXMudHdlZW49bmV3IFQoe2N1cnJlbnQ6dGhpcy5jdXJyZW50LHZhbHVlczpiLGR1cmF0aW9uOnRoaXMuZHVyYXRpb24sZGVsYXk6dGhpcy5kZWxheSxlYXNlOnRoaXMuZWFzZX0pO3ZhciBjLGQ9e307Zm9yKGMgaW4gdGhpcy5jdXJyZW50KWRbY109YyBpbiBiP2JbY106dGhpcy5jdXJyZW50W2NdO3RoaXMuYWN0aXZlPSEwLHRoaXMubmV4dFN0eWxlPXRoaXMuc3R5bGUoZCl9LGEuZmFsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52YWx1ZXMoYSk7dGhpcy50d2Vlbj1uZXcgVCh7Y3VycmVudDp0aGlzLmN1cnJlbnQsdmFsdWVzOmIsZHVyYXRpb246dGhpcy5kdXJhdGlvbixkZWxheTp0aGlzLmRlbGF5LGVhc2U6dGhpcy5lYXNlLHVwZGF0ZTp0aGlzLnVwZGF0ZSxjb250ZXh0OnRoaXN9KX0sYS51cGRhdGU9ZnVuY3Rpb24oKXtWKHRoaXMuZWwsdGhpcy5uYW1lLHRoaXMuc3R5bGUodGhpcy5jdXJyZW50KSl9LGEuc3R5bGU9ZnVuY3Rpb24oYSl7dmFyIGIsYz1cIlwiO2ZvcihiIGluIGEpYys9YitcIihcIithW2JdK1wiKSBcIjtyZXR1cm4gY30sYS52YWx1ZXM9ZnVuY3Rpb24oYSl7dmFyIGIsZD17fTtyZXR1cm4gYy5jYWxsKHRoaXMsYSxmdW5jdGlvbihhLGMsZSl7ZFthXT1jLHZvaWQgMD09PXRoaXMuY3VycmVudFthXSYmKGI9MCx+YS5pbmRleE9mKFwic2NhbGVcIikmJihiPTEpLHRoaXMuY3VycmVudFthXT10aGlzLmNvbnZlcnQoYixlKSl9KSxkfX0pLFI9bChmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpezE9PT1uLnB1c2goYSkmJkooZyl9ZnVuY3Rpb24gZygpe3ZhciBhLGIsYyxkPW4ubGVuZ3RoO2lmKGQpZm9yKEooZyksYj1LKCksYT1kO2EtLTspYz1uW2FdLGMmJmMucmVuZGVyKGIpfWZ1bmN0aW9uIGkoYil7dmFyIGMsZD1hLmluQXJyYXkoYixuKTtkPj0wJiYoYz1uLnNsaWNlKGQrMSksbi5sZW5ndGg9ZCxjLmxlbmd0aCYmKG49bi5jb25jYXQoYykpKX1mdW5jdGlvbiBqKGEpe3JldHVybiBNYXRoLnJvdW5kKGEqbykvb31mdW5jdGlvbiBrKGEsYixjKXtyZXR1cm4gZShhWzBdK2MqKGJbMF0tYVswXSksYVsxXStjKihiWzFdLWFbMV0pLGFbMl0rYyooYlsyXS1hWzJdKSl9dmFyIGw9e2Vhc2U6bS5lYXNlWzFdLGZyb206MCx0bzoxfTtiLmluaXQ9ZnVuY3Rpb24oYSl7dGhpcy5kdXJhdGlvbj1hLmR1cmF0aW9ufHwwLHRoaXMuZGVsYXk9YS5kZWxheXx8MDt2YXIgYj1hLmVhc2V8fGwuZWFzZTttW2JdJiYoYj1tW2JdWzFdKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBiJiYoYj1sLmVhc2UpLHRoaXMuZWFzZT1iLHRoaXMudXBkYXRlPWEudXBkYXRlfHxmLHRoaXMuY29tcGxldGU9YS5jb21wbGV0ZXx8Zix0aGlzLmNvbnRleHQ9YS5jb250ZXh0fHx0aGlzLHRoaXMubmFtZT1hLm5hbWU7dmFyIGM9YS5mcm9tLGQ9YS50bzt2b2lkIDA9PT1jJiYoYz1sLmZyb20pLHZvaWQgMD09PWQmJihkPWwudG8pLHRoaXMudW5pdD1hLnVuaXR8fFwiXCIsXCJudW1iZXJcIj09dHlwZW9mIGMmJlwibnVtYmVyXCI9PXR5cGVvZiBkPyh0aGlzLmJlZ2luPWMsdGhpcy5jaGFuZ2U9ZC1jKTp0aGlzLmZvcm1hdChkLGMpLHRoaXMudmFsdWU9dGhpcy5iZWdpbit0aGlzLnVuaXQsdGhpcy5zdGFydD1LKCksYS5hdXRvcGxheSE9PSExJiZ0aGlzLnBsYXkoKX0sYi5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5hY3RpdmV8fCh0aGlzLnN0YXJ0fHwodGhpcy5zdGFydD1LKCkpLHRoaXMuYWN0aXZlPSEwLGModGhpcykpfSxiLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlPSExLGkodGhpcykpfSxiLnJlbmRlcj1mdW5jdGlvbihhKXt2YXIgYixjPWEtdGhpcy5zdGFydDtpZih0aGlzLmRlbGF5KXtpZihjPD10aGlzLmRlbGF5KXJldHVybjtjLT10aGlzLmRlbGF5fWlmKGM8dGhpcy5kdXJhdGlvbil7dmFyIGQ9dGhpcy5lYXNlKGMsMCwxLHRoaXMuZHVyYXRpb24pO3JldHVybiBiPXRoaXMuc3RhcnRSR0I/ayh0aGlzLnN0YXJ0UkdCLHRoaXMuZW5kUkdCLGQpOmoodGhpcy5iZWdpbitkKnRoaXMuY2hhbmdlKSx0aGlzLnZhbHVlPWIrdGhpcy51bml0LHZvaWQgdGhpcy51cGRhdGUuY2FsbCh0aGlzLmNvbnRleHQsdGhpcy52YWx1ZSl9Yj10aGlzLmVuZEhleHx8dGhpcy5iZWdpbit0aGlzLmNoYW5nZSx0aGlzLnZhbHVlPWIrdGhpcy51bml0LHRoaXMudXBkYXRlLmNhbGwodGhpcy5jb250ZXh0LHRoaXMudmFsdWUpLHRoaXMuY29tcGxldGUuY2FsbCh0aGlzLmNvbnRleHQpLHRoaXMuZGVzdHJveSgpfSxiLmZvcm1hdD1mdW5jdGlvbihhLGIpe2lmKGIrPVwiXCIsYSs9XCJcIixcIiNcIj09YS5jaGFyQXQoMCkpcmV0dXJuIHRoaXMuc3RhcnRSR0I9ZChiKSx0aGlzLmVuZFJHQj1kKGEpLHRoaXMuZW5kSGV4PWEsdGhpcy5iZWdpbj0wLHZvaWQodGhpcy5jaGFuZ2U9MSk7aWYoIXRoaXMudW5pdCl7dmFyIGM9Yi5yZXBsYWNlKHIsXCJcIiksZT1hLnJlcGxhY2UocixcIlwiKTtjIT09ZSYmaChcInR3ZWVuXCIsYixhKSx0aGlzLnVuaXQ9Y31iPXBhcnNlRmxvYXQoYiksYT1wYXJzZUZsb2F0KGEpLHRoaXMuYmVnaW49dGhpcy52YWx1ZT1iLHRoaXMuY2hhbmdlPWEtYn0sYi5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdG9wKCksdGhpcy5jb250ZXh0PW51bGwsdGhpcy5lYXNlPXRoaXMudXBkYXRlPXRoaXMuY29tcGxldGU9Zn07dmFyIG49W10sbz0xZTN9KSxTPWwoUixmdW5jdGlvbihhKXthLmluaXQ9ZnVuY3Rpb24oYSl7dGhpcy5kdXJhdGlvbj1hLmR1cmF0aW9ufHwwLHRoaXMuY29tcGxldGU9YS5jb21wbGV0ZXx8Zix0aGlzLmNvbnRleHQ9YS5jb250ZXh0LHRoaXMucGxheSgpfSxhLnJlbmRlcj1mdW5jdGlvbihhKXt2YXIgYj1hLXRoaXMuc3RhcnQ7Yjx0aGlzLmR1cmF0aW9ufHwodGhpcy5jb21wbGV0ZS5jYWxsKHRoaXMuY29udGV4dCksdGhpcy5kZXN0cm95KCkpfX0pLFQ9bChSLGZ1bmN0aW9uKGEsYil7YS5pbml0PWZ1bmN0aW9uKGEpe3RoaXMuY29udGV4dD1hLmNvbnRleHQsdGhpcy51cGRhdGU9YS51cGRhdGUsdGhpcy50d2VlbnM9W10sdGhpcy5jdXJyZW50PWEuY3VycmVudDt2YXIgYixjO2ZvcihiIGluIGEudmFsdWVzKWM9YS52YWx1ZXNbYl0sdGhpcy5jdXJyZW50W2JdIT09YyYmdGhpcy50d2VlbnMucHVzaChuZXcgUih7bmFtZTpiLGZyb206dGhpcy5jdXJyZW50W2JdLHRvOmMsZHVyYXRpb246YS5kdXJhdGlvbixkZWxheTphLmRlbGF5LGVhc2U6YS5lYXNlLGF1dG9wbGF5OiExfSkpO3RoaXMucGxheSgpfSxhLnJlbmRlcj1mdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcy50d2VlbnMubGVuZ3RoLGU9ITE7Zm9yKGI9ZDtiLS07KWM9dGhpcy50d2VlbnNbYl0sYy5jb250ZXh0JiYoYy5yZW5kZXIoYSksdGhpcy5jdXJyZW50W2MubmFtZV09Yy52YWx1ZSxlPSEwKTtyZXR1cm4gZT92b2lkKHRoaXMudXBkYXRlJiZ0aGlzLnVwZGF0ZS5jYWxsKHRoaXMuY29udGV4dCkpOnRoaXMuZGVzdHJveSgpfSxhLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZihiLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLnR3ZWVucyl7dmFyIGEsYz10aGlzLnR3ZWVucy5sZW5ndGg7Zm9yKGE9YzthLS07KXRoaXMudHdlZW5zW2FdLmRlc3Ryb3koKTt0aGlzLnR3ZWVucz1udWxsLHRoaXMuY3VycmVudD1udWxsfX19KSxVPWIuY29uZmlnPXtkZWJ1ZzohMSxkZWZhdWx0VW5pdDpcInB4XCIsZGVmYXVsdEFuZ2xlOlwiZGVnXCIsa2VlcEluaGVyaXRlZDohMSxoaWRlQmFja2ZhY2U6ITEscGVyc3BlY3RpdmU6XCJcIixmYWxsYmFjazohRy50cmFuc2l0aW9uLGFnZW50VGVzdHM6W119O2IuZmFsbGJhY2s9ZnVuY3Rpb24oYSl7aWYoIUcudHJhbnNpdGlvbilyZXR1cm4gVS5mYWxsYmFjaz0hMDtVLmFnZW50VGVzdHMucHVzaChcIihcIithK1wiKVwiKTt2YXIgYj1uZXcgUmVnRXhwKFUuYWdlbnRUZXN0cy5qb2luKFwifFwiKSxcImlcIik7VS5mYWxsYmFjaz1iLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LGIuZmFsbGJhY2soXCI2LjAuWzItNV0gU2FmYXJpXCIpLGIudHdlZW49ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBSKGEpfSxiLmRlbGF5PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbmV3IFMoe2NvbXBsZXRlOmIsZHVyYXRpb246YSxjb250ZXh0OmN9KX0sYS5mbi50cmFtPWZ1bmN0aW9uKGEpe3JldHVybiBiLmNhbGwobnVsbCx0aGlzLGEpfTt2YXIgVj1hLnN0eWxlLFc9YS5jc3MsWD17dHJhbnNmb3JtOkcudHJhbnNmb3JtJiZHLnRyYW5zZm9ybS5jc3N9LFk9e2NvbG9yOltPLHVdLGJhY2tncm91bmQ6W08sdSxcImJhY2tncm91bmQtY29sb3JcIl0sXCJvdXRsaW5lLWNvbG9yXCI6W08sdV0sXCJib3JkZXItY29sb3JcIjpbTyx1XSxcImJvcmRlci10b3AtY29sb3JcIjpbTyx1XSxcImJvcmRlci1yaWdodC1jb2xvclwiOltPLHVdLFwiYm9yZGVyLWJvdHRvbS1jb2xvclwiOltPLHVdLFwiYm9yZGVyLWxlZnQtY29sb3JcIjpbTyx1XSxcImJvcmRlci13aWR0aFwiOltOLHZdLFwiYm9yZGVyLXRvcC13aWR0aFwiOltOLHZdLFwiYm9yZGVyLXJpZ2h0LXdpZHRoXCI6W04sdl0sXCJib3JkZXItYm90dG9tLXdpZHRoXCI6W04sdl0sXCJib3JkZXItbGVmdC13aWR0aFwiOltOLHZdLFwiYm9yZGVyLXNwYWNpbmdcIjpbTix2XSxcImxldHRlci1zcGFjaW5nXCI6W04sdl0sbWFyZ2luOltOLHZdLFwibWFyZ2luLXRvcFwiOltOLHZdLFwibWFyZ2luLXJpZ2h0XCI6W04sdl0sXCJtYXJnaW4tYm90dG9tXCI6W04sdl0sXCJtYXJnaW4tbGVmdFwiOltOLHZdLHBhZGRpbmc6W04sdl0sXCJwYWRkaW5nLXRvcFwiOltOLHZdLFwicGFkZGluZy1yaWdodFwiOltOLHZdLFwicGFkZGluZy1ib3R0b21cIjpbTix2XSxcInBhZGRpbmctbGVmdFwiOltOLHZdLFwib3V0bGluZS13aWR0aFwiOltOLHZdLG9wYWNpdHk6W04sdF0sdG9wOltOLHddLHJpZ2h0OltOLHddLGJvdHRvbTpbTix3XSxsZWZ0OltOLHddLFwiZm9udC1zaXplXCI6W04sd10sXCJ0ZXh0LWluZGVudFwiOltOLHddLFwid29yZC1zcGFjaW5nXCI6W04sd10sd2lkdGg6W04sd10sXCJtaW4td2lkdGhcIjpbTix3XSxcIm1heC13aWR0aFwiOltOLHddLGhlaWdodDpbTix3XSxcIm1pbi1oZWlnaHRcIjpbTix3XSxcIm1heC1oZWlnaHRcIjpbTix3XSxcImxpbmUtaGVpZ2h0XCI6W04seV0sXCJzY3JvbGwtdG9wXCI6W1AsdCxcInNjcm9sbFRvcFwiXSxcInNjcm9sbC1sZWZ0XCI6W1AsdCxcInNjcm9sbExlZnRcIl19LFo9e307Ry50cmFuc2Zvcm0mJihZLnRyYW5zZm9ybT1bUV0sWj17eDpbdyxcInRyYW5zbGF0ZVhcIl0seTpbdyxcInRyYW5zbGF0ZVlcIl0scm90YXRlOlt4XSxyb3RhdGVYOlt4XSxyb3RhdGVZOlt4XSxzY2FsZTpbdF0sc2NhbGVYOlt0XSxzY2FsZVk6W3RdLHNrZXc6W3hdLHNrZXdYOlt4XSxza2V3WTpbeF19KSxHLnRyYW5zZm9ybSYmRy5iYWNrZmFjZSYmKFouej1bdyxcInRyYW5zbGF0ZVpcIl0sWi5yb3RhdGVaPVt4XSxaLnNjYWxlWj1bdF0sWi5wZXJzcGVjdGl2ZT1bdl0pO3ZhciAkPS9tcy8sXz0vc3xcXC4vO3JldHVybiBhLnRyYW09Yn0od2luZG93LmpRdWVyeSk7XG4iXSwibmFtZXMiOlsid2luZG93IiwidHJhbSIsImEiLCJiIiwiYyIsIk0iLCJCYXJlIiwiaW5pdCIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsImQiLCJwYXJzZUludCIsInNsaWNlIiwiZSIsInRvU3RyaW5nIiwiZiIsImciLCJqIiwiaCIsImkiLCIkIiwidGVzdCIsIl8iLCJwYXJzZUZsb2F0IiwiVSIsImRlYnVnIiwiY29uc29sZSIsIndhcm4iLCJrIiwibGVuZ3RoIiwicHVzaCIsImwiLCJhcHBseSIsImFyZ3VtZW50cyIsIk9iamVjdCIsIm0iLCJuIiwiY29uc3RydWN0b3IiLCJtaXhpbiIsIm9wZW4iLCJjYWxsIiwiaGFzT3duUHJvcGVydHkiLCJlYXNlIiwibGluZWFyIiwiTWF0aCIsImNvcyIsIlBJIiwic2luIiwicG93Iiwic3FydCIsIm8iLCJkb2N1bWVudCIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiQSIsIkIiLCJDIiwiY3JlYXRlRWxlbWVudCIsIkQiLCJFIiwiRiIsInN0eWxlIiwiZG9tIiwiY3NzIiwic3BsaXQiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsIkciLCJzdXBwb3J0IiwiYmluZCIsIkZ1bmN0aW9uIiwicHJvdG90eXBlIiwidHJhbnNmb3JtIiwidHJhbnNpdGlvbiIsImJhY2tmYWNlIiwidGltaW5nIiwiSCIsIkkiLCJKIiwiZnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJvUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwiSyIsIm5vdyIsInBlcmZvcm1hbmNlIiwid2Via2l0Tm93IiwibXNOb3ciLCJtb3pOb3ciLCJEYXRlIiwiTCIsIlkiLCJ3ZWFrIiwicHJvcHMiLCIkZWwiLCJ0aW1lciIsImRlc3Ryb3kiLCJxdWV1ZSIsImFjdGl2ZSIsIlMiLCJkdXJhdGlvbiIsImNvbnRleHQiLCJjb21wbGV0ZSIsInNwYW4iLCJzdG9wIiwiYW5pbWF0ZSIsIndhaXQiLCJuYW1lIiwibmV4dFN0eWxlIiwib3B0aW9ucyIsImFyZ3MiLCJzaGlmdCIsImVsIiwiZGlzcGxheSIsIm9mZnNldEhlaWdodCIsInJlbW92ZURhdGEiLCJ1cHN0cmVhbSIsInN0cmluZyIsImpvaW4iLCJaIiwic2V0IiwiY2hpbGRyZW4iLCJrZWVwSW5oZXJpdGVkIiwiZmFsbGJhY2siLCJXIiwiaGlkZUJhY2tmYWNlIiwiViIsImRhdGEiLCJzdGFydCIsImVhY2giLCJOIiwiZ2V0IiwidXBkYXRlIiwiZXhlYyIsImRlbGF5IiwiWCIsInR5cGUiLCJhdXRvIiwidW5pdCIsImRlZmF1bHRVbml0IiwiYW5nbGUiLCJkZWZhdWx0QW5nbGUiLCJjb252ZXJ0IiwicmVkcmF3IiwidHdlZW4iLCJSIiwiZnJvbSIsInRvIiwib3JpZ2luYWwiLCJPIiwiUCIsIlEiLCJjdXJyZW50IiwicGVyc3BlY3RpdmUiLCJ2YWx1ZXMiLCJUIiwiaW5kZXhPZiIsInJlbmRlciIsImluQXJyYXkiLCJjb25jYXQiLCJyb3VuZCIsImJlZ2luIiwiY2hhbmdlIiwiZm9ybWF0IiwidmFsdWUiLCJhdXRvcGxheSIsInBsYXkiLCJzdGFydFJHQiIsImVuZFJHQiIsImVuZEhleCIsInR3ZWVucyIsImNvbmZpZyIsImFnZW50VGVzdHMiLCJSZWdFeHAiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmbiIsImNvbG9yIiwiYmFja2dyb3VuZCIsIm1hcmdpbiIsInBhZGRpbmciLCJvcGFjaXR5IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJyb3RhdGUiLCJyb3RhdGVYIiwicm90YXRlWSIsInNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwic2tldyIsInNrZXdYIiwic2tld1kiLCJyb3RhdGVaIiwic2NhbGVaIiwialF1ZXJ5Il0sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQsR0FDdkQsa0JBQWtCLEdBQ2xCOzs7OztDQUtDLEdBQ0QsbUJBQW1CO0FBQ25CQSxPQUFPQyxJQUFJLEdBQUMsU0FBU0MsQ0FBQztJQUFFLFNBQVNDLEVBQUVELENBQUMsRUFBQ0MsQ0FBQztRQUFFLElBQUlDLElBQUUsSUFBSUMsRUFBRUMsSUFBSTtRQUFDLE9BQU9GLEVBQUVHLElBQUksQ0FBQ0wsR0FBRUM7SUFBRTtJQUFDLFNBQVNDLEVBQUVGLENBQUM7UUFBRSxPQUFPQSxFQUFFTSxPQUFPLENBQUMsVUFBUyxTQUFTTixDQUFDO1lBQUUsT0FBTSxNQUFJQSxFQUFFTyxXQUFXO1FBQUU7SUFBRztJQUFDLFNBQVNDLEVBQUVSLENBQUM7UUFBRSxJQUFJQyxJQUFFUSxTQUFTVCxFQUFFVSxLQUFLLENBQUMsSUFBRyxLQUFJUixJQUFFRCxLQUFHLEtBQUcsS0FBSU8sSUFBRVAsS0FBRyxJQUFFLEtBQUlVLElBQUUsTUFBSVY7UUFBRSxPQUFNO1lBQUNDO1lBQUVNO1lBQUVHO1NBQUU7SUFBQTtJQUFDLFNBQVNBLEVBQUVYLENBQUMsRUFBQ0MsQ0FBQyxFQUFDQyxDQUFDO1FBQUUsT0FBTSxNQUFJLEFBQUMsQ0FBQSxLQUFHLEtBQUdGLEtBQUcsS0FBR0MsS0FBRyxJQUFFQyxDQUFBQSxFQUFHVSxRQUFRLENBQUMsSUFBSUYsS0FBSyxDQUFDO0lBQUU7SUFBQyxTQUFTRyxLQUFJO0lBQUMsU0FBU0MsRUFBRWQsQ0FBQyxFQUFDQyxDQUFDO1FBQUVjLEVBQUUsOEJBQTRCZixJQUFFLGFBQVcsT0FBT0MsSUFBRSxPQUFLQTtJQUFFO0lBQUMsU0FBU2UsRUFBRWhCLENBQUMsRUFBQ0MsQ0FBQyxFQUFDQyxDQUFDO1FBQUVhLEVBQUUs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 }), 5756: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; // Include tram for frame-throttling /* globals window */ var $ = window.$; var tram = __webpack_require__(5487) && $.tram; /*! * Webflow._ (aka) Underscore.js 1.6.0 (custom build) * * http://underscorejs.org * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors * Underscore may be freely distributed under the MIT license. * @license MIT */ /** * Webflow custom build of Underscore.js 1.6.0 * https://github.com/jashkenas/underscore/tree/1.6.0 * * _.each * _.map * _.find * _.filter * _.any * _.contains * _.delay * _.defer * _.throttle (webflow) * _.debounce * _.keys * _.has * _.now * _.template (webflow: upgraded to 1.13.6) */ module.exports = function() { var _ = {}; // Current version. _.VERSION = '1.6.0-Webflow'; // Establish the object that gets returned to break out of a loop iteration. var breaker = {}; // Save bytes in the minified (but not gzipped) version: /* eslint-disable one-var */ var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; /* eslint-enable one-var */ // Create quick reference variables for speed access to core prototypes. /* eslint-disable one-var, unused-imports/no-unused-vars */ var push = ArrayProto.push, slice = ArrayProto.slice, concat = ArrayProto.concat, toString = ObjProto.toString, hasOwnProperty = ObjProto.hasOwnProperty; /* eslint-enable one-var, unused-imports/no-unused-vars */ // All **ECMAScript 5** native function implementations that we hope to use // are declared here. /* eslint-disable one-var, unused-imports/no-unused-vars */ var nativeForEach = ArrayProto.forEach, nativeMap = ArrayProto.map, nativeReduce = ArrayProto.reduce, nativeReduceRight = ArrayProto.reduceRight, nativeFilter = ArrayProto.filter, nativeEvery = ArrayProto.every, nativeSome = ArrayProto.some, nativeIndexOf = ArrayProto.indexOf, nativeLastIndexOf = ArrayProto.lastIndexOf, nativeIsArray = Array.isArray, nativeKeys = Object.keys, nativeBind = FuncProto.bind; /* eslint-enable one-var, unused-imports/no-unused-vars */ // Collection Functions // -------------------- // The cornerstone, an `each` implementation, aka `forEach`. // Handles objects with the built-in `forEach`, arrays, and raw objects. // Delegates to **ECMAScript 5**'s native `forEach` if available. var each = _.each = _.forEach = function(obj, iterator, context) { /* jshint shadow:true */ if (obj == null) return obj; if (nativeForEach && obj.forEach === nativeForEach) { obj.forEach(iterator, context); // eslint-disable-next-line no-implicit-coercion } else if (obj.length === +obj.length) { for(var i = 0, length = obj.length; i < length; i++){ if (iterator.call(context, obj[i], i, obj) === breaker) return; } } else { var keys = _.keys(obj); // eslint-disable-next-line no-redeclare for(var i = 0, length = keys.length; i < length; i++){ if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return; } } return obj; }; // Return the results of applying the iterator to each element. // Delegates to **ECMAScript 5**'s native `map` if available. _.map = _.collect = function(obj, iterator, context) { var results = []; if (obj == null) return results; if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); each(obj, function(value, index, list) { results.push(iterator.call(context, value, index, list)); }); return results; }; // Return the first value which passes a truth test. Aliased as `detect`. _.find = _.detect = function(obj, predicate, context) { var result; any(obj, function(value, index, list) { if (predicate.call(context, value, index, list)) { result = value; return true; } }); return result; }; // Return all the elements that pass a truth test. // Delegates to **ECMAScript 5**'s native `filter` if available. // Aliased as `select`. _.filter = _.select = function(obj, predicate, context) { var results = []; if (obj == null) return results; if (nativeFilter && obj.filter === nativeFilter) return obj.filter(predicate, context); each(obj, function(value, index, list) { if (predicate.call(context, value, index, list)) results.push(value); }); return results; }; // Determine if at least one element in the object matches a truth test. // Delegates to **ECMAScript 5**'s native `some` if available. // Aliased as `any`. var any = _.some = _.any = function(obj, predicate, context) { predicate || (predicate = _.identity); var result = false; if (obj == null) return result; if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context); each(obj, function(value, index, list) { if (result || (result = predicate.call(context, value, index, list))) return breaker; }); return !!result; // eslint-disable-line no-implicit-coercion }; // Determine if the array or object contains a given value (using `===`). // Aliased as `include`. _.contains = _.include = function(obj, target) { if (obj == null) return false; if (nativeIndexOf && obj.indexOf === nativeIndexOf) // eslint-disable-next-line eqeqeq return obj.indexOf(target) != -1; return any(obj, function(value) { return value === target; }); }; // Function (ahem) Functions // -------------------- // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. _.delay = function(func, wait) { var args = slice.call(arguments, 2); return setTimeout(function() { return func.apply(null, args); }, wait); }; // Defers a function, scheduling it to run after the current call stack has // cleared. _.defer = function(func) { return _.delay.apply(_, [ func, 1 ].concat(slice.call(arguments, 1))); }; // Returns a function, that, when invoked, will only be triggered once every // browser animation frame - using tram's requestAnimationFrame polyfill. _.throttle = function(func) { // eslint-disable-next-line one-var var wait, args, context; return function() { if (wait) return; wait = true; args = arguments; context = this; tram.frame(function() { wait = false; func.apply(context, args); }); }; }; // Returns a function, that, as long as it continues to be invoked, will not // be triggered. The function will be called after it stops being called for // N milliseconds. If `immediate` is passed, trigger the function on the // leading edge, instead of the trailing. _.debounce = function(func, wait, immediate) { // eslint-disable-next-line one-var var timeout, args, context, timestamp, result; var later = function() { var last = _.now() - timestamp; if (last < wait) { timeout = setTimeout(later, wait - last); } else { timeout = null; if (!immediate) { result = func.apply(context, args); context = args = null; } } }; return function() { context = this; args = arguments; timestamp = _.now(); var callNow = immediate && !timeout; if (!timeout) { timeout = setTimeout(later, wait); } if (callNow) { result = func.apply(context, args); context = args = null; } return result; }; }; // Object Functions // ---------------- // Fill in a given object with default properties. _.defaults = function(obj) { if (!_.isObject(obj)) return obj; for(var i = 1, length = arguments.length; i < length; i++){ var source = arguments[i]; for(var prop in source){ // eslint-disable-next-line no-void if (obj[prop] === void 0) obj[prop] = source[prop]; } } return obj; }; // Retrieve the names of an object's properties. // Delegates to **ECMAScript 5**'s native `Object.keys` _.keys = function(obj) { if (!_.isObject(obj)) return []; if (nativeKeys) return nativeKeys(obj); var keys = []; for(var key in obj)if (_.has(obj, key)) keys.push(key); return keys; }; // Shortcut function for checking if an object has a given property directly // on itself (in other words, not on a prototype). _.has = function(obj, key) { return hasOwnProperty.call(obj, key); }; // Is a given variable an object? _.isObject = function(obj) { return obj === Object(obj); }; // Utility Functions // ----------------- // A (possibly faster) way to get the current timestamp as an integer. _.now = Date.now || function() { return new Date().getTime(); }; // By default, Underscore uses ERB-style template delimiters, change the // following template settings to use alternative delimiters. _.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g }; // When customizing `templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is // guaranteed not to match. var noMatch = /(.)^/; // Certain characters need to be escaped so that they can be put into a // string literal. var escapes = { "'": "'", '\\': '\\', '\r': 'r', '\n': 'n', '\u2028': 'u2028', '\u2029': 'u2029' }; var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; var escapeChar = function(match) { return '\\' + escapes[match]; }; // In order to prevent third-party code injection through // `_.templateSettings.variable`, we test it against the following regular // expression. It is intentionally a bit more liberal than just matching valid // identifiers, but still prevents possible loopholes through defaults or // destructuring assignment. var bareIdentifier = /^\s*(\w|\$)+\s*$/; // JavaScript micro-templating, similar to John Resig's implementation. // Underscore templating handles arbitrary delimiters, preserves whitespace, // and correctly escapes quotes within interpolated code. // NB: `oldSettings` only exists for backwards compatibility. _.template = function(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; settings = _.defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ (settings.escape || noMatch).source, (settings.interpolate || noMatch).source, (settings.evaluate || noMatch).source ].join('|') + '|$', 'g'); // Compile the template source, escaping string literals appropriately. var index = 0; var source = "__p+='"; text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { source += text.slice(index, offset).replace(escapeRegExp, escapeChar); index = offset + match.length; if (escape) { source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; } else if (interpolate) { source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; } else if (evaluate) { source += "';\n" + evaluate + "\n__p+='"; } // Adobe VMs need the match returned to produce the correct offset. return match; }); source += "';\n"; var argument = settings.variable; if (argument) { // Insure against third-party code injection. (CVE-2021-23358) if (!bareIdentifier.test(argument)) throw new Error('variable is not a bare identifier: ' + argument); } else { // If a variable is not specified, place data values in local scope. source = 'with(obj||{}){\n' + source + '}\n'; argument = 'obj'; } source = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + source + 'return __p;\n'; var render; try { // eslint-disable-next-line no-new-func render = new Function(settings.variable || 'obj', '_', source); } catch (e) { e.source = source; throw e; } var template = function(data) { return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. template.source = 'function(' + argument + '){\n' + source + '}'; return template; }; // Export underscore return _; }(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuZGVyc2NvcmUtY3VzdG9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEluY2x1ZGUgdHJhbSBmb3IgZnJhbWUtdGhyb3R0bGluZ1xuLyogZ2xvYmFscyB3aW5kb3cgKi9cblxudmFyICQgPSB3aW5kb3cuJDtcbnZhciB0cmFtID0gcmVxdWlyZSgnLi90cmFtLW1pbicpICYmICQudHJhbTtcblxuLyohXG4gKiBXZWJmbG93Ll8gKGFrYSkgVW5kZXJzY29yZS5qcyAxLjYuMCAoY3VzdG9tIGJ1aWxkKVxuICpcbiAqIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4gKiAoYykgMjAwOS0yMDEzIEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbi8qKlxuICogV2ViZmxvdyBjdXN0b20gYnVpbGQgb2YgVW5kZXJzY29yZS5qcyAxLjYuMFxuICogaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3RyZWUvMS42LjBcbiAqXG4gKiBfLmVhY2hcbiAqIF8ubWFwXG4gKiBfLmZpbmRcbiAqIF8uZmlsdGVyXG4gKiBfLmFueVxuICogXy5jb250YWluc1xuICogXy5kZWxheVxuICogXy5kZWZlclxuICogXy50aHJvdHRsZSAod2ViZmxvdylcbiAqIF8uZGVib3VuY2VcbiAqIF8ua2V5c1xuICogXy5oYXNcbiAqIF8ubm93XG4gKiBfLnRlbXBsYXRlICh3ZWJmbG93OiB1cGdyYWRlZCB0byAxLjEzLjYpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIF8gPSB7fTtcblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjYuMC1XZWJmbG93JztcblxuICAvLyBFc3RhYmxpc2ggdGhlIG9iamVjdCB0aGF0IGdldHMgcmV0dXJuZWQgdG8gYnJlYWsgb3V0IG9mIGEgbG9vcCBpdGVyYXRpb24uXG4gIHZhciBicmVha2VyID0ge307XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgLyogZXNsaW50LWRpc2FibGUgb25lLXZhciAqL1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuICAvKiBlc2xpbnQtZW5hYmxlIG9uZS12YXIgKi9cblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgLyogZXNsaW50LWRpc2FibGUgb25lLXZhciwgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIGNvbmNhdCA9IEFycmF5UHJvdG8uY29uY2F0LFxuICAgIHRvU3RyaW5nID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcbiAgLyogZXNsaW50LWVuYWJsZSBvbmUtdmFyLCB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgLyogZXNsaW50LWRpc2FibGUgb25lLXZhciwgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cbiAgdmFyIG5hdGl2ZUZvckVhY2ggPSBBcnJheVByb3RvLmZvckVhY2gsXG4gICAgbmF0aXZlTWFwID0gQXJyYXlQcm90by5tYXAsXG4gICAgbmF0aXZlUmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2UsXG4gICAgbmF0aXZlUmVkdWNlUmlnaHQgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0LFxuICAgIG5hdGl2ZUZpbHRlciA9IEFycmF5UHJvdG8uZmlsdGVyLFxuICAgIG5hdGl2ZUV2ZXJ5ID0gQXJyYXlQcm90by5ldmVyeSxcbiAgICBuYXRpdmVTb21lID0gQXJyYXlQcm90by5zb21lLFxuICAgIG5hdGl2ZUluZGV4T2YgPSBBcnJheVByb3RvLmluZGV4T2YsXG4gICAgbmF0aXZlTGFzdEluZGV4T2YgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mLFxuICAgIG5hdGl2ZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICBuYXRpdmVCaW5kID0gRnVuY1Byb3RvLmJpbmQ7XG4gIC8qIGVzbGludC1lbmFibGUgb25lLXZhciwgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIG9iamVjdHMgd2l0aCB0aGUgYnVpbHQtaW4gYGZvckVhY2hgLCBhcnJheXMsIGFuZCByYXcgb2JqZWN0cy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGZvckVhY2hgIGlmIGF2YWlsYWJsZS5cbiAgdmFyIGVhY2ggPVxuICAgIChfLmVhY2ggPVxuICAgIF8uZm9yRWFjaCA9XG4gICAgICBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvKiBqc2hpbnQgc2hhZG93OnRydWUgKi9cbiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgICBpZiAobmF0aXZlRm9yRWFjaCAmJiBvYmouZm9yRWFjaCA9PT0gbmF0aXZlRm9yRWFjaCkge1xuICAgICAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbiAgICAgICAgfSBlbHNlIGlmIChvYmoubGVuZ3RoID09PSArb2JqLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKSA9PT0gYnJlYWtlcikgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopID09PSBicmVha2VyKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9KTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdG9yIHRvIGVhY2ggZWxlbWVudC5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYG1hcGAgaWYgYXZhaWxhYmxlLlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHRzO1xuICAgIGlmIChuYXRpdmVNYXAgJiYgb2JqLm1hcCA9PT0gbmF0aXZlTWFwKSByZXR1cm4gb2JqLm1hcChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbiAob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGFueShvYmosIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBmaWx0ZXJgIGlmIGF2YWlsYWJsZS5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uIChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0cztcbiAgICBpZiAobmF0aXZlRmlsdGVyICYmIG9iai5maWx0ZXIgPT09IG5hdGl2ZUZpbHRlcilcbiAgICAgIHJldHVybiBvYmouZmlsdGVyKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgc29tZWAgaWYgYXZhaWxhYmxlLlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICB2YXIgYW55ID1cbiAgICAoXy5zb21lID1cbiAgICBfLmFueSA9XG4gICAgICBmdW5jdGlvbiAob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICAgICAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBfLmlkZW50aXR5KTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIGlmIChuYXRpdmVTb21lICYmIG9iai5zb21lID09PSBuYXRpdmVTb21lKVxuICAgICAgICAgIHJldHVybiBvYmouc29tZShwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgICBlYWNoKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICAgIGlmIChyZXN1bHQgfHwgKHJlc3VsdCA9IHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpKVxuICAgICAgICAgICAgcmV0dXJuIGJyZWFrZXI7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gISFyZXN1bHQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbiAgICAgIH0pO1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gdmFsdWUgKHVzaW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbiAob2JqLCB0YXJnZXQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAobmF0aXZlSW5kZXhPZiAmJiBvYmouaW5kZXhPZiA9PT0gbmF0aXZlSW5kZXhPZilcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIHJldHVybiBvYmouaW5kZXhPZih0YXJnZXQpICE9IC0xO1xuICAgIHJldHVybiBhbnkob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGFyZ2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0aW9uIChmdW5jLCB3YWl0KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBmdW5jdGlvbiAoZnVuYykge1xuICAgIHJldHVybiBfLmRlbGF5LmFwcGx5KF8sIFtmdW5jLCAxXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgb25jZSBldmVyeVxuICAvLyBicm93c2VyIGFuaW1hdGlvbiBmcmFtZSAtIHVzaW5nIHRyYW0ncyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgcG9seWZpbGwuXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbiAoZnVuYykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvbmUtdmFyXG4gICAgdmFyIHdhaXQsIGFyZ3MsIGNvbnRleHQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh3YWl0KSByZXR1cm47XG4gICAgICB3YWl0ID0gdHJ1ZTtcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIHRyYW0uZnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3YWl0ID0gZmFsc2U7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uIChmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb25lLXZhclxuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcbiAgICAgIGlmIChsYXN0IDwgd2FpdCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICB9XG4gICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIGZvciAodmFyIGkgPSAxLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICBpZiAob2JqW3Byb3BdID09PSB2b2lkIDApIG9ialtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbiAob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gT2JqZWN0KG9iaik7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID1cbiAgICBEYXRlLm5vdyB8fFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZTogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZTogLzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlOiAvPCUtKFtcXHNcXFNdKz8pJT4vZyxcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOScsXG4gIH07XG5cbiAgdmFyIGVzY2FwZVJlZ0V4cCA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uIHRocm91Z2hcbiAgLy8gYF8udGVtcGxhdGVTZXR0aW5ncy52YXJpYWJsZWAsIHdlIHRlc3QgaXQgYWdhaW5zdCB0aGUgZm9sbG93aW5nIHJlZ3VsYXJcbiAgLy8gZXhwcmVzc2lvbi4gSXQgaXMgaW50ZW50aW9uYWxseSBhIGJpdCBtb3JlIGxpYmVyYWwgdGhhbiBqdXN0IG1hdGNoaW5nIHZhbGlkXG4gIC8vIGlkZW50aWZpZXJzLCBidXQgc3RpbGwgcHJldmVudHMgcG9zc2libGUgbG9vcGhvbGVzIHRocm91Z2ggZGVmYXVsdHMgb3JcbiAgLy8gZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50LlxuICB2YXIgYmFyZUlkZW50aWZpZXIgPSAvXlxccyooXFx3fFxcJCkrXFxzKiQvO1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uICh0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChcbiAgICAgIFtcbiAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICBdLmpvaW4oJ3wnKSArICd8JCcsXG4gICAgICAnZydcbiAgICApO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShcbiAgICAgIG1hdGNoZXIsXG4gICAgICBmdW5jdGlvbiAobWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVSZWdFeHAsIGVzY2FwZUNoYXIpO1xuICAgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZnNldC5cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuICAgICk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlO1xuICAgIGlmIChhcmd1bWVudCkge1xuICAgICAgLy8gSW5zdXJlIGFnYWluc3QgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24uIChDVkUtMjAyMS0yMzM1OClcbiAgICAgIGlmICghYmFyZUlkZW50aWZpZXIudGVzdChhcmd1bWVudCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgICAgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcbiAgICAgIGFyZ3VtZW50ID0gJ29iaic7XG4gICAgfVxuXG4gICAgc291cmNlID1cbiAgICAgIFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgK1xuICAgICAgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHZhciByZW5kZXI7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAvLyBFeHBvcnQgdW5kZXJzY29yZVxuICByZXR1cm4gXztcbn0pKCk7XG4iXSwibmFtZXMiOlsiJCIsIndpbmRvdyIsInRyYW0iLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsIl8iLCJWRVJTSU9OIiwiYnJlYWtlciIsIkFycmF5UHJvdG8iLCJBcnJheSIsInByb3RvdHlwZSIsIk9ialByb3RvIiwiT2JqZWN0IiwiRnVuY1Byb3RvIiwiRnVuY3Rpb24iLCJwdXNoIiwic2xpY2UiLCJjb25jYXQiLCJ0b1N0cmluZyIsImhhc093blByb3BlcnR5IiwibmF0aXZlRm9yRWFjaCIsImZvckVhY2giLCJuYXRpdmVNYXAiLCJtYXAiLCJuYXRpdmVSZWR1Y2UiLCJyZWR1Y2UiLCJuYXRpdmVSZWR1Y2VSaWdodCIsInJlZHVjZVJpZ2h0IiwibmF0aXZlRmlsdGVyIiwiZmlsdGVyIiwibmF0aXZlRXZlcnkiLCJldmVyeSIsIm5hdGl2ZVNvbWUiLCJzb21lIiwibmF0aXZlSW5kZXhPZiIsImluZGV4T2YiLCJuYXRpdmVMYXN0SW5kZXhPZiIsImxhc3RJbmRleE9mIiwibmF0aXZlSXNBcnJheSIsImlzQXJyYXkiLCJuYXRpdmVLZXlzIiwia2V5cyIsIm5hdGl2ZUJpbmQiLCJiaW5kIiwiZWFjaCIsIm9iaiIsIml0ZXJhdG9yIiwiY29udGV4dCIsImxlbmd0aCIsImkiLCJjYWxsIiwiY29sbGVjdCIsInJlc3VsdHMiLCJ2YWx1ZSIsImluZGV4IiwibGlzdCIsImZpbmQiLCJkZXRlY3QiLCJwcmVkaWNhdGUiLCJyZXN1bHQiLCJhbnkiLCJzZWxlY3QiLCJpZGVudGl0eSIsImNvbnRhaW5zIiwiaW5jbHVkZSIsInRhcmdldCIsImRlbGF5IiwiZnVuYyIsIndhaXQiLCJhcmdzIiwiYXJndW1lbnRzIiwic2V0VGltZW91dCIsImFwcGx5IiwiZGVmZXIiLCJ0aHJvdHRsZSIsImZyYW1lIiwiZGVib3VuY2UiLCJpbW1lZGlhdGUiLCJ0aW1lb3V0IiwidGltZXN0YW1wIiwibGF0ZXIiLCJsYXN0Iiwibm93IiwiY2FsbE5vdyIsImRlZmF1bHRzIiwiaXNPYmplY3QiLCJzb3VyY2UiLCJwcm9wIiwia2V5IiwiaGFzIiwiRGF0ZSIsImdldFRpbWUiLCJ0ZW1wbGF0ZVNldHRpbmdzIiwiZXZhbHVhdGUiLCJpbnRlcnBvbGF0ZSIsImVzY2FwZSIsIm5vTWF0Y2giLCJlc2NhcGVzIiwiZXNjYXBlUmVnRXhwIiwiZXNjYXBlQ2hhciIsIm1hdGNoIiwiYmFyZUlkZW50aWZpZXIiLCJ0ZW1wbGF0ZSIsInRleHQiLCJzZXR0aW5ncyIsIm9sZFNldHRpbmdzIiwibWF0Y2hlciIsIlJlZ0V4cCIsImpvaW4iLCJyZXBsYWNlIiwib2Zmc2V0IiwiYXJndW1lbnQiLCJ2YXJpYWJsZSIsInRlc3QiLCJFcnJvciIsInJlbmRlciIsImUiLCJkYXRhIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFDcEMsa0JBQWtCO0FBRWxCLElBQUlBLElBQUlDLE9BQU9ELENBQUM7QUFDaEIsSUFBSUUsT0FBT0MsUUFBUSxpQkFBaUJILEVBQUVFLElBQUk7QUFFMUM7Ozs7Ozs7Q0FPQyxHQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQkMsR0FDREUsT0FBT0MsT0FBTyxHQUFHLEFBQUM7SUFDaEIsSUFBSUMsSUFBSSxDQUFDO0lBRVQsbUJBQW1CO0lBQ25CQSxFQUFFQyxPQUFPLEdBQUc7SUFFWiw0RUFBNEU7SUFDNUUsSUFBSUMsVUFBVSxDQUFDO0lBRWYsd0RBQXdEO0lBQ3hELDBCQUEwQixHQUMxQixJQUFJQyxhQUFhQyxNQUFNQyxTQUFTLEVBQzlCQyxXQUFXQyxPQUFPRixTQUFTLEVBQzNCRyxZQUFZQyxTQUFTSixTQUFTO0lBQ2hDLHlCQUF5QixHQUV6Qix3RUFBd0U7SUFDeEUseURBQXlELEdBQ3pELElBQUlLLE9BQU9QLFdBQVdPLElBQUksRUFDeEJDLFFBQVFSLFdBQVdRLEtBQUssRUFDeEJDLFNBQVNULFdBQVdTLE1BQU0sRUFDMUJDLFdBQVdQLFNBQVNPLFFBQVEsRUFDNUJDLGlCQUFpQlIsU0FBU1EsY0FBYztJQUMxQyx3REFBd0QsR0FFeEQsMkVBQTJFO0lBQzNFLHFCQUFxQjtJQUNyQix5REFBeUQsR0FDekQsSUFBSUMsZ0JBQWdCWixXQUFXYSxPQUFPLEVBQ3BDQyxZQUFZZCxXQUFXZSxHQUFHLEVBQzFC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 }), 9461: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals document, window, navigator */ /** * Webflow: Brand pages on the subdomain */ var Webflow = __webpack_require__(3949); Webflow.define('brand', module.exports = function($) { var api = {}; var doc = document; var $html = $('html'); var $body = $('body'); var namespace = '.w-webflow-badge'; var location = window.location; var isPhantom = /PhantomJS/i.test(navigator.userAgent); var fullScreenEvents = 'fullscreenchange webkitfullscreenchange mozfullscreenchange msfullscreenchange'; var brandElement; // ----------------------------------- // Module methods api.ready = function() { var shouldBrand = $html.attr('data-wf-status'); var publishedDomain = $html.attr('data-wf-domain') || ''; if (/\.webflow\.io$/i.test(publishedDomain) && location.hostname !== publishedDomain) { shouldBrand = true; } if (shouldBrand && !isPhantom) { brandElement = brandElement || createBadge(); ensureBrand(); setTimeout(ensureBrand, 500); $(doc).off(fullScreenEvents, onFullScreenChange).on(fullScreenEvents, onFullScreenChange); } }; function onFullScreenChange() { var fullScreen = doc.fullScreen || doc.mozFullScreen || doc.webkitIsFullScreen || doc.msFullscreenElement || Boolean(doc.webkitFullscreenElement); $(brandElement).attr('style', fullScreen ? 'display: none !important;' : ''); } function createBadge() { var $brand = $('').attr('href', 'https://webflow.com?utm_campaign=brandjs'); var $logoArt = $('').attr('src', 'https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-icon-d2.89e12c322e.svg').attr('alt', '').css({ marginRight: '4px', width: '26px' }); var $logoText = $('').attr('src', 'https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-text-d2.c82cec3b78.svg').attr('alt', 'Made in Webflow'); $brand.append($logoArt, $logoText); return $brand[0]; } function ensureBrand() { var found = $body.children(namespace); var match = found.length && found.get(0) === brandElement; var inEditor = Webflow.env('editor'); if (match) { // Remove brand when Editor is active if (inEditor) { found.remove(); } // Exit early, brand is in place return; } // Remove any invalid brand elements if (found.length) { found.remove(); } // Append the brand (unless Editor is active) if (!inEditor) { $body.append(brandElement); } } // Export module return api; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctYnJhbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBkb2N1bWVudCwgd2luZG93LCBuYXZpZ2F0b3IgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBCcmFuZCBwYWdlcyBvbiB0aGUgc3ViZG9tYWluXG4gKi9cblxudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG5cbldlYmZsb3cuZGVmaW5lKFxuICAnYnJhbmQnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJCkge1xuICAgIHZhciBhcGkgPSB7fTtcbiAgICB2YXIgZG9jID0gZG9jdW1lbnQ7XG4gICAgdmFyICRodG1sID0gJCgnaHRtbCcpO1xuICAgIHZhciAkYm9keSA9ICQoJ2JvZHknKTtcbiAgICB2YXIgbmFtZXNwYWNlID0gJy53LXdlYmZsb3ctYmFkZ2UnO1xuICAgIHZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICB2YXIgaXNQaGFudG9tID0gL1BoYW50b21KUy9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgdmFyIGZ1bGxTY3JlZW5FdmVudHMgPVxuICAgICAgJ2Z1bGxzY3JlZW5jaGFuZ2Ugd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSBtb3pmdWxsc2NyZWVuY2hhbmdlIG1zZnVsbHNjcmVlbmNoYW5nZSc7XG4gICAgdmFyIGJyYW5kRWxlbWVudDtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTW9kdWxlIG1ldGhvZHNcblxuICAgIGFwaS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzaG91bGRCcmFuZCA9ICRodG1sLmF0dHIoJ2RhdGEtd2Ytc3RhdHVzJyk7XG4gICAgICB2YXIgcHVibGlzaGVkRG9tYWluID0gJGh0bWwuYXR0cignZGF0YS13Zi1kb21haW4nKSB8fCAnJztcbiAgICAgIGlmIChcbiAgICAgICAgL1xcLndlYmZsb3dcXC5pbyQvaS50ZXN0KHB1Ymxpc2hlZERvbWFpbikgJiZcbiAgICAgICAgbG9jYXRpb24uaG9zdG5hbWUgIT09IHB1Ymxpc2hlZERvbWFpblxuICAgICAgKSB7XG4gICAgICAgIHNob3VsZEJyYW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRCcmFuZCAmJiAhaXNQaGFudG9tKSB7XG4gICAgICAgIGJyYW5kRWxlbWVudCA9IGJyYW5kRWxlbWVudCB8fCBjcmVhdGVCYWRnZSgpO1xuICAgICAgICBlbnN1cmVCcmFuZCgpO1xuICAgICAgICBzZXRUaW1lb3V0KGVuc3VyZUJyYW5kLCA1MDApO1xuXG4gICAgICAgICQoZG9jKVxuICAgICAgICAgIC5vZmYoZnVsbFNjcmVlbkV2ZW50cywgb25GdWxsU2NyZWVuQ2hhbmdlKVxuICAgICAgICAgIC5vbihmdWxsU2NyZWVuRXZlbnRzLCBvbkZ1bGxTY3JlZW5DaGFuZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbkZ1bGxTY3JlZW5DaGFuZ2UoKSB7XG4gICAgICB2YXIgZnVsbFNjcmVlbiA9XG4gICAgICAgIGRvYy5mdWxsU2NyZWVuIHx8XG4gICAgICAgIGRvYy5tb3pGdWxsU2NyZWVuIHx8XG4gICAgICAgIGRvYy53ZWJraXRJc0Z1bGxTY3JlZW4gfHxcbiAgICAgICAgZG9jLm1zRnVsbHNjcmVlbkVsZW1lbnQgfHxcbiAgICAgICAgQm9vbGVhbihkb2Mud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQpO1xuICAgICAgJChicmFuZEVsZW1lbnQpLmF0dHIoXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgIGZ1bGxTY3JlZW4gPyAnZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OycgOiAnJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVCYWRnZSgpIHtcbiAgICAgIHZhciAkYnJhbmQgPSAkKCc8YSBjbGFzcz1cInctd2ViZmxvdy1iYWRnZVwiPjwvYT4nKS5hdHRyKFxuICAgICAgICAnaHJlZicsXG4gICAgICAgICdodHRwczovL3dlYmZsb3cuY29tP3V0bV9jYW1wYWlnbj1icmFuZGpzJ1xuICAgICAgKTtcblxuICAgICAgdmFyICRsb2dvQXJ0ID0gJCgnPGltZz4nKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAnc3JjJyxcbiAgICAgICAgICAnaHR0cHM6Ly9kM2U1NHYxMDNqOHFiYi5jbG91ZGZyb250Lm5ldC9pbWcvd2ViZmxvdy1iYWRnZS1pY29uLWQyLjg5ZTEyYzMyMmUuc3ZnJ1xuICAgICAgICApXG4gICAgICAgIC5hdHRyKCdhbHQnLCAnJylcbiAgICAgICAgLmNzcyh7XG4gICAgICAgICAgbWFyZ2luUmlnaHQ6ICc0cHgnLFxuICAgICAgICAgIHdpZHRoOiAnMjZweCcsXG4gICAgICAgIH0pO1xuXG4gICAgICB2YXIgJGxvZ29UZXh0ID0gJCgnPGltZz4nKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAnc3JjJyxcbiAgICAgICAgICAnaHR0cHM6Ly9kM2U1NHYxMDNqOHFiYi5jbG91ZGZyb250Lm5ldC9pbWcvd2ViZmxvdy1iYWRnZS10ZXh0LWQyLmM4MmNlYzNiNzguc3ZnJ1xuICAgICAgICApXG4gICAgICAgIC5hdHRyKCdhbHQnLCAnTWFkZSBpbiBXZWJmbG93Jyk7XG5cbiAgICAgICRicmFuZC5hcHBlbmQoJGxvZ29BcnQsICRsb2dvVGV4dCk7XG4gICAgICByZXR1cm4gJGJyYW5kWzBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuc3VyZUJyYW5kKCkge1xuICAgICAgdmFyIGZvdW5kID0gJGJvZHkuY2hpbGRyZW4obmFtZXNwYWNlKTtcbiAgICAgIHZhciBtYXRjaCA9IGZvdW5kLmxlbmd0aCAmJiBmb3VuZC5nZXQoMCkgPT09IGJyYW5kRWxlbWVudDtcbiAgICAgIHZhciBpbkVkaXRvciA9IFdlYmZsb3cuZW52KCdlZGl0b3InKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAvLyBSZW1vdmUgYnJhbmQgd2hlbiBFZGl0b3IgaXMgYWN0aXZlXG4gICAgICAgIGlmIChpbkVkaXRvcikge1xuICAgICAgICAgIGZvdW5kLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4aXQgZWFybHksIGJyYW5kIGlzIGluIHBsYWNlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBhbnkgaW52YWxpZCBicmFuZCBlbGVtZW50c1xuICAgICAgaWYgKGZvdW5kLmxlbmd0aCkge1xuICAgICAgICBmb3VuZC5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIC8vIEFwcGVuZCB0aGUgYnJhbmQgKHVubGVzcyBFZGl0b3IgaXMgYWN0aXZlKVxuICAgICAgaWYgKCFpbkVkaXRvcikge1xuICAgICAgICAkYm9keS5hcHBlbmQoYnJhbmRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIGFwaTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiJCIsImFwaSIsImRvYyIsImRvY3VtZW50IiwiJGh0bWwiLCIkYm9keSIsIm5hbWVzcGFjZSIsImxvY2F0aW9uIiwid2luZG93IiwiaXNQaGFudG9tIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZ1bGxTY3JlZW5FdmVudHMiLCJicmFuZEVsZW1lbnQiLCJyZWFkeSIsInNob3VsZEJyYW5kIiwiYXR0ciIsInB1Ymxpc2hlZERvbWFpbiIsImhvc3RuYW1lIiwiY3JlYXRlQmFkZ2UiLCJlbnN1cmVCcmFuZCIsInNldFRpbWVvdXQiLCJvZmYiLCJvbkZ1bGxTY3JlZW5DaGFuZ2UiLCJvbiIsImZ1bGxTY3JlZW4iLCJtb3pGdWxsU2NyZWVuIiwid2Via2l0SXNGdWxsU2NyZWVuIiwibXNGdWxsc2NyZWVuRWxlbWVudCIsIkJvb2xlYW4iLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsIiRicmFuZCIsIiRsb2dvQXJ0IiwiY3NzIiwibWFyZ2luUmlnaHQiLCJ3aWR0aCIsIiRsb2dvVGV4dCIsImFwcGVuZCIsImZvdW5kIiwiY2hpbGRyZW4iLCJtYXRjaCIsImxlbmd0aCIsImdldCIsImluRWRpdG9yIiwiZW52IiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUMsR0FFdkM7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCRCxRQUFRRSxNQUFNLENBQ1osU0FDQ0MsT0FBT0MsT0FBTyxHQUFHLFNBQVVDLENBQUM7SUFDM0IsSUFBSUMsTUFBTSxDQUFDO0lBQ1gsSUFBSUMsTUFBTUM7SUFDVixJQUFJQyxRQUFRSixFQUFFO0lBQ2QsSUFBSUssUUFBUUwsRUFBRTtJQUNkLElBQUlNLFlBQVk7SUFDaEIsSUFBSUMsV0FBV0MsT0FBT0QsUUFBUTtJQUM5QixJQUFJRSxZQUFZLGFBQWFDLElBQUksQ0FBQ0MsVUFBVUMsU0FBUztJQUNyRCxJQUFJQyxtQkFDRjtJQUNGLElBQUlDO0lBRUosc0NBQXNDO0lBQ3RDLGlCQUFpQjtJQUVqQmIsSUFBSWMsS0FBSyxHQUFHO1FBQ1YsSUFBSUMsY0FBY1osTUFBTWEsSUFBSSxDQUFDO1FBQzdCLElBQUlDLGtCQUFrQmQsTUFBTWEsSUFBSSxDQUFDLHFCQUFxQjtRQUN0RCxJQUNFLGtCQUFrQlAsSUFBSSxDQUFDUSxvQkFDdkJYLFNBQVNZLFFBQVEsS0FBS0QsaUJBQ3RCO1lBQ0FGLGNBQWM7UUFDaEI7UUFDQSxJQUFJQSxlQUFlLENBQUNQLFdBQVc7WUFDN0JLLGVBQWVBLGdCQUFnQk07WUFDL0JDO1lBQ0FDLFdBQVdELGFBQWE7WUFFeEJyQixFQUFFRSxLQUNDcUIsR0FBRyxDQUFDVixrQkFBa0JXLG9CQUN0QkMsRUFBRSxDQUFDWixrQkFBa0JXO1FBQzFCO0lBQ0Y7SUFFQSxTQUFTQTtRQUNQLElBQUlFLGFBQ0Z4QixJQUFJd0IsVUFBVSxJQUNkeEIsSUFBSXlCLGFBQWEsSUFDakJ6QixJQUFJMEIsa0JBQWtCLElBQ3RCMUIsSUFBSTJCLG1CQUFtQixJQUN2QkMsUUFBUTVCLElBQUk2Qix1QkFBdUI7UUFDckMvQixFQUFFYyxjQUFjRyxJQUFJLENBQ2xCLFNBQ0FTLGFBQWEsOEJBQThCO0lBRS9DO0lBRUEsU0FBU047UUFDUCxJQUFJWSxTQUFTaEMsRUFBRSxtQ0FBbUNpQixJQUFJLENBQ3BELFFBQ0E7UUFHRixJQUFJZ0IsV0FBV2pDLEVBQUUsU0FDZGlCLElBQUksQ0FDSCxPQUNBLGtGQUVEQSxJQUFJLENBQUMsT0FBTyxJQUNaaUIsR0FBRyxDQUFDO1lBQ0hDLGFBQWE7WUFDYkMsT0FBTztRQUNUO1FBRUYsSUFBSUMsWUFBWXJDLEVBQUUsU0FDZmlCLElBQUksQ0FDSCxPQUNBLGtGQUVEQSxJQUFJLENBQUMsT0FBTztRQUVmZSxPQUFPTSxNQUFNLENBQUNMLFVBQVVJO1FBQ3hCLE9BQU9MLE1BQU0sQ0FBQyxFQUFFO0lBQ2xCO0lBRUEsU0FBU1g7UUFDUCxJQUFJa0IsUUFBUWxDLE1BQU1tQyxRQUFRLENBQUNsQztRQUMzQixJQUFJbUMsUUFBUUYsTUFBTUcsTUFBTSxJQUFJSCxNQUFNSSxHQUFHLENBQUMsT0FBTzdCO1FBQzdDLElBQUk4QixXQUFXakQsUUFBUWtELEdBQUcsQ0FBQztRQUMzQixJQUFJSixPQUFPO1lBQ1QscUNBQXFDO1lBQ3JDLElBQUlHLFVBQVU7Z0JBQ1pMLE1BQU1PLE1BQU07WUFDZDtZQUNBLGdDQUFnQztZQUNoQztRQUNGO1FBQ0Esb0NBQW9DO1FBQ3BDLElBQUlQLE1BQU1HLE1BQU0sRUFBRTtZQUNoQkgsTUFBTU8sTUFBTTtRQUNkO1FBQ0EsNkNBQTZDO1FBQzdDLElBQUksQ0FBQ0YsVUFBVTtZQUNidkMsTUFBTWlDLE1BQU0sQ0FBQ3hCO1FBQ2Y7SUFDRjtJQUVBLGdCQUFnQjtJQUNoQixPQUFPYjtBQUNUIn0= }), 2338: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document */ /** * Webflow: focus-visible */ var Webflow = __webpack_require__(3949); /* * This polyfill comes from https://github.com/WICG/focus-visible */ Webflow.define('focus-visible', module.exports = function() { /** * Applies the :focus-visible polyfill at the given scope. * A scope in this case is either the top-level Document or a Shadow Root. * * @param {(Document|ShadowRoot)} scope * @see https://github.com/WICG/focus-visible */ function applyFocusVisiblePolyfill(scope) { var hadKeyboardEvent = true; var hadFocusVisibleRecently = false; var hadFocusVisibleRecentlyTimeout = null; var inputTypesAllowlist = { text: true, search: true, url: true, tel: true, email: true, password: true, number: true, date: true, month: true, week: true, time: true, datetime: true, 'datetime-local': true }; /** * Helper function for legacy browsers and iframes which sometimes focus * elements like document, body, and non-interactive SVG. * @param {Element} el */ function isValidFocusTarget(el) { if (el && el !== document && el.nodeName !== 'HTML' && el.nodeName !== 'BODY' && 'classList' in el && 'contains' in el.classList) { return true; } return false; } /** * Computes whether the given element should automatically trigger the * `focus-visible` class being added, i.e. whether it should always match * `:focus-visible` when focused. * @param {Element} el * @return {boolean} */ function focusTriggersKeyboardModality(el) { var type = el.type; var tagName = el.tagName; if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) { return true; } if (tagName === 'TEXTAREA' && !el.readOnly) { return true; } if (el.isContentEditable) { return true; } return false; } function addFocusVisibleAttribute(el) { if (el.getAttribute('data-wf-focus-visible')) { return; } el.setAttribute('data-wf-focus-visible', 'true'); } function removeFocusVisibleAttribute(el) { if (!el.getAttribute('data-wf-focus-visible')) { return; } el.removeAttribute('data-wf-focus-visible'); } /** * If the most recent user interaction was via the keyboard; * and the key press did not include a meta, alt/option, or control key; * then the modality is keyboard. Otherwise, the modality is not keyboard. * Apply `focus-visible` to any current active element and keep track * of our keyboard modality state with `hadKeyboardEvent`. * @param {KeyboardEvent} e */ function onKeyDown(e) { if (e.metaKey || e.altKey || e.ctrlKey) { return; } if (isValidFocusTarget(scope.activeElement)) { addFocusVisibleAttribute(scope.activeElement); } hadKeyboardEvent = true; } /** * If at any point a user clicks with a pointing device, ensure that we change * the modality away from keyboard. * This avoids the situation where a user presses a key on an already focused * element, and then clicks on a different element, focusing it with a * pointing device, while we still think we're in keyboard modality. * @param {Event} e */ function onPointerDown() { hadKeyboardEvent = false; } /** * On `focus`, add the `focus-visible` class to the target if: * - the target received focus as a result of keyboard navigation, or * - the event target is an element that will likely require interaction * via the keyboard (e.g. a text box) * @param {Event} e */ function onFocus(e) { // Prevent IE from focusing the document or HTML element. if (!isValidFocusTarget(e.target)) { return; } if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) { addFocusVisibleAttribute(e.target); } } /** * On `blur`, remove the `focus-visible` class from the target. * @param {Event} e */ function onBlur(e) { if (!isValidFocusTarget(e.target)) { return; } if (e.target.hasAttribute('data-wf-focus-visible')) { // To detect a tab/window switch, we look for a blur event followed // rapidly by a visibility change. // If we don't see a visibility change within 100ms, it's probably a // regular focus change. hadFocusVisibleRecently = true; window.clearTimeout(hadFocusVisibleRecentlyTimeout); hadFocusVisibleRecentlyTimeout = window.setTimeout(function() { hadFocusVisibleRecently = false; }, 100); removeFocusVisibleAttribute(e.target); } } /** * If the user changes tabs, keep track of whether or not the previously * focused element had .focus-visible. * @param {Event} e */ function onVisibilityChange() { if (document.visibilityState === 'hidden') { // If the tab becomes active again, the browser will handle calling focus // on the element (Safari actually calls it twice). // If this tab change caused a blur on an element with focus-visible, // re-apply the class when the user switches back to the tab. if (hadFocusVisibleRecently) { hadKeyboardEvent = true; } addInitialPointerMoveListeners(); } } /** * Add a group of listeners to detect usage of any pointing devices. * These listeners will be added when the polyfill first loads, and anytime * the window is blurred, so that they are active when the window regains * focus. */ function addInitialPointerMoveListeners() { document.addEventListener('mousemove', onInitialPointerMove); document.addEventListener('mousedown', onInitialPointerMove); document.addEventListener('mouseup', onInitialPointerMove); document.addEventListener('pointermove', onInitialPointerMove); document.addEventListener('pointerdown', onInitialPointerMove); document.addEventListener('pointerup', onInitialPointerMove); document.addEventListener('touchmove', onInitialPointerMove); document.addEventListener('touchstart', onInitialPointerMove); document.addEventListener('touchend', onInitialPointerMove); } function removeInitialPointerMoveListeners() { document.removeEventListener('mousemove', onInitialPointerMove); document.removeEventListener('mousedown', onInitialPointerMove); document.removeEventListener('mouseup', onInitialPointerMove); document.removeEventListener('pointermove', onInitialPointerMove); document.removeEventListener('pointerdown', onInitialPointerMove); document.removeEventListener('pointerup', onInitialPointerMove); document.removeEventListener('touchmove', onInitialPointerMove); document.removeEventListener('touchstart', onInitialPointerMove); document.removeEventListener('touchend', onInitialPointerMove); } /** * When the polfyill first loads, assume the user is in keyboard modality. * If any event is received from a pointing device (e.g. mouse, pointer, * touch), turn off keyboard modality. * This accounts for situations where focus enters the page from the URL bar. * @param {Event} e */ function onInitialPointerMove(e) { // Work around a Safari quirk that fires a mousemove on whenever the // window blurs, even if you're tabbing out of the page. ¯\_(ツ)_/¯ if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') { return; } hadKeyboardEvent = false; removeInitialPointerMoveListeners(); } // For some kinds of state, we are interested in changes at the global scope // only. For example, global pointer input, global key presses and global // visibility change should affect the state at every scope: document.addEventListener('keydown', onKeyDown, true); document.addEventListener('mousedown', onPointerDown, true); document.addEventListener('pointerdown', onPointerDown, true); document.addEventListener('touchstart', onPointerDown, true); document.addEventListener('visibilitychange', onVisibilityChange, true); addInitialPointerMoveListeners(); // For focus and blur, we specifically care about state changes in the local // scope. This is because focus / blur events that originate from within a // shadow root are not re-dispatched from the host element if it was already // the active element in its own scope: scope.addEventListener('focus', onFocus, true); scope.addEventListener('blur', onBlur, true); } function ready() { if (typeof document !== 'undefined') { try { // check for native support; this will throw if the selector is not considered valid document.querySelector(':focus-visible'); } catch (e) { // :focus-visible pseudo-selector is not supported natively applyFocusVisiblePolyfill(document); } } } // Export module return { ready }; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctZm9jdXMtdmlzaWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIHdpbmRvdywgZG9jdW1lbnQgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBmb2N1cy12aXNpYmxlXG4gKi9cblxudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG5cbi8qXG4gKiBUaGlzIHBvbHlmaWxsIGNvbWVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZVxuICovXG5XZWJmbG93LmRlZmluZShcbiAgJ2ZvY3VzLXZpc2libGUnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgOmZvY3VzLXZpc2libGUgcG9seWZpbGwgYXQgdGhlIGdpdmVuIHNjb3BlLlxuICAgICAqIEEgc2NvcGUgaW4gdGhpcyBjYXNlIGlzIGVpdGhlciB0aGUgdG9wLWxldmVsIERvY3VtZW50IG9yIGEgU2hhZG93IFJvb3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyhEb2N1bWVudHxTaGFkb3dSb290KX0gc2NvcGVcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcHBseUZvY3VzVmlzaWJsZVBvbHlmaWxsKHNjb3BlKSB7XG4gICAgICB2YXIgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG4gICAgICB2YXIgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSBmYWxzZTtcbiAgICAgIHZhciBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQgPSBudWxsO1xuXG4gICAgICB2YXIgaW5wdXRUeXBlc0FsbG93bGlzdCA9IHtcbiAgICAgICAgdGV4dDogdHJ1ZSxcbiAgICAgICAgc2VhcmNoOiB0cnVlLFxuICAgICAgICB1cmw6IHRydWUsXG4gICAgICAgIHRlbDogdHJ1ZSxcbiAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgIHBhc3N3b3JkOiB0cnVlLFxuICAgICAgICBudW1iZXI6IHRydWUsXG4gICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgIG1vbnRoOiB0cnVlLFxuICAgICAgICB3ZWVrOiB0cnVlLFxuICAgICAgICB0aW1lOiB0cnVlLFxuICAgICAgICBkYXRldGltZTogdHJ1ZSxcbiAgICAgICAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIC8qKlxuICAgICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsZWdhY3kgYnJvd3NlcnMgYW5kIGlmcmFtZXMgd2hpY2ggc29tZXRpbWVzIGZvY3VzXG4gICAgICAgKiBlbGVtZW50cyBsaWtlIGRvY3VtZW50LCBib2R5LCBhbmQgbm9uLWludGVyYWN0aXZlIFNWRy5cbiAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gaXNWYWxpZEZvY3VzVGFyZ2V0KGVsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlbCAmJlxuICAgICAgICAgIGVsICE9PSBkb2N1bWVudCAmJlxuICAgICAgICAgIGVsLm5vZGVOYW1lICE9PSAnSFRNTCcgJiZcbiAgICAgICAgICBlbC5ub2RlTmFtZSAhPT0gJ0JPRFknICYmXG4gICAgICAgICAgJ2NsYXNzTGlzdCcgaW4gZWwgJiZcbiAgICAgICAgICAnY29udGFpbnMnIGluIGVsLmNsYXNzTGlzdFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICAgICAgICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICAgICAgICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gICAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShlbCkge1xuICAgICAgICB2YXIgdHlwZSA9IGVsLnR5cGU7XG4gICAgICAgIHZhciB0YWdOYW1lID0gZWwudGFnTmFtZTtcblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBpbnB1dFR5cGVzQWxsb3dsaXN0W3R5cGVdICYmICFlbC5yZWFkT25seSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZ05hbWUgPT09ICdURVhUQVJFQScgJiYgIWVsLnJlYWRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gYWRkRm9jdXNWaXNpYmxlQXR0cmlidXRlKGVsKSB7XG4gICAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2YtZm9jdXMtdmlzaWJsZScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS13Zi1mb2N1cy12aXNpYmxlJywgJ3RydWUnKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVtb3ZlRm9jdXNWaXNpYmxlQXR0cmlidXRlKGVsKSB7XG4gICAgICAgIGlmICghZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXdmLWZvY3VzLXZpc2libGUnKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtd2YtZm9jdXMtdmlzaWJsZScpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIElmIHRoZSBtb3N0IHJlY2VudCB1c2VyIGludGVyYWN0aW9uIHdhcyB2aWEgdGhlIGtleWJvYXJkO1xuICAgICAgICogYW5kIHRoZSBrZXkgcHJlc3MgZGlkIG5vdCBpbmNsdWRlIGEgbWV0YSwgYWx0L29wdGlvbiwgb3IgY29udHJvbCBrZXk7XG4gICAgICAgKiB0aGVuIHRoZSBtb2RhbGl0eSBpcyBrZXlib2FyZC4gT3RoZXJ3aXNlLCB0aGUgbW9kYWxpdHkgaXMgbm90IGtleWJvYXJkLlxuICAgICAgICogQXBwbHkgYGZvY3VzLXZpc2libGVgIHRvIGFueSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50IGFuZCBrZWVwIHRyYWNrXG4gICAgICAgKiBvZiBvdXIga2V5Ym9hcmQgbW9kYWxpdHkgc3RhdGUgd2l0aCBgaGFkS2V5Ym9hcmRFdmVudGAuXG4gICAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGVcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHtcbiAgICAgICAgaWYgKGUubWV0YUtleSB8fCBlLmFsdEtleSB8fCBlLmN0cmxLZXkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNWYWxpZEZvY3VzVGFyZ2V0KHNjb3BlLmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgYWRkRm9jdXNWaXNpYmxlQXR0cmlidXRlKHNjb3BlLmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gICAgICAgKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICAgICAgICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAgICAgICAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAgICAgICAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIG9uUG9pbnRlckRvd24oKSB7XG4gICAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBPbiBgZm9jdXNgLCBhZGQgdGhlIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byB0aGUgdGFyZ2V0IGlmOlxuICAgICAgICogLSB0aGUgdGFyZ2V0IHJlY2VpdmVkIGZvY3VzIGFzIGEgcmVzdWx0IG9mIGtleWJvYXJkIG5hdmlnYXRpb24sIG9yXG4gICAgICAgKiAtIHRoZSBldmVudCB0YXJnZXQgaXMgYW4gZWxlbWVudCB0aGF0IHdpbGwgbGlrZWx5IHJlcXVpcmUgaW50ZXJhY3Rpb25cbiAgICAgICAqICAgdmlhIHRoZSBrZXlib2FyZCAoZS5nLiBhIHRleHQgYm94KVxuICAgICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBvbkZvY3VzKGUpIHtcbiAgICAgICAgLy8gUHJldmVudCBJRSBmcm9tIGZvY3VzaW5nIHRoZSBkb2N1bWVudCBvciBIVE1MIGVsZW1lbnQuXG4gICAgICAgIGlmICghaXNWYWxpZEZvY3VzVGFyZ2V0KGUudGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYWRLZXlib2FyZEV2ZW50IHx8IGZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5KGUudGFyZ2V0KSkge1xuICAgICAgICAgIGFkZEZvY3VzVmlzaWJsZUF0dHJpYnV0ZShlLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBPbiBgYmx1cmAsIHJlbW92ZSB0aGUgYGZvY3VzLXZpc2libGVgIGNsYXNzIGZyb20gdGhlIHRhcmdldC5cbiAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gb25CbHVyKGUpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRm9jdXNUYXJnZXQoZS50YXJnZXQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUudGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGF0YS13Zi1mb2N1cy12aXNpYmxlJykpIHtcbiAgICAgICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAgICAgLy8gcmFwaWRseSBieSBhIHZpc2liaWxpdHkgY2hhbmdlLlxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IHNlZSBhIHZpc2liaWxpdHkgY2hhbmdlIHdpdGhpbiAxMDBtcywgaXQncyBwcm9iYWJseSBhXG4gICAgICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSB0cnVlO1xuICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0KTtcbiAgICAgICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgcmVtb3ZlRm9jdXNWaXNpYmxlQXR0cmlidXRlKGUudGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIElmIHRoZSB1c2VyIGNoYW5nZXMgdGFicywga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgcHJldmlvdXNseVxuICAgICAgICogZm9jdXNlZCBlbGVtZW50IGhhZCAuZm9jdXMtdmlzaWJsZS5cbiAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gb25WaXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgIC8vIElmIHRoZSB0YWIgYmVjb21lcyBhY3RpdmUgYWdhaW4sIHRoZSBicm93c2VyIHdpbGwgaGFuZGxlIGNhbGxpbmcgZm9jdXNcbiAgICAgICAgICAvLyBvbiB0aGUgZWxlbWVudCAoU2FmYXJpIGFjdHVhbGx5IGNhbGxzIGl0IHR3aWNlKS5cbiAgICAgICAgICAvLyBJZiB0aGlzIHRhYiBjaGFuZ2UgY2F1c2VkIGEgYmx1ciBvbiBhbiBlbGVtZW50IHdpdGggZm9jdXMtdmlzaWJsZSxcbiAgICAgICAgICAvLyByZS1hcHBseSB0aGUgY2xhc3Mgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcyBiYWNrIHRvIHRoZSB0YWIuXG4gICAgICAgICAgaWYgKGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5KSB7XG4gICAgICAgICAgICBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkSW5pdGlhbFBvaW50ZXJNb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBBZGQgYSBncm91cCBvZiBsaXN0ZW5lcnMgdG8gZGV0ZWN0IHVzYWdlIG9mIGFueSBwb2ludGluZyBkZXZpY2VzLlxuICAgICAgICogVGhlc2UgbGlzdGVuZXJzIHdpbGwgYmUgYWRkZWQgd2hlbiB0aGUgcG9seWZpbGwgZmlyc3QgbG9hZHMsIGFuZCBhbnl0aW1lXG4gICAgICAgKiB0aGUgd2luZG93IGlzIGJsdXJyZWQsIHNvIHRoYXQgdGhleSBhcmUgYWN0aXZlIHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zXG4gICAgICAgKiBmb2N1cy5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gYWRkSW5pdGlhbFBvaW50ZXJNb3ZlTGlzdGVuZXJzKCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlbW92ZUluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycygpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFdoZW4gdGhlIHBvbGZ5aWxsIGZpcnN0IGxvYWRzLCBhc3N1bWUgdGhlIHVzZXIgaXMgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gICAgICAgKiBJZiBhbnkgZXZlbnQgaXMgcmVjZWl2ZWQgZnJvbSBhIHBvaW50aW5nIGRldmljZSAoZS5nLiBtb3VzZSwgcG9pbnRlcixcbiAgICAgICAqIHRvdWNoKSwgdHVybiBvZmYga2V5Ym9hcmQgbW9kYWxpdHkuXG4gICAgICAgKiBUaGlzIGFjY291bnRzIGZvciBzaXR1YXRpb25zIHdoZXJlIGZvY3VzIGVudGVycyB0aGUgcGFnZSBmcm9tIHRoZSBVUkwgYmFyLlxuICAgICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBvbkluaXRpYWxQb2ludGVyTW92ZShlKSB7XG4gICAgICAgIC8vIFdvcmsgYXJvdW5kIGEgU2FmYXJpIHF1aXJrIHRoYXQgZmlyZXMgYSBtb3VzZW1vdmUgb24gPGh0bWw+IHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyB3aW5kb3cgYmx1cnMsIGV2ZW4gaWYgeW91J3JlIHRhYmJpbmcgb3V0IG9mIHRoZSBwYWdlLiDCr1xcXyjjg4QpXy/Cr1xuICAgICAgICBpZiAoZS50YXJnZXQubm9kZU5hbWUgJiYgZS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2h0bWwnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFkS2V5Ym9hcmRFdmVudCA9IGZhbHNlO1xuICAgICAgICByZW1vdmVJbml0aWFsUG9pbnRlck1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIHNvbWUga2luZHMgb2Ygc3RhdGUsIHdlIGFyZSBpbnRlcmVzdGVkIGluIGNoYW5nZXMgYXQgdGhlIGdsb2JhbCBzY29wZVxuICAgICAgLy8gb25seS4gRm9yIGV4YW1wbGUsIGdsb2JhbCBwb2ludGVyIGlucHV0LCBnbG9iYWwga2V5IHByZXNzZXMgYW5kIGdsb2JhbFxuICAgICAgLy8gdmlzaWJpbGl0eSBjaGFuZ2Ugc2hvdWxkIGFmZmVjdCB0aGUgc3RhdGUgYXQgZXZlcnkgc2NvcGU6XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duLCB0cnVlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uUG9pbnRlckRvd24sIHRydWUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBvblBvaW50ZXJEb3duLCB0cnVlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblBvaW50ZXJEb3duLCB0cnVlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2liaWxpdHlDaGFuZ2UsIHRydWUpO1xuXG4gICAgICBhZGRJbml0aWFsUG9pbnRlck1vdmVMaXN0ZW5lcnMoKTtcblxuICAgICAgLy8gRm9yIGZvY3VzIGFuZCBibHVyLCB3ZSBzcGVjaWZpY2FsbHkgY2FyZSBhYm91dCBzdGF0ZSBjaGFuZ2VzIGluIHRoZSBsb2NhbFxuICAgICAgLy8gc2NvcGUuIFRoaXMgaXMgYmVjYXVzZSBmb2N1cyAvIGJsdXIgZXZlbnRzIHRoYXQgb3JpZ2luYXRlIGZyb20gd2l0aGluIGFcbiAgICAgIC8vIHNoYWRvdyByb290IGFyZSBub3QgcmUtZGlzcGF0Y2hlZCBmcm9tIHRoZSBob3N0IGVsZW1lbnQgaWYgaXQgd2FzIGFscmVhZHlcbiAgICAgIC8vIHRoZSBhY3RpdmUgZWxlbWVudCBpbiBpdHMgb3duIHNjb3BlOlxuICAgICAgc2NvcGUuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbkZvY3VzLCB0cnVlKTtcbiAgICAgIHNjb3BlLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbkJsdXIsIHRydWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBjaGVjayBmb3IgbmF0aXZlIHN1cHBvcnQ7IHRoaXMgd2lsbCB0aHJvdyBpZiB0aGUgc2VsZWN0b3IgaXMgbm90IGNvbnNpZGVyZWQgdmFsaWRcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCc6Zm9jdXMtdmlzaWJsZScpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gOmZvY3VzLXZpc2libGUgcHNldWRvLXNlbGVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQgbmF0aXZlbHlcbiAgICAgICAgICBhcHBseUZvY3VzVmlzaWJsZVBvbHlmaWxsKGRvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4ge3JlYWR5fTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBwbHlGb2N1c1Zpc2libGVQb2x5ZmlsbCIsInNjb3BlIiwiaGFkS2V5Ym9hcmRFdmVudCIsImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5IiwiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0IiwiaW5wdXRUeXBlc0FsbG93bGlzdCIsInRleHQiLCJzZWFyY2giLCJ1cmwiLCJ0ZWwiLCJlbWFpbCIsInBhc3N3b3JkIiwibnVtYmVyIiwiZGF0ZSIsIm1vbnRoIiwid2VlayIsInRpbWUiLCJkYXRldGltZSIsImlzVmFsaWRGb2N1c1RhcmdldCIsImVsIiwiZG9jdW1lbnQiLCJub2RlTmFtZSIsImNsYXNzTGlzdCIsImZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5IiwidHlwZSIsInRhZ05hbWUiLCJyZWFkT25seSIsImlzQ29udGVudEVkaXRhYmxlIiwiYWRkRm9jdXNWaXNpYmxlQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlRm9jdXNWaXNpYmxlQXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwib25LZXlEb3duIiwiZSIsIm1ldGFLZXkiLCJhbHRLZXkiLCJjdHJsS2V5IiwiYWN0aXZlRWxlbWVudCIsIm9uUG9pbnRlckRvd24iLCJvbkZvY3VzIiwidGFyZ2V0Iiwib25CbHVyIiwiaGFzQXR0cmlidXRlIiwid2luZG93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsInZpc2liaWxpdHlTdGF0ZSIsImFkZEluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbkluaXRpYWxQb2ludGVyTW92ZSIsInJlbW92ZUluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0b0xvd2VyQ2FzZSIsInJlYWR5IiwicXVlcnlTZWxlY3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0Qjs7Q0FFQyxHQUNERCxRQUFRRSxNQUFNLENBQ1osaUJBQ0NDLE9BQU9DLE9BQU8sR0FBRztJQUNoQjs7Ozs7O0tBTUMsR0FDRCxTQUFTQywwQkFBMEJDLEtBQUs7UUFDdEMsSUFBSUMsbUJBQW1CO1FBQ3ZCLElBQUlDLDBCQUEwQjtRQUM5QixJQUFJQyxpQ0FBaUM7UUFFckMsSUFBSUMsc0JBQXNCO1lBQ3hCQyxNQUFNO1lBQ05DLFFBQVE7WUFDUkMsS0FBSztZQUNMQyxLQUFLO1lBQ0xDLE9BQU87WUFDUEMsVUFBVTtZQUNWQyxRQUFRO1lBQ1JDLE1BQU07WUFDTkMsT0FBTztZQUNQQyxNQUFNO1lBQ05DLE1BQU07WUFDTkMsVUFBVTtZQUNWLGtCQUFrQjtRQUNwQjtRQUVBOzs7O09BSUMsR0FDRCxTQUFTQyxtQkFBbUJDLEVBQUU7WUFDNUIsSUFDRUEsTUFDQUEsT0FBT0MsWUFDUEQsR0FBR0UsUUFBUSxLQUFLLFVBQ2hCRixHQUFHRSxRQUFRLEtBQUssVUFDaEIsZUFBZUYsTUFDZixjQUFjQSxHQUFHRyxTQUFTLEVBQzFCO2dCQUNBLE9BQU87WUFDVDtZQUNBLE9BQU87UUFDVDtRQUVBOzs7Ozs7T0FNQyxHQUNELFNBQVNDLDhCQUE4QkosRUFBRTtZQUN2QyxJQUFJSyxPQUFPTCxH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 }), 8334: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals document, MouseEvent */ /** * Webflow: focus */ var Webflow = __webpack_require__(3949); /* * Safari has a weird bug where it doesn't support :focus for links with hrefs, * buttons, and input[type=button|submit], so we listen for mousedown events * instead and force the element to emit a focus event in those cases. * See these webkit bugs for reference: * https://bugs.webkit.org/show_bug.cgi?id=22261 * https://bugs.webkit.org/show_bug.cgi?id=229895 */ Webflow.define('focus', module.exports = function() { var capturedEvents = []; var capturing = false; function captureEvent(e) { if (capturing) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); capturedEvents.unshift(e); } } /* * The only mousedown events we care about here are ones emanating from * (A) anchor links with href attribute, * (B) non-disabled buttons, * (C) non-disabled textarea, * (D) non-disabled inputs of type "button", "reset", "checkbox", "radio", "submit" * (E) non-interactive elements (button, a, input, textarea, select) that have a tabindex with a numeric value * (F) audio elements * (G) video elements with controls attribute */ function isPolyfilledFocusEvent(e) { var el = e.target; var tag = el.tagName; return /^a$/i.test(tag) && el.href != null || // (A) /^(button|textarea)$/i.test(tag) && el.disabled !== true || // (B) (C) /^input$/i.test(tag) && /^(button|reset|submit|radio|checkbox)$/i.test(el.type) && !el.disabled || // (D) !/^(button|input|textarea|select|a)$/i.test(tag) && !Number.isNaN(Number.parseFloat(el.tabIndex)) || // (E) /^audio$/i.test(tag) || // (F) /^video$/i.test(tag) && el.controls === true // (G) ; } function handler(e) { if (isPolyfilledFocusEvent(e)) { // start capturing possible out-of-order mouse events capturing = true; /* * enqueue the focus event _after_ the current batch of events, which * includes any blur events. The correct order of events is: * * [this element] MOUSEDOWN <-- this event * [previously active element] BLUR * [previously active element] FOCUSOUT * [this element] FOCUS <-- forced event * [this element] FOCUSIN <-- forced event * [this element] MOUSEUP <-- possibly captured event (it may have fired _before_ the FOCUS event) * [this element] CLICK <-- possibly captured event (it may have fired _before_ the FOCUS event) */ setTimeout(()=>{ // stop capturing possible out-of-order mouse events capturing = false; // trigger focus event e.target.focus(); // re-dispatch captured mouse events in order while(capturedEvents.length > 0){ var event = capturedEvents.pop(); event.target.dispatchEvent(new MouseEvent(event.type, event)); } }, 0); } } function ready() { if (typeof document !== 'undefined' && document.body.hasAttribute('data-wf-focus-within') && Webflow.env.safari) { document.addEventListener('mousedown', handler, true); document.addEventListener('mouseup', captureEvent, true); document.addEventListener('click', captureEvent, true); } } // Export module return { ready }; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctZm9jdXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBkb2N1bWVudCwgTW91c2VFdmVudCAqL1xuXG4vKipcbiAqIFdlYmZsb3c6IGZvY3VzXG4gKi9cblxudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG5cbi8qXG4gKiBTYWZhcmkgaGFzIGEgd2VpcmQgYnVnIHdoZXJlIGl0IGRvZXNuJ3Qgc3VwcG9ydCA6Zm9jdXMgZm9yIGxpbmtzIHdpdGggaHJlZnMsXG4gKiBidXR0b25zLCBhbmQgaW5wdXRbdHlwZT1idXR0b258c3VibWl0XSwgc28gd2UgbGlzdGVuIGZvciBtb3VzZWRvd24gZXZlbnRzXG4gKiBpbnN0ZWFkIGFuZCBmb3JjZSB0aGUgZWxlbWVudCB0byBlbWl0IGEgZm9jdXMgZXZlbnQgaW4gdGhvc2UgY2FzZXMuXG5cbiAqIFNlZSB0aGVzZSB3ZWJraXQgYnVncyBmb3IgcmVmZXJlbmNlOlxuICogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjYxXG4gKiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5ODk1XG4gKi9cbldlYmZsb3cuZGVmaW5lKFxuICAnZm9jdXMnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNhcHR1cmVkRXZlbnRzID0gW107XG4gICAgdmFyIGNhcHR1cmluZyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gY2FwdHVyZUV2ZW50KGUpIHtcbiAgICAgIGlmIChjYXB0dXJpbmcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBjYXB0dXJlZEV2ZW50cy51bnNoaWZ0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogVGhlIG9ubHkgbW91c2Vkb3duIGV2ZW50cyB3ZSBjYXJlIGFib3V0IGhlcmUgYXJlIG9uZXMgZW1hbmF0aW5nIGZyb21cbiAgICAgKiAoQSkgYW5jaG9yIGxpbmtzIHdpdGggaHJlZiBhdHRyaWJ1dGUsXG4gICAgICogKEIpIG5vbi1kaXNhYmxlZCBidXR0b25zLFxuICAgICAqIChDKSBub24tZGlzYWJsZWQgdGV4dGFyZWEsXG4gICAgICogKEQpIG5vbi1kaXNhYmxlZCBpbnB1dHMgb2YgdHlwZSBcImJ1dHRvblwiLCBcInJlc2V0XCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb1wiLCBcInN1Ym1pdFwiXG4gICAgICogKEUpIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cyAoYnV0dG9uLCBhLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCkgdGhhdCBoYXZlIGEgdGFiaW5kZXggd2l0aCBhIG51bWVyaWMgdmFsdWVcbiAgICAgKiAoRikgYXVkaW8gZWxlbWVudHNcbiAgICAgKiAoRykgdmlkZW8gZWxlbWVudHMgd2l0aCBjb250cm9scyBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1BvbHlmaWxsZWRGb2N1c0V2ZW50KGUpIHtcbiAgICAgIHZhciBlbCA9IGUudGFyZ2V0O1xuICAgICAgdmFyIHRhZyA9IGVsLnRhZ05hbWU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoL15hJC9pLnRlc3QodGFnKSAmJiBlbC5ocmVmICE9IG51bGwpIHx8IC8vIChBKVxuICAgICAgICAoL14oYnV0dG9ufHRleHRhcmVhKSQvaS50ZXN0KHRhZykgJiYgZWwuZGlzYWJsZWQgIT09IHRydWUpIHx8IC8vIChCKSAoQylcbiAgICAgICAgKC9eaW5wdXQkL2kudGVzdCh0YWcpICYmXG4gICAgICAgICAgL14oYnV0dG9ufHJlc2V0fHN1Ym1pdHxyYWRpb3xjaGVja2JveCkkL2kudGVzdChlbC50eXBlKSAmJlxuICAgICAgICAgICFlbC5kaXNhYmxlZCkgfHwgLy8gKEQpXG4gICAgICAgICghL14oYnV0dG9ufGlucHV0fHRleHRhcmVhfHNlbGVjdHxhKSQvaS50ZXN0KHRhZykgJiZcbiAgICAgICAgICAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGVsLnRhYkluZGV4KSkpIHx8IC8vIChFKVxuICAgICAgICAvXmF1ZGlvJC9pLnRlc3QodGFnKSB8fCAvLyAoRilcbiAgICAgICAgKC9edmlkZW8kL2kudGVzdCh0YWcpICYmIGVsLmNvbnRyb2xzID09PSB0cnVlKSAvLyAoRylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlcihlKSB7XG4gICAgICBpZiAoaXNQb2x5ZmlsbGVkRm9jdXNFdmVudChlKSkge1xuICAgICAgICAvLyBzdGFydCBjYXB0dXJpbmcgcG9zc2libGUgb3V0LW9mLW9yZGVyIG1vdXNlIGV2ZW50c1xuICAgICAgICBjYXB0dXJpbmcgPSB0cnVlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIGVucXVldWUgdGhlIGZvY3VzIGV2ZW50IF9hZnRlcl8gdGhlIGN1cnJlbnQgYmF0Y2ggb2YgZXZlbnRzLCB3aGljaFxuICAgICAgICAgKiBpbmNsdWRlcyBhbnkgYmx1ciBldmVudHMuIFRoZSBjb3JyZWN0IG9yZGVyIG9mIGV2ZW50cyBpczpcbiAgICAgICAgICpcbiAgICAgICAgICogW3RoaXMgZWxlbWVudF0gTU9VU0VET1dOICAgICAgICAgICAgICAgPC0tIHRoaXMgZXZlbnRcbiAgICAgICAgICogW3ByZXZpb3VzbHkgYWN0aXZlIGVsZW1lbnRdIEJMVVJcbiAgICAgICAgICogW3ByZXZpb3VzbHkgYWN0aXZlIGVsZW1lbnRdIEZPQ1VTT1VUXG4gICAgICAgICAqIFt0aGlzIGVsZW1lbnRdIEZPQ1VTICAgICAgICAgICAgICAgICAgIDwtLSBmb3JjZWQgZXZlbnRcbiAgICAgICAgICogW3RoaXMgZWxlbWVudF0gRk9DVVNJTiAgICAgICAgICAgICAgICAgPC0tIGZvcmNlZCBldmVudFxuICAgICAgICAgKiBbdGhpcyBlbGVtZW50XSBNT1VTRVVQICAgICAgICAgICAgICAgICA8LS0gcG9zc2libHkgY2FwdHVyZWQgZXZlbnQgKGl0IG1heSBoYXZlIGZpcmVkIF9iZWZvcmVfIHRoZSBGT0NVUyBldmVudClcbiAgICAgICAgICogW3RoaXMgZWxlbWVudF0gQ0xJQ0sgICAgICAgICAgICAgICAgICAgPC0tIHBvc3NpYmx5IGNhcHR1cmVkIGV2ZW50IChpdCBtYXkgaGF2ZSBmaXJlZCBfYmVmb3JlXyB0aGUgRk9DVVMgZXZlbnQpXG4gICAgICAgICAqL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyBzdG9wIGNhcHR1cmluZyBwb3NzaWJsZSBvdXQtb2Ytb3JkZXIgbW91c2UgZXZlbnRzXG4gICAgICAgICAgY2FwdHVyaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAvLyB0cmlnZ2VyIGZvY3VzIGV2ZW50XG4gICAgICAgICAgZS50YXJnZXQuZm9jdXMoKTtcblxuICAgICAgICAgIC8vIHJlLWRpc3BhdGNoIGNhcHR1cmVkIG1vdXNlIGV2ZW50cyBpbiBvcmRlclxuICAgICAgICAgIHdoaWxlIChjYXB0dXJlZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnQgPSBjYXB0dXJlZEV2ZW50cy5wb3AoKTtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KGV2ZW50LnR5cGUsIGV2ZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS13Zi1mb2N1cy13aXRoaW4nKSAmJlxuICAgICAgICBXZWJmbG93LmVudi5zYWZhcmlcbiAgICAgICkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVyLCB0cnVlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGNhcHR1cmVFdmVudCwgdHJ1ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FwdHVyZUV2ZW50LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIHtyZWFkeX07XG4gIH0pXG4pO1xuIl0sIm5hbWVzIjpbIldlYmZsb3ciLCJyZXF1aXJlIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsImNhcHR1cmVkRXZlbnRzIiwiY2FwdHVyaW5nIiwiY2FwdHVyZUV2ZW50IiwiZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwidW5zaGlmdCIsImlzUG9seWZpbGxlZEZvY3VzRXZlbnQiLCJlbCIsInRhcmdldCIsInRhZyIsInRhZ05hbWUiLCJ0ZXN0IiwiaHJlZiIsImRpc2FibGVkIiwidHlwZSIsIk51bWJlciIsImlzTmFOIiwicGFyc2VGbG9hdCIsInRhYkluZGV4IiwiY29udHJvbHMiLCJoYW5kbGVyIiwic2V0VGltZW91dCIsImZvY3VzIiwibGVuZ3RoIiwiZXZlbnQiLCJwb3AiLCJkaXNwYXRjaEV2ZW50IiwiTW91c2VFdmVudCIsInJlYWR5IiwiZG9jdW1lbnQiLCJib2R5IiwiaGFzQXR0cmlidXRlIiwiZW52Iiwic2FmYXJpIiwiYWRkRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDLEdBRWhDOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0Qjs7Ozs7Ozs7Q0FRQyxHQUNERCxRQUFRRSxNQUFNLENBQ1osU0FDQ0MsT0FBT0MsT0FBTyxHQUFHO0lBQ2hCLElBQUlDLGlCQUFpQixFQUFFO0lBQ3ZCLElBQUlDLFlBQVk7SUFFaEIsU0FBU0MsYUFBYUMsQ0FBQztRQUNyQixJQUFJRixXQUFXO1lBQ2JFLEVBQUVDLGNBQWM7WUFDaEJELEVBQUVFLGVBQWU7WUFDakJGLEVBQUVHLHdCQUF3QjtZQUMxQk4sZUFBZU8sT0FBTyxDQUFDSjtRQUN6QjtJQUNGO0lBRUE7Ozs7Ozs7OztLQVNDLEdBQ0QsU0FBU0ssdUJBQXVCTCxDQUFDO1FBQy9CLElBQUlNLEtBQUtOLEVBQUVPLE1BQU07UUFDakIsSUFBSUMsTUFBTUYsR0FBR0csT0FBTztRQUNwQixPQUNFLEFBQUMsT0FBT0MsSUFBSSxDQUFDRixRQUFRRixHQUFHSyxJQUFJLElBQUksUUFBUyxNQUFNO1FBQzlDLHVCQUF1QkQsSUFBSSxDQUFDRixRQUFRRixHQUFHTSxRQUFRLEtBQUssUUFBUyxVQUFVO1FBQ3ZFLFdBQVdGLElBQUksQ0FBQ0YsUUFDZiwwQ0FBMENFLElBQUksQ0FBQ0osR0FBR08sSUFBSSxLQUN0RCxDQUFDUCxHQUFHTSxRQUFRLElBQUssTUFBTTtRQUN4QixDQUFDLHNDQUFzQ0YsSUFBSSxDQUFDRixRQUMzQyxDQUFDTSxPQUFPQyxLQUFLLENBQUNELE9BQU9FLFVBQVUsQ0FBQ1YsR0FBR1csUUFBUSxNQUFPLE1BQU07UUFDMUQsV0FBV1AsSUFBSSxDQUFDRixRQUFRLE1BQU07UUFDN0IsV0FBV0UsSUFBSSxDQUFDRixRQUFRRixHQUFHWSxRQUFRLEtBQUssS0FBTSxNQUFNOztJQUV6RDtJQUVBLFNBQVNDLFFBQVFuQixDQUFDO1FBQ2hCLElBQUlLLHVCQUF1QkwsSUFBSTtZQUM3QixxREFBcUQ7WUFDckRGLFlBQVk7WUFFWjs7Ozs7Ozs7Ozs7U0FXQyxHQUNEc0IsV0FBVztnQkFDVCxvREFBb0Q7Z0JBQ3BEdEIsWUFBWTtnQkFFWixzQkFBc0I7Z0JBQ3RCRSxFQUFFTyxNQUFNLENBQUNjLEtBQUs7Z0JBRWQsNkNBQTZDO2dCQUM3QyxNQUFPeEIsZUFBZXlCLE1BQU0sR0FBRyxFQUFHO29CQUNoQyxJQUFJQyxRQUFRMUIsZUFBZTJCLEdBQUc7b0JBQzlCRCxNQUFNaEIsTUFBTSxDQUFDa0IsYUFBYSxDQUFDLElBQUlDLFdBQVdILE1BQU1WLElBQUksRUFBRVU7Z0JBQ3hEO1lBQ0YsR0FBRztRQUNMO0lBQ0Y7SUFFQSxTQUFTSTtRQUNQLElBQ0UsT0FBT0MsYUFBYSxlQUNwQkEsU0FBU0MsSUFBSSxDQUFDQyxZQUFZLENBQUMsMkJBQzNCdEMsUUFBUXVDLEdBQUcsQ0FBQ0MsTUFBTSxFQUNsQjtZQUNBSixTQUFTSyxnQkFBZ0IsQ0FBQyxhQUFhZCxTQUFTO1lBQ2hEUyxTQUFTSyxnQkFBZ0IsQ0FBQyxXQUFXbEMsY0FBYztZQUNuRDZCLFNBQVNLLGdCQUFnQixDQUFDLFNBQVNsQyxjQUFjO1FBQ25EO0lBQ0Y7SUFFQSxnQkFBZ0I7SUFDaEIsT0FBTztRQUFDNEI7SUFBSztBQUNmIn0= }), 7199: (function (module) { "use strict"; /* globals window */ /** * Webflow: IX Event triggers for other modules */ var $ = window.jQuery; var api = {}; var eventQueue = []; var namespace = '.w-ix'; var eventTriggers = { reset: function(i, el) { el.__wf_intro = null; }, intro: function(i, el) { if (el.__wf_intro) { return; } el.__wf_intro = true; $(el).triggerHandler(api.types.INTRO); }, outro: function(i, el) { if (!el.__wf_intro) { return; } el.__wf_intro = null; $(el).triggerHandler(api.types.OUTRO); } }; api.triggers = {}; api.types = { INTRO: 'w-ix-intro' + namespace, OUTRO: 'w-ix-outro' + namespace }; // Trigger any events in queue + restore trigger methods api.init = function() { var count = eventQueue.length; for(var i = 0; i < count; i++){ var memo = eventQueue[i]; memo[0](0, memo[1]); } eventQueue = []; $.extend(api.triggers, eventTriggers); }; // Replace all triggers with async wrapper to queue events until init api.async = function() { for(var key in eventTriggers){ var func = eventTriggers[key]; if (!eventTriggers.hasOwnProperty(key)) { continue; } // Replace trigger method with async wrapper api.triggers[key] = function(i, el) { eventQueue.push([ func, el ]); }; } }; // Default triggers to async queue api.async(); module.exports = api; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctaXgtZXZlbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93ICovXG5cbi8qKlxuICogV2ViZmxvdzogSVggRXZlbnQgdHJpZ2dlcnMgZm9yIG90aGVyIG1vZHVsZXNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciAkID0gd2luZG93LmpRdWVyeTtcbnZhciBhcGkgPSB7fTtcbnZhciBldmVudFF1ZXVlID0gW107XG52YXIgbmFtZXNwYWNlID0gJy53LWl4JztcblxudmFyIGV2ZW50VHJpZ2dlcnMgPSB7XG4gIHJlc2V0OiBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICBlbC5fX3dmX2ludHJvID0gbnVsbDtcbiAgfSxcbiAgaW50cm86IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgIGlmIChlbC5fX3dmX2ludHJvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsLl9fd2ZfaW50cm8gPSB0cnVlO1xuICAgICQoZWwpLnRyaWdnZXJIYW5kbGVyKGFwaS50eXBlcy5JTlRSTyk7XG4gIH0sXG4gIG91dHJvOiBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICBpZiAoIWVsLl9fd2ZfaW50cm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWwuX193Zl9pbnRybyA9IG51bGw7XG4gICAgJChlbCkudHJpZ2dlckhhbmRsZXIoYXBpLnR5cGVzLk9VVFJPKTtcbiAgfSxcbn07XG5cbmFwaS50cmlnZ2VycyA9IHt9O1xuXG5hcGkudHlwZXMgPSB7XG4gIElOVFJPOiAndy1peC1pbnRybycgKyBuYW1lc3BhY2UsXG4gIE9VVFJPOiAndy1peC1vdXRybycgKyBuYW1lc3BhY2UsXG59O1xuXG4vLyBUcmlnZ2VyIGFueSBldmVudHMgaW4gcXVldWUgKyByZXN0b3JlIHRyaWdnZXIgbWV0aG9kc1xuYXBpLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjb3VudCA9IGV2ZW50UXVldWUubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICB2YXIgbWVtbyA9IGV2ZW50UXVldWVbaV07XG4gICAgbWVtb1swXSgwLCBtZW1vWzFdKTtcbiAgfVxuICBldmVudFF1ZXVlID0gW107XG4gICQuZXh0ZW5kKGFwaS50cmlnZ2VycywgZXZlbnRUcmlnZ2Vycyk7XG59O1xuXG4vLyBSZXBsYWNlIGFsbCB0cmlnZ2VycyB3aXRoIGFzeW5jIHdyYXBwZXIgdG8gcXVldWUgZXZlbnRzIHVudGlsIGluaXRcbmFwaS5hc3luYyA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIga2V5IGluIGV2ZW50VHJpZ2dlcnMpIHtcbiAgICB2YXIgZnVuYyA9IGV2ZW50VHJpZ2dlcnNba2V5XTtcbiAgICBpZiAoIWV2ZW50VHJpZ2dlcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gUmVwbGFjZSB0cmlnZ2VyIG1ldGhvZCB3aXRoIGFzeW5jIHdyYXBwZXJcbiAgICBhcGkudHJpZ2dlcnNba2V5XSA9IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgZXZlbnRRdWV1ZS5wdXNoKFtmdW5jLCBlbF0pO1xuICAgIH07XG4gIH1cbn07XG5cbi8vIERlZmF1bHQgdHJpZ2dlcnMgdG8gYXN5bmMgcXVldWVcbmFwaS5hc3luYygpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFwaTtcbiJdLCJuYW1lcyI6WyIkIiwid2luZG93IiwialF1ZXJ5IiwiYXBpIiwiZXZlbnRRdWV1ZSIsIm5hbWVzcGFjZSIsImV2ZW50VHJpZ2dlcnMiLCJyZXNldCIsImkiLCJlbCIsIl9fd2ZfaW50cm8iLCJpbnRybyIsInRyaWdnZXJIYW5kbGVyIiwidHlwZXMiLCJJTlRSTyIsIm91dHJvIiwiT1VUUk8iLCJ0cmlnZ2VycyIsImluaXQiLCJjb3VudCIsImxlbmd0aCIsIm1lbW8iLCJleHRlbmQiLCJhc3luYyIsImtleSIsImZ1bmMiLCJoYXNPd25Qcm9wZXJ0eSIsInB1c2giLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsR0FFbEI7O0NBRUMsR0FFRDtBQUVBLElBQUlBLElBQUlDLE9BQU9DLE1BQU07QUFDckIsSUFBSUMsTUFBTSxDQUFDO0FBQ1gsSUFBSUMsYUFBYSxFQUFFO0FBQ25CLElBQUlDLFlBQVk7QUFFaEIsSUFBSUMsZ0JBQWdCO0lBQ2xCQyxPQUFPLFNBQVVDLENBQUMsRUFBRUMsRUFBRTtRQUNwQkEsR0FBR0MsVUFBVSxHQUFHO0lBQ2xCO0lBQ0FDLE9BQU8sU0FBVUgsQ0FBQyxFQUFFQyxFQUFFO1FBQ3BCLElBQUlBLEdBQUdDLFVBQVUsRUFBRTtZQUNqQjtRQUNGO1FBQ0FELEdBQUdDLFVBQVUsR0FBRztRQUNoQlYsRUFBRVMsSUFBSUcsY0FBYyxDQUFDVCxJQUFJVSxLQUFLLENBQUNDLEtBQUs7SUFDdEM7SUFDQUMsT0FBTyxTQUFVUCxDQUFDLEVBQUVDLEVBQUU7UUFDcEIsSUFBSSxDQUFDQSxHQUFHQyxVQUFVLEVBQUU7WUFDbEI7UUFDRjtRQUNBRCxHQUFHQyxVQUFVLEdBQUc7UUFDaEJWLEVBQUVTLElBQUlHLGNBQWMsQ0FBQ1QsSUFBSVUsS0FBSyxDQUFDRyxLQUFLO0lBQ3RDO0FBQ0Y7QUFFQWIsSUFBSWMsUUFBUSxHQUFHLENBQUM7QUFFaEJkLElBQUlVLEtBQUssR0FBRztJQUNWQyxPQUFPLGVBQWVUO0lBQ3RCVyxPQUFPLGVBQWVYO0FBQ3hCO0FBRUEsd0RBQXdEO0FBQ3hERixJQUFJZSxJQUFJLEdBQUc7SUFDVCxJQUFJQyxRQUFRZixXQUFXZ0IsTUFBTTtJQUM3QixJQUFLLElBQUlaLElBQUksR0FBR0EsSUFBSVcsT0FBT1gsSUFBSztRQUM5QixJQUFJYSxPQUFPakIsVUFBVSxDQUFDSSxFQUFFO1FBQ3hCYSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUdBLElBQUksQ0FBQyxFQUFFO0lBQ3BCO0lBQ0FqQixhQUFhLEVBQUU7SUFDZkosRUFBRXNCLE1BQU0sQ0FBQ25CLElBQUljLFFBQVEsRUFBRVg7QUFDekI7QUFFQSxxRUFBcUU7QUFDckVILElBQUlvQixLQUFLLEdBQUc7SUFDVixJQUFLLElBQUlDLE9BQU9sQixjQUFlO1FBQzdCLElBQUltQixPQUFPbkIsYUFBYSxDQUFDa0IsSUFBSTtRQUM3QixJQUFJLENBQUNsQixjQUFjb0IsY0FBYyxDQUFDRixNQUFNO1lBQ3RDO1FBQ0Y7UUFFQSw0Q0FBNEM7UUFDNUNyQixJQUFJYyxRQUFRLENBQUNPLElBQUksR0FBRyxTQUFVaEIsQ0FBQyxFQUFFQyxFQUFFO1lBQ2pDTCxXQUFXdUIsSUFBSSxDQUFDO2dCQUFDRjtnQkFBTWhCO2FBQUc7UUFDNUI7SUFDRjtBQUNGO0FBRUEsa0NBQWtDO0FBQ2xDTixJQUFJb0IsS0FBSztBQUVUSyxPQUFPQyxPQUFPLEdBQUcxQiJ9 }), 5134: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document */ var IXEvents = __webpack_require__(7199); function dispatchCustomEvent(element, eventName, detail) { var event = document.createEvent('CustomEvent'); event.initCustomEvent(eventName, true, true, detail || null); element.dispatchEvent(event); } /** * Webflow: IX Event triggers for other modules */ var $ = window.jQuery; var api = {}; var namespace = '.w-ix'; var eventTriggers = { reset: function(i, el) { IXEvents.triggers.reset(i, el); }, intro: function(i, el) { IXEvents.triggers.intro(i, el); dispatchCustomEvent(el, 'COMPONENT_ACTIVE'); }, outro: function(i, el) { IXEvents.triggers.outro(i, el); dispatchCustomEvent(el, 'COMPONENT_INACTIVE'); } }; api.triggers = {}; api.types = { INTRO: 'w-ix-intro' + namespace, OUTRO: 'w-ix-outro' + namespace }; $.extend(api.triggers, eventTriggers); api.dispatchCustomEvent = dispatchCustomEvent; module.exports = api; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctaXgyLWV2ZW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIHdpbmRvdywgZG9jdW1lbnQgKi9cblxuJ3VzZSBzdHJpY3QnO1xudmFyIElYRXZlbnRzID0gcmVxdWlyZSgnLi93ZWJmbG93LWl4LWV2ZW50cycpO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEN1c3RvbUV2ZW50KGVsZW1lbnQsIGV2ZW50TmFtZSwgZGV0YWlsKSB7XG4gIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICBldmVudC5pbml0Q3VzdG9tRXZlbnQoZXZlbnROYW1lLCB0cnVlLCB0cnVlLCBkZXRhaWwgfHwgbnVsbCk7XG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbi8qKlxuICogV2ViZmxvdzogSVggRXZlbnQgdHJpZ2dlcnMgZm9yIG90aGVyIG1vZHVsZXNcbiAqL1xuXG52YXIgJCA9IHdpbmRvdy5qUXVlcnk7XG52YXIgYXBpID0ge307XG52YXIgbmFtZXNwYWNlID0gJy53LWl4JztcblxudmFyIGV2ZW50VHJpZ2dlcnMgPSB7XG4gIHJlc2V0OiBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICBJWEV2ZW50cy50cmlnZ2Vycy5yZXNldChpLCBlbCk7XG4gIH0sXG4gIGludHJvOiBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICBJWEV2ZW50cy50cmlnZ2Vycy5pbnRybyhpLCBlbCk7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudChlbCwgJ0NPTVBPTkVOVF9BQ1RJVkUnKTtcbiAgfSxcbiAgb3V0cm86IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgIElYRXZlbnRzLnRyaWdnZXJzLm91dHJvKGksIGVsKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KGVsLCAnQ09NUE9ORU5UX0lOQUNUSVZFJyk7XG4gIH0sXG59O1xuXG5hcGkudHJpZ2dlcnMgPSB7fTtcblxuYXBpLnR5cGVzID0ge1xuICBJTlRSTzogJ3ctaXgtaW50cm8nICsgbmFtZXNwYWNlLFxuICBPVVRSTzogJ3ctaXgtb3V0cm8nICsgbmFtZXNwYWNlLFxufTtcblxuJC5leHRlbmQoYXBpLnRyaWdnZXJzLCBldmVudFRyaWdnZXJzKTtcblxuYXBpLmRpc3BhdGNoQ3VzdG9tRXZlbnQgPSBkaXNwYXRjaEN1c3RvbUV2ZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFwaTtcbiJdLCJuYW1lcyI6WyJJWEV2ZW50cyIsInJlcXVpcmUiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiZWxlbWVudCIsImV2ZW50TmFtZSIsImRldGFpbCIsImV2ZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b21FdmVudCIsImRpc3BhdGNoRXZlbnQiLCIkIiwid2luZG93IiwialF1ZXJ5IiwiYXBpIiwibmFtZXNwYWNlIiwiZXZlbnRUcmlnZ2VycyIsInJlc2V0IiwiaSIsImVsIiwidHJpZ2dlcnMiLCJpbnRybyIsIm91dHJvIiwidHlwZXMiLCJJTlRSTyIsIk9VVFJPIiwiZXh0ZW5kIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCO0FBQ0EsSUFBSUEsV0FBV0MsUUFBUTtBQUV2QixTQUFTQyxvQkFBb0JDLE9BQU8sRUFBRUMsU0FBUyxFQUFFQyxNQUFNO0lBQ3JELElBQUlDLFFBQVFDLFNBQVNDLFdBQVcsQ0FBQztJQUNqQ0YsTUFBTUcsZUFBZSxDQUFDTCxXQUFXLE1BQU0sTUFBTUMsVUFBVTtJQUN2REYsUUFBUU8sYUFBYSxDQUFDSjtBQUN4QjtBQUVBOztDQUVDLEdBRUQsSUFBSUssSUFBSUMsT0FBT0MsTUFBTTtBQUNyQixJQUFJQyxNQUFNLENBQUM7QUFDWCxJQUFJQyxZQUFZO0FBRWhCLElBQUlDLGdCQUFnQjtJQUNsQkMsT0FBTyxTQUFVQyxDQUFDLEVBQUVDLEVBQUU7UUFDcEJuQixTQUFTb0IsUUFBUSxDQUFDSCxLQUFLLENBQUNDLEdBQUdDO0lBQzdCO0lBQ0FFLE9BQU8sU0FBVUgsQ0FBQyxFQUFFQyxFQUFFO1FBQ3BCbkIsU0FBU29CLFFBQVEsQ0FBQ0MsS0FBSyxDQUFDSCxHQUFHQztRQUMzQmpCLG9CQUFvQmlCLElBQUk7SUFDMUI7SUFDQUcsT0FBTyxTQUFVSixDQUFDLEVBQUVDLEVBQUU7UUFDcEJuQixTQUFTb0IsUUFBUSxDQUFDRSxLQUFLLENBQUNKLEdBQUdDO1FBQzNCakIsb0JBQW9CaUIsSUFBSTtJQUMxQjtBQUNGO0FBRUFMLElBQUlNLFFBQVEsR0FBRyxDQUFDO0FBRWhCTixJQUFJUyxLQUFLLEdBQUc7SUFDVkMsT0FBTyxlQUFlVDtJQUN0QlUsT0FBTyxlQUFlVjtBQUN4QjtBQUVBSixFQUFFZSxNQUFNLENBQUNaLElBQUlNLFFBQVEsRUFBRUo7QUFFdkJGLElBQUlaLG1CQUFtQixHQUFHQTtBQUUxQnlCLE9BQU9DLE9BQU8sR0FBR2QifQ== }), 941: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /** * Webflow: Interactions 2 */ var Webflow = __webpack_require__(3949); var ix2 = __webpack_require__(6011); ix2.setEnv(Webflow.env); Webflow.define('ix2', module.exports = function() { return ix2; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctaXgyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2ViZmxvdzogSW50ZXJhY3Rpb25zIDJcbiAqL1xudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG52YXIgaXgyID0gcmVxdWlyZSgnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZScpO1xuXG5peDIuc2V0RW52KFdlYmZsb3cuZW52KTtcblxuV2ViZmxvdy5kZWZpbmUoXG4gICdpeDInLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGl4MjtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJpeDIiLCJzZXRFbnYiLCJlbnYiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Q0FFQztBQUNELElBQUlBLFVBQVVDLFFBQVE7QUFDdEIsSUFBSUMsTUFBTUQsUUFBUTtBQUVsQkMsSUFBSUMsTUFBTSxDQUFDSCxRQUFRSSxHQUFHO0FBRXRCSixRQUFRSyxNQUFNLENBQ1osT0FDQ0MsT0FBT0MsT0FBTyxHQUFHO0lBQ2hCLE9BQU9MO0FBQ1QifQ== }), 3949: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document, navigator, WEBFLOW_ENV_TEST */ /** * Webflow: Core site library */ var Webflow = {}; var modules = {}; var primary = []; var secondary = window.Webflow || []; var $ = window.jQuery; var $win = $(window); var $doc = $(document); var isFunction = $.isFunction; var _ = Webflow._ = __webpack_require__(5756); var tram = Webflow.tram = __webpack_require__(5487) && $.tram; var domready = false; var destroyed = false; tram.config.hideBackface = false; tram.config.keepInherited = true; /** * Webflow.define - Define a named module * @param {string} name * @param {function} factory * @param {object} [options] * @return {object} */ Webflow.define = function(name, factory, options) { if (modules[name]) { unbindModule(modules[name]); } var instance = modules[name] = factory($, _, options) || {}; bindModule(instance); return instance; }; /** * Webflow.require - Require a named module * @param {string} name * @return {object} */ Webflow.require = function(name) { return modules[name]; }; function bindModule(module1) { // If running in Webflow app, subscribe to design/preview events if (Webflow.env()) { isFunction(module1.design) && $win.on('__wf_design', module1.design); isFunction(module1.preview) && $win.on('__wf_preview', module1.preview); } // Subscribe to front-end destroy event isFunction(module1.destroy) && $win.on('__wf_destroy', module1.destroy); // Look for ready method on module if (module1.ready && isFunction(module1.ready)) { addReady(module1); } } function addReady(module1) { // If domready has already happened, run ready method if (domready) { module1.ready(); return; } // Otherwise add ready method to the primary queue (only once) if (_.contains(primary, module1.ready)) { return; } primary.push(module1.ready); } function unbindModule(module1) { // Unsubscribe module from window events isFunction(module1.design) && $win.off('__wf_design', module1.design); isFunction(module1.preview) && $win.off('__wf_preview', module1.preview); isFunction(module1.destroy) && $win.off('__wf_destroy', module1.destroy); // Remove ready method from primary queue if (module1.ready && isFunction(module1.ready)) { removeReady(module1); } } function removeReady(module1) { primary = _.filter(primary, function(readyFn) { return readyFn !== module1.ready; }); } /** * Webflow.push - Add a ready handler into secondary queue * @param {function} ready Callback to invoke on domready */ Webflow.push = function(ready) { // If domready has already happened, invoke handler if (domready) { isFunction(ready) && ready(); return; } // Otherwise push into secondary queue secondary.push(ready); }; /** * Webflow.env - Get the state of the Webflow app * @param {string} mode [optional] * @return {boolean} */ Webflow.env = function(mode) { var designFlag = window.__wf_design; var inApp = typeof designFlag !== 'undefined'; if (!mode) { return inApp; } if (mode === 'design') { return inApp && designFlag; } if (mode === 'preview') { return inApp && !designFlag; } if (mode === 'slug') { return inApp && window.__wf_slug; } if (mode === 'editor') { return window.WebflowEditor; } if (mode === 'test') { return false || window.__wf_test; } if (mode === 'frame') { return window !== window.top; } }; // Feature detects + browser sniffs ಠ_ಠ var userAgent = navigator.userAgent.toLowerCase(); var touch = Webflow.env.touch = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch; var chrome = Webflow.env.chrome = /chrome/.test(userAgent) && /Google/.test(navigator.vendor) && parseInt(userAgent.match(/chrome\/(\d+)\./)[1], 10); var ios = Webflow.env.ios = /(ipod|iphone|ipad)/.test(userAgent); Webflow.env.safari = /safari/.test(userAgent) && !chrome && !ios; // Maintain current touch target to prevent late clicks on touch devices var touchTarget; // Listen for both events to support touch/mouse hybrid devices touch && $doc.on('touchstart mousedown', function(evt) { touchTarget = evt.target; }); /** * Webflow.validClick - validate click target against current touch target * @param {HTMLElement} clickTarget Element being clicked * @return {Boolean} True if click target is valid (always true on non-touch) */ Webflow.validClick = touch ? function(clickTarget) { return clickTarget === touchTarget || $.contains(clickTarget, touchTarget); } : function() { return true; }; /** * Webflow.resize, Webflow.scroll - throttled event proxies */ var resizeEvents = 'resize.webflow orientationchange.webflow load.webflow'; var scrollEvents = 'scroll.webflow ' + resizeEvents; Webflow.resize = eventProxy($win, resizeEvents); Webflow.scroll = eventProxy($win, scrollEvents); Webflow.redraw = eventProxy(); // Create a proxy instance for throttled events function eventProxy(target, types) { // Set up throttled method (using custom frame-based _.throttle) var handlers = []; var proxy = {}; proxy.up = _.throttle(function(evt) { _.each(handlers, function(h) { h(evt); }); }); // Bind events to target if (target && types) { target.on(types, proxy.up); } /** * Add an event handler * @param {function} handler */ proxy.on = function(handler) { if (typeof handler !== 'function') { return; } if (_.contains(handlers, handler)) { return; } handlers.push(handler); }; /** * Remove an event handler * @param {function} handler */ proxy.off = function(handler) { // If no arguments supplied, clear all handlers if (!arguments.length) { handlers = []; return; } // Otherwise, remove handler from the list handlers = _.filter(handlers, function(h) { return h !== handler; }); }; return proxy; } // Webflow.location - Wrap window.location in api Webflow.location = function(url) { window.location = url; }; if (Webflow.env()) { // Ignore redirects inside a Webflow design/edit environment Webflow.location = function() {}; } // Webflow.ready - Call primary and secondary handlers Webflow.ready = function() { domready = true; // Restore modules after destroy if (destroyed) { restoreModules(); // Otherwise run primary ready methods } else { _.each(primary, callReady); } // Run secondary ready methods _.each(secondary, callReady); // Trigger resize Webflow.resize.up(); }; function callReady(readyFn) { isFunction(readyFn) && readyFn(); } function restoreModules() { destroyed = false; _.each(modules, bindModule); } /** * Webflow.load - Add a window load handler that will run even if load event has already happened * @param {function} handler */ var deferLoad; Webflow.load = function(handler) { deferLoad.then(handler); }; function bindLoad() { // Reject any previous deferred (to support destroy) if (deferLoad) { deferLoad.reject(); $win.off('load', deferLoad.resolve); } // Create deferred and bind window load event deferLoad = new $.Deferred(); $win.on('load', deferLoad.resolve); } // Webflow.destroy - Trigger a destroy event for all modules Webflow.destroy = function(options) { options = options || {}; destroyed = true; $win.triggerHandler('__wf_destroy'); // Allow domready reset for tests if (options.domready != null) { domready = options.domready; } // Unbind modules _.each(modules, unbindModule); // Clear any proxy event handlers Webflow.resize.off(); Webflow.scroll.off(); Webflow.redraw.off(); // Clear any queued ready methods primary = []; secondary = []; // If load event has not yet fired, replace the deferred if (deferLoad.state() === 'pending') { bindLoad(); } }; // Listen for domready $(Webflow.ready); // Listen for window.onload and resolve deferred bindLoad(); // Export commonjs module module.exports = window.Webflow = Webflow; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctbGliLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCwgbmF2aWdhdG9yLCBXRUJGTE9XX0VOVl9URVNUICovXG5cbi8qKlxuICogV2ViZmxvdzogQ29yZSBzaXRlIGxpYnJhcnlcbiAqL1xudmFyIFdlYmZsb3cgPSB7fTtcbnZhciBtb2R1bGVzID0ge307XG52YXIgcHJpbWFyeSA9IFtdO1xudmFyIHNlY29uZGFyeSA9IHdpbmRvdy5XZWJmbG93IHx8IFtdO1xudmFyICQgPSB3aW5kb3cualF1ZXJ5O1xudmFyICR3aW4gPSAkKHdpbmRvdyk7XG52YXIgJGRvYyA9ICQoZG9jdW1lbnQpO1xudmFyIGlzRnVuY3Rpb24gPSAkLmlzRnVuY3Rpb247XG52YXIgXyA9IChXZWJmbG93Ll8gPSByZXF1aXJlKCcuL3VuZGVyc2NvcmUtY3VzdG9tJykpO1xudmFyIHRyYW0gPSAoV2ViZmxvdy50cmFtID0gcmVxdWlyZSgnLi90cmFtLW1pbicpICYmICQudHJhbSk7XG52YXIgZG9tcmVhZHkgPSBmYWxzZTtcbnZhciBkZXN0cm95ZWQgPSBmYWxzZTtcblxudHJhbS5jb25maWcuaGlkZUJhY2tmYWNlID0gZmFsc2U7XG50cmFtLmNvbmZpZy5rZWVwSW5oZXJpdGVkID0gdHJ1ZTtcblxuLyoqXG4gKiBXZWJmbG93LmRlZmluZSAtIERlZmluZSBhIG5hbWVkIG1vZHVsZVxuICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gZmFjdG9yeVxuICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuV2ViZmxvdy5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZmFjdG9yeSwgb3B0aW9ucykge1xuICBpZiAobW9kdWxlc1tuYW1lXSkge1xuICAgIHVuYmluZE1vZHVsZShtb2R1bGVzW25hbWVdKTtcbiAgfVxuICB2YXIgaW5zdGFuY2UgPSAobW9kdWxlc1tuYW1lXSA9IGZhY3RvcnkoJCwgXywgb3B0aW9ucykgfHwge30pO1xuICBiaW5kTW9kdWxlKGluc3RhbmNlKTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufTtcblxuLyoqXG4gKiBXZWJmbG93LnJlcXVpcmUgLSBSZXF1aXJlIGEgbmFtZWQgbW9kdWxlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuV2ViZmxvdy5yZXF1aXJlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG1vZHVsZXNbbmFtZV07XG59O1xuXG5mdW5jdGlvbiBiaW5kTW9kdWxlKG1vZHVsZSkge1xuICAvLyBJZiBydW5uaW5nIGluIFdlYmZsb3cgYXBwLCBzdWJzY3JpYmUgdG8gZGVzaWduL3ByZXZpZXcgZXZlbnRzXG4gIGlmIChXZWJmbG93LmVudigpKSB7XG4gICAgaXNGdW5jdGlvbihtb2R1bGUuZGVzaWduKSAmJiAkd2luLm9uKCdfX3dmX2Rlc2lnbicsIG1vZHVsZS5kZXNpZ24pO1xuICAgIGlzRnVuY3Rpb24obW9kdWxlLnByZXZpZXcpICYmICR3aW4ub24oJ19fd2ZfcHJldmlldycsIG1vZHVsZS5wcmV2aWV3KTtcbiAgfVxuICAvLyBTdWJzY3JpYmUgdG8gZnJvbnQtZW5kIGRlc3Ryb3kgZXZlbnRcbiAgaXNGdW5jdGlvbihtb2R1bGUuZGVzdHJveSkgJiYgJHdpbi5vbignX193Zl9kZXN0cm95JywgbW9kdWxlLmRlc3Ryb3kpO1xuICAvLyBMb29rIGZvciByZWFkeSBtZXRob2Qgb24gbW9kdWxlXG4gIGlmIChtb2R1bGUucmVhZHkgJiYgaXNGdW5jdGlvbihtb2R1bGUucmVhZHkpKSB7XG4gICAgYWRkUmVhZHkobW9kdWxlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRSZWFkeShtb2R1bGUpIHtcbiAgLy8gSWYgZG9tcmVhZHkgaGFzIGFscmVhZHkgaGFwcGVuZWQsIHJ1biByZWFkeSBtZXRob2RcbiAgaWYgKGRvbXJlYWR5KSB7XG4gICAgbW9kdWxlLnJlYWR5KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIE90aGVyd2lzZSBhZGQgcmVhZHkgbWV0aG9kIHRvIHRoZSBwcmltYXJ5IHF1ZXVlIChvbmx5IG9uY2UpXG4gIGlmIChfLmNvbnRhaW5zKHByaW1hcnksIG1vZHVsZS5yZWFkeSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbWFyeS5wdXNoKG1vZHVsZS5yZWFkeSk7XG59XG5cbmZ1bmN0aW9uIHVuYmluZE1vZHVsZShtb2R1bGUpIHtcbiAgLy8gVW5zdWJzY3JpYmUgbW9kdWxlIGZyb20gd2luZG93IGV2ZW50c1xuICBpc0Z1bmN0aW9uKG1vZHVsZS5kZXNpZ24pICYmICR3aW4ub2ZmKCdfX3dmX2Rlc2lnbicsIG1vZHVsZS5kZXNpZ24pO1xuICBpc0Z1bmN0aW9uKG1vZHVsZS5wcmV2aWV3KSAmJiAkd2luLm9mZignX193Zl9wcmV2aWV3JywgbW9kdWxlLnByZXZpZXcpO1xuICBpc0Z1bmN0aW9uKG1vZHVsZS5kZXN0cm95KSAmJiAkd2luLm9mZignX193Zl9kZXN0cm95JywgbW9kdWxlLmRlc3Ryb3kpO1xuICAvLyBSZW1vdmUgcmVhZHkgbWV0aG9kIGZyb20gcHJpbWFyeSBxdWV1ZVxuICBpZiAobW9kdWxlLnJlYWR5ICYmIGlzRnVuY3Rpb24obW9kdWxlLnJlYWR5KSkge1xuICAgIHJlbW92ZVJlYWR5KG1vZHVsZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlUmVhZHkobW9kdWxlKSB7XG4gIHByaW1hcnkgPSBfLmZpbHRlcihwcmltYXJ5LCBmdW5jdGlvbiAocmVhZHlGbikge1xuICAgIHJldHVybiByZWFkeUZuICE9PSBtb2R1bGUucmVhZHk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFdlYmZsb3cucHVzaCAtIEFkZCBhIHJlYWR5IGhhbmRsZXIgaW50byBzZWNvbmRhcnkgcXVldWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlYWR5ICBDYWxsYmFjayB0byBpbnZva2Ugb24gZG9tcmVhZHlcbiAqL1xuV2ViZmxvdy5wdXNoID0gZnVuY3Rpb24gKHJlYWR5KSB7XG4gIC8vIElmIGRvbXJlYWR5IGhhcyBhbHJlYWR5IGhhcHBlbmVkLCBpbnZva2UgaGFuZGxlclxuICBpZiAoZG9tcmVhZHkpIHtcbiAgICBpc0Z1bmN0aW9uKHJlYWR5KSAmJiByZWFkeSgpO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBPdGhlcndpc2UgcHVzaCBpbnRvIHNlY29uZGFyeSBxdWV1ZVxuICBzZWNvbmRhcnkucHVzaChyZWFkeSk7XG59O1xuXG4vKipcbiAqIFdlYmZsb3cuZW52IC0gR2V0IHRoZSBzdGF0ZSBvZiB0aGUgV2ViZmxvdyBhcHBcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlIFtvcHRpb25hbF1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbldlYmZsb3cuZW52ID0gZnVuY3Rpb24gKG1vZGUpIHtcbiAgdmFyIGRlc2lnbkZsYWcgPSB3aW5kb3cuX193Zl9kZXNpZ247XG4gIHZhciBpbkFwcCA9IHR5cGVvZiBkZXNpZ25GbGFnICE9PSAndW5kZWZpbmVkJztcbiAgaWYgKCFtb2RlKSB7XG4gICAgcmV0dXJuIGluQXBwO1xuICB9XG4gIGlmIChtb2RlID09PSAnZGVzaWduJykge1xuICAgIHJldHVybiBpbkFwcCAmJiBkZXNpZ25GbGFnO1xuICB9XG4gIGlmIChtb2RlID09PSAncHJldmlldycpIHtcbiAgICByZXR1cm4gaW5BcHAgJiYgIWRlc2lnbkZsYWc7XG4gIH1cbiAgaWYgKG1vZGUgPT09ICdzbHVnJykge1xuICAgIHJldHVybiBpbkFwcCAmJiB3aW5kb3cuX193Zl9zbHVnO1xuICB9XG4gIGlmIChtb2RlID09PSAnZWRpdG9yJykge1xuICAgIHJldHVybiB3aW5kb3cuV2ViZmxvd0VkaXRvcjtcbiAgfVxuICBpZiAobW9kZSA9PT0gJ3Rlc3QnKSB7XG4gICAgcmV0dXJuIFdFQkZMT1dfRU5WX1RFU1QgfHwgd2luZG93Ll9fd2ZfdGVzdDtcbiAgfVxuICBpZiAobW9kZSA9PT0gJ2ZyYW1lJykge1xuICAgIHJldHVybiB3aW5kb3cgIT09IHdpbmRvdy50b3A7XG4gIH1cbn07XG5cbi8vIEZlYXR1cmUgZGV0ZWN0cyArIGJyb3dzZXIgc25pZmZzICDgsqBf4LKgXG5cbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG52YXIgdG91Y2ggPSAoV2ViZmxvdy5lbnYudG91Y2ggPVxuICAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHxcbiAgKHdpbmRvdy5Eb2N1bWVudFRvdWNoICYmIGRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpKTtcbnZhciBjaHJvbWUgPSAoV2ViZmxvdy5lbnYuY2hyb21lID1cbiAgL2Nocm9tZS8udGVzdCh1c2VyQWdlbnQpICYmXG4gIC9Hb29nbGUvLnRlc3QobmF2aWdhdG9yLnZlbmRvcikgJiZcbiAgcGFyc2VJbnQodXNlckFnZW50Lm1hdGNoKC9jaHJvbWVcXC8oXFxkKylcXC4vKVsxXSwgMTApKTtcbnZhciBpb3MgPSAoV2ViZmxvdy5lbnYuaW9zID0gLyhpcG9kfGlwaG9uZXxpcGFkKS8udGVzdCh1c2VyQWdlbnQpKTtcbldlYmZsb3cuZW52LnNhZmFyaSA9IC9zYWZhcmkvLnRlc3QodXNlckFnZW50KSAmJiAhY2hyb21lICYmICFpb3M7XG5cbi8vIE1haW50YWluIGN1cnJlbnQgdG91Y2ggdGFyZ2V0IHRvIHByZXZlbnQgbGF0ZSBjbGlja3Mgb24gdG91Y2ggZGV2aWNlc1xudmFyIHRvdWNoVGFyZ2V0O1xuLy8gTGlzdGVuIGZvciBib3RoIGV2ZW50cyB0byBzdXBwb3J0IHRvdWNoL21vdXNlIGh5YnJpZCBkZXZpY2VzXG50b3VjaCAmJlxuICAkZG9jLm9uKCd0b3VjaHN0YXJ0IG1vdXNlZG93bicsIGZ1bmN0aW9uIChldnQpIHtcbiAgICB0b3VjaFRhcmdldCA9IGV2dC50YXJnZXQ7XG4gIH0pO1xuXG4vKipcbiAqIFdlYmZsb3cudmFsaWRDbGljayAtIHZhbGlkYXRlIGNsaWNrIHRhcmdldCBhZ2FpbnN0IGN1cnJlbnQgdG91Y2ggdGFyZ2V0XG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gY2xpY2tUYXJnZXQgIEVsZW1lbnQgYmVpbmcgY2xpY2tlZFxuICogQHJldHVybiB7Qm9vbGVhbn0gIFRydWUgaWYgY2xpY2sgdGFyZ2V0IGlzIHZhbGlkIChhbHdheXMgdHJ1ZSBvbiBub24tdG91Y2gpXG4gKi9cbldlYmZsb3cudmFsaWRDbGljayA9IHRvdWNoXG4gID8gZnVuY3Rpb24gKGNsaWNrVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjbGlja1RhcmdldCA9PT0gdG91Y2hUYXJnZXQgfHwgJC5jb250YWlucyhjbGlja1RhcmdldCwgdG91Y2hUYXJnZXQpXG4gICAgICApO1xuICAgIH1cbiAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4vKipcbiAqIFdlYmZsb3cucmVzaXplLCBXZWJmbG93LnNjcm9sbCAtIHRocm90dGxlZCBldmVudCBwcm94aWVzXG4gKi9cblxudmFyIHJlc2l6ZUV2ZW50cyA9ICdyZXNpemUud2ViZmxvdyBvcmllbnRhdGlvbmNoYW5nZS53ZWJmbG93IGxvYWQud2ViZmxvdyc7XG52YXIgc2Nyb2xsRXZlbnRzID0gJ3Njcm9sbC53ZWJmbG93ICcgKyByZXNpemVFdmVudHM7XG5XZWJmbG93LnJlc2l6ZSA9IGV2ZW50UHJveHkoJHdpbiwgcmVzaXplRXZlbnRzKTtcbldlYmZsb3cuc2Nyb2xsID0gZXZlbnRQcm94eSgkd2luLCBzY3JvbGxFdmVudHMpO1xuV2ViZmxvdy5yZWRyYXcgPSBldmVudFByb3h5KCk7XG5cbi8vIENyZWF0ZSBhIHByb3h5IGluc3RhbmNlIGZvciB0aHJvdHRsZWQgZXZlbnRzXG5mdW5jdGlvbiBldmVudFByb3h5KHRhcmdldCwgdHlwZXMpIHtcbiAgLy8gU2V0IHVwIHRocm90dGxlZCBtZXRob2QgKHVzaW5nIGN1c3RvbSBmcmFtZS1iYXNlZCBfLnRocm90dGxlKVxuXG4gIHZhciBoYW5kbGVycyA9IFtdO1xuICB2YXIgcHJveHkgPSB7fTtcbiAgcHJveHkudXAgPSBfLnRocm90dGxlKGZ1bmN0aW9uIChldnQpIHtcbiAgICBfLmVhY2goaGFuZGxlcnMsIGZ1bmN0aW9uIChoKSB7XG4gICAgICBoKGV2dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEJpbmQgZXZlbnRzIHRvIHRhcmdldFxuICBpZiAodGFyZ2V0ICYmIHR5cGVzKSB7XG4gICAgdGFyZ2V0Lm9uKHR5cGVzLCBwcm94eS51cCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IGhhbmRsZXJcbiAgICogQHBhcmFtICB7ZnVuY3Rpb259IGhhbmRsZXJcbiAgICovXG4gIHByb3h5Lm9uID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uY29udGFpbnMoaGFuZGxlcnMsIGhhbmRsZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyXG4gICAqIEBwYXJhbSAge2Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqL1xuICBwcm94eS5vZmYgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgIC8vIElmIG5vIGFyZ3VtZW50cyBzdXBwbGllZCwgY2xlYXIgYWxsIGhhbmRsZXJzXG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVycyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHJlbW92ZSBoYW5kbGVyIGZyb20gdGhlIGxpc3RcbiAgICBoYW5kbGVycyA9IF8uZmlsdGVyKGhhbmRsZXJzLCBmdW5jdGlvbiAoaCkge1xuICAgICAgcmV0dXJuIGggIT09IGhhbmRsZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIHByb3h5O1xufVxuXG4vLyBXZWJmbG93LmxvY2F0aW9uIC0gV3JhcCB3aW5kb3cubG9jYXRpb24gaW4gYXBpXG5XZWJmbG93LmxvY2F0aW9uID0gZnVuY3Rpb24gKHVybCkge1xuICB3aW5kb3cubG9jYXRpb24gPSB1cmw7XG59O1xuXG5pZiAoV2ViZmxvdy5lbnYoKSkge1xuICAvLyBJZ25vcmUgcmVkaXJlY3RzIGluc2lkZSBhIFdlYmZsb3cgZGVzaWduL2VkaXQgZW52aXJvbm1lbnRcbiAgV2ViZmxvdy5sb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHt9O1xufVxuXG4vLyBXZWJmbG93LnJlYWR5IC0gQ2FsbCBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgaGFuZGxlcnNcbldlYmZsb3cucmVhZHkgPSBmdW5jdGlvbiAoKSB7XG4gIGRvbXJlYWR5ID0gdHJ1ZTtcblxuICAvLyBSZXN0b3JlIG1vZHVsZXMgYWZ0ZXIgZGVzdHJveVxuICBpZiAoZGVzdHJveWVkKSB7XG4gICAgcmVzdG9yZU1vZHVsZXMoKTtcblxuICAgIC8vIE90aGVyd2lzZSBydW4gcHJpbWFyeSByZWFkeSBtZXRob2RzXG4gIH0gZWxzZSB7XG4gICAgXy5lYWNoKHByaW1hcnksIGNhbGxSZWFkeSk7XG4gIH1cblxuICAvLyBSdW4gc2Vjb25kYXJ5IHJlYWR5IG1ldGhvZHNcbiAgXy5lYWNoKHNlY29uZGFyeSwgY2FsbFJlYWR5KTtcblxuICAvLyBUcmlnZ2VyIHJlc2l6ZVxuICBXZWJmbG93LnJlc2l6ZS51cCgpO1xufTtcblxuZnVuY3Rpb24gY2FsbFJlYWR5KHJlYWR5Rm4pIHtcbiAgaXNGdW5jdGlvbihyZWFkeUZuKSAmJiByZWFkeUZuKCk7XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVNb2R1bGVzKCkge1xuICBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgXy5lYWNoKG1vZHVsZXMsIGJpbmRNb2R1bGUpO1xufVxuXG4vKipcbiAqIFdlYmZsb3cubG9hZCAtIEFkZCBhIHdpbmRvdyBsb2FkIGhhbmRsZXIgdGhhdCB3aWxsIHJ1biBldmVuIGlmIGxvYWQgZXZlbnQgaGFzIGFscmVhZHkgaGFwcGVuZWRcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cbnZhciBkZWZlckxvYWQ7XG5XZWJmbG93LmxvYWQgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICBkZWZlckxvYWQudGhlbihoYW5kbGVyKTtcbn07XG5cbmZ1bmN0aW9uIGJpbmRMb2FkKCkge1xuICAvLyBSZWplY3QgYW55IHByZXZpb3VzIGRlZmVycmVkICh0byBzdXBwb3J0IGRlc3Ryb3kpXG4gIGlmIChkZWZlckxvYWQpIHtcbiAgICBkZWZlckxvYWQucmVqZWN0KCk7XG4gICAgJHdpbi5vZmYoJ2xvYWQnLCBkZWZlckxvYWQucmVzb2x2ZSk7XG4gIH1cbiAgLy8gQ3JlYXRlIGRlZmVycmVkIGFuZCBiaW5kIHdpbmRvdyBsb2FkIGV2ZW50XG4gIGRlZmVyTG9hZCA9IG5ldyAkLkRlZmVycmVkKCk7XG4gICR3aW4ub24oJ2xvYWQnLCBkZWZlckxvYWQucmVzb2x2ZSk7XG59XG5cbi8vIFdlYmZsb3cuZGVzdHJveSAtIFRyaWdnZXIgYSBkZXN0cm95IGV2ZW50IGZvciBhbGwgbW9kdWxlc1xuV2ViZmxvdy5kZXN0cm95ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGRlc3Ryb3llZCA9IHRydWU7XG4gICR3aW4udHJpZ2dlckhhbmRsZXIoJ19fd2ZfZGVzdHJveScpO1xuXG4gIC8vIEFsbG93IGRvbXJlYWR5IHJlc2V0IGZvciB0ZXN0c1xuICBpZiAob3B0aW9ucy5kb21yZWFkeSAhPSBudWxsKSB7XG4gICAgZG9tcmVhZHkgPSBvcHRpb25zLmRvbXJlYWR5O1xuICB9XG5cbiAgLy8gVW5iaW5kIG1vZHVsZXNcbiAgXy5lYWNoKG1vZHVsZXMsIHVuYmluZE1vZHVsZSk7XG5cbiAgLy8gQ2xlYXIgYW55IHByb3h5IGV2ZW50IGhhbmRsZXJzXG4gIFdlYmZsb3cucmVzaXplLm9mZigpO1xuICBXZWJmbG93LnNjcm9sbC5vZmYoKTtcbiAgV2ViZmxvdy5yZWRyYXcub2ZmKCk7XG5cbiAgLy8gQ2xlYXIgYW55IHF1ZXVlZCByZWFkeSBtZXRob2RzXG4gIHByaW1hcnkgPSBbXTtcbiAgc2Vjb25kYXJ5ID0gW107XG5cbiAgLy8gSWYgbG9hZCBldmVudCBoYXMgbm90IHlldCBmaXJlZCwgcmVwbGFjZSB0aGUgZGVmZXJyZWRcbiAgaWYgKGRlZmVyTG9hZC5zdGF0ZSgpID09PSAncGVuZGluZycpIHtcbiAgICBiaW5kTG9hZCgpO1xuICB9XG59O1xuXG4vLyBMaXN0ZW4gZm9yIGRvbXJlYWR5XG4kKFdlYmZsb3cucmVhZHkpO1xuXG4vLyBMaXN0ZW4gZm9yIHdpbmRvdy5vbmxvYWQgYW5kIHJlc29sdmUgZGVmZXJyZWRcbmJpbmRMb2FkKCk7XG5cbi8vIEV4cG9ydCBjb21tb25qcyBtb2R1bGVcbm1vZHVsZS5leHBvcnRzID0gd2luZG93LldlYmZsb3cgPSBXZWJmbG93O1xuIl0sIm5hbWVzIjpbIldlYmZsb3ciLCJtb2R1bGVzIiwicHJpbWFyeSIsInNlY29uZGFyeSIsIndpbmRvdyIsIiQiLCJqUXVlcnkiLCIkd2luIiwiJGRvYyIsImRvY3VtZW50IiwiaXNGdW5jdGlvbiIsIl8iLCJyZXF1aXJlIiwidHJhbSIsImRvbXJlYWR5IiwiZGVzdHJveWVkIiwiY29uZmlnIiwiaGlkZUJhY2tmYWNlIiwia2VlcEluaGVyaXRlZCIsImRlZmluZSIsIm5hbWUiLCJmYWN0b3J5Iiwib3B0aW9ucyIsInVuYmluZE1vZHVsZSIsImluc3RhbmNlIiwiYmluZE1vZHVsZSIsIm1vZHVsZSIsImVudiIsImRlc2lnbiIsIm9uIiwicHJldmlldyIsImRlc3Ryb3kiLCJyZWFkeSIsImFkZFJlYWR5IiwiY29udGFpbnMiLCJwdXNoIiwib2ZmIiwicmVtb3ZlUmVhZHkiLCJmaWx0ZXIiLCJyZWFkeUZuIiwibW9kZSIsImRlc2lnbkZsYWciLCJfX3dmX2Rlc2lnbiIsImluQXBwIiwiX193Zl9zbHVnIiwiV2ViZmxvd0VkaXRvciIsIldFQkZMT1dfRU5WX1RFU1QiLCJfX3dmX3Rlc3QiLCJ0b3AiLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJ0b0xvd2VyQ2FzZSIsInRvdWNoIiwiRG9jdW1lbnRUb3VjaCIsImNocm9tZSIsInRlc3QiLCJ2ZW5kb3IiLCJwYXJzZUludCIsIm1hdGNoIiwiaW9zIiwic2FmYXJpIiwidG91Y2hUYXJnZXQiLCJldnQiLCJ0YXJnZXQiLCJ2YWxpZENsaWNrIiwiY2xpY2tUYXJnZXQiLCJyZXNpemVFdmVudHMiLCJzY3JvbGxFdmVudHMiLCJyZXNpemUiLCJldmVudFByb3h5Iiwic2Nyb2xsIiwicmVkcmF3IiwidHlwZXMiLCJoYW5kbGVycyIsInByb3h5IiwidXAiLCJ0aHJvdHRsZSIsImVhY2giLCJoIiwiaGFuZGxlciIsImFyZ3VtZW50cyIsImxlbmd0aCIsImxvY2F0aW9uIiwidXJsIiwicmVzdG9yZU1vZHVsZXMiLCJjYWxsUmVhZHkiLCJkZWZlckxvYWQiLCJsb2FkIiwidGhlbiIsImJpbmRMb2FkIiwicmVqZWN0IiwicmVzb2x2ZSIsIkRlZmVycmVkIiwidHJpZ2dlckhhbmRsZXIiLCJzdGF0ZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RCxHQUV6RDs7Q0FFQztBQUNELElBQUlBLFVBQVUsQ0FBQztBQUNmLElBQUlDLFVBQVUsQ0FBQztBQUNmLElBQUlDLFVBQVUsRUFBRTtBQUNoQixJQUFJQyxZQUFZQyxPQUFPSixPQUFPLElBQUksRUFBRTtBQUNwQyxJQUFJSyxJQUFJRCxPQUFPRSxNQUFNO0FBQ3JCLElBQUlDLE9BQU9GLEVBQUVEO0FBQ2IsSUFBSUksT0FBT0gsRUFBRUk7QUFDYixJQUFJQyxhQUFhTCxFQUFFSyxVQUFVO0FBQzdCLElBQUlDLElBQUtYLFFBQVFXLENBQUMsR0FBR0MsUUFBUTtBQUM3QixJQUFJQyxPQUFRYixRQUFRYSxJQUFJLEdBQUdELFFBQVEsaUJBQWlCUCxFQUFFUSxJQUFJO0FBQzFELElBQUlDLFdBQVc7QUFDZixJQUFJQyxZQUFZO0FBRWhCRixLQUFLRyxNQUFNLENBQUNDLFlBQVksR0FBRztBQUMzQkos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 }), 7624: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document */ /** * Webflow: Auto-select links to current page or section */ var Webflow = __webpack_require__(3949); Webflow.define('links', module.exports = function($, _) { var api = {}; var $win = $(window); var designer; var inApp = Webflow.env(); var location = window.location; var tempLink = document.createElement('a'); var linkCurrent = 'w--current'; var indexPage = /index\.(html|php)$/; var dirList = /\/$/; var anchors; var slug; // ----------------------------------- // Module methods api.ready = api.design = api.preview = init; // ----------------------------------- // Private methods function init() { designer = inApp && Webflow.env('design'); slug = Webflow.env('slug') || location.pathname || ''; // Reset scroll listener, init anchors Webflow.scroll.off(scroll); anchors = []; // Test all links for a selectable href var links = document.links; for(var i = 0; i < links.length; ++i){ select(links[i]); } // Listen for scroll if any anchors exist if (anchors.length) { Webflow.scroll.on(scroll); scroll(); } } function select(link) { // Ignore localized links if (link.getAttribute('hreflang')) { return; } var href = designer && link.getAttribute('href-disabled') || link.getAttribute('href'); tempLink.href = href; // Ignore any hrefs with a colon to safely avoid all uri schemes if (href.indexOf(':') >= 0) { return; } var $link = $(link); // Check for all links with hash (eg (this-host)(/this-path)#section) to this page if (tempLink.hash.length > 1 && tempLink.host + tempLink.pathname === location.host + location.pathname) { // Ignore any hrefs with Google Translate type hash // Example: jQuery can't parse $('#googtrans(en|es)') // https://forum.webflow.com/t/dropdown-menus-not-working-on-site/87140 if (!/^#[a-zA-Z0-9\-\_]+$/.test(tempLink.hash)) { return; } var $section = $(tempLink.hash); $section.length && anchors.push({ link: $link, sec: $section, active: false }); return; } // Ignore empty # links if (href === '#' || href === '') { return; } // Determine whether the link should be selected var match = !inApp && tempLink.href === location.href || href === slug || indexPage.test(href) && dirList.test(slug); setClass($link, linkCurrent, match); } function scroll() { var viewTop = $win.scrollTop(); var viewHeight = $win.height(); // Check each anchor for a section in view _.each(anchors, function(anchor) { // Ignore localized links if (anchor.link.attr('hreflang')) { return; } var $link = anchor.link; var $section = anchor.sec; var top = $section.offset().top; var height = $section.outerHeight(); var offset = viewHeight * 0.5; var active = $section.is(':visible') && top + height - offset >= viewTop && top + offset <= viewTop + viewHeight; if (anchor.active === active) { return; } anchor.active = active; setClass($link, linkCurrent, active); }); } function setClass($elem, className, add) { var exists = $elem.hasClass(className); if (add && exists) { return; } if (!add && !exists) { return; } add ? $elem.addClass(className) : $elem.removeClass(className); } // Export module return api; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctbGlua3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyB3aW5kb3csIGRvY3VtZW50ICovXG5cbi8qKlxuICogV2ViZmxvdzogQXV0by1zZWxlY3QgbGlua3MgdG8gY3VycmVudCBwYWdlIG9yIHNlY3Rpb25cbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4vd2ViZmxvdy1saWInKTtcblxuV2ViZmxvdy5kZWZpbmUoXG4gICdsaW5rcycsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkLCBfKSB7XG4gICAgdmFyIGFwaSA9IHt9O1xuICAgIHZhciAkd2luID0gJCh3aW5kb3cpO1xuICAgIHZhciBkZXNpZ25lcjtcbiAgICB2YXIgaW5BcHAgPSBXZWJmbG93LmVudigpO1xuICAgIHZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICB2YXIgdGVtcExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgdmFyIGxpbmtDdXJyZW50ID0gJ3ctLWN1cnJlbnQnO1xuICAgIHZhciBpbmRleFBhZ2UgPSAvaW5kZXhcXC4oaHRtbHxwaHApJC87XG4gICAgdmFyIGRpckxpc3QgPSAvXFwvJC87XG4gICAgdmFyIGFuY2hvcnM7XG4gICAgdmFyIHNsdWc7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIE1vZHVsZSBtZXRob2RzXG5cbiAgICBhcGkucmVhZHkgPSBhcGkuZGVzaWduID0gYXBpLnByZXZpZXcgPSBpbml0O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcml2YXRlIG1ldGhvZHNcblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBkZXNpZ25lciA9IGluQXBwICYmIFdlYmZsb3cuZW52KCdkZXNpZ24nKTtcbiAgICAgIHNsdWcgPSBXZWJmbG93LmVudignc2x1ZycpIHx8IGxvY2F0aW9uLnBhdGhuYW1lIHx8ICcnO1xuXG4gICAgICAvLyBSZXNldCBzY3JvbGwgbGlzdGVuZXIsIGluaXQgYW5jaG9yc1xuICAgICAgV2ViZmxvdy5zY3JvbGwub2ZmKHNjcm9sbCk7XG4gICAgICBhbmNob3JzID0gW107XG5cbiAgICAgIC8vIFRlc3QgYWxsIGxpbmtzIGZvciBhIHNlbGVjdGFibGUgaHJlZlxuICAgICAgdmFyIGxpbmtzID0gZG9jdW1lbnQubGlua3M7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHNlbGVjdChsaW5rc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIExpc3RlbiBmb3Igc2Nyb2xsIGlmIGFueSBhbmNob3JzIGV4aXN0XG4gICAgICBpZiAoYW5jaG9ycy5sZW5ndGgpIHtcbiAgICAgICAgV2ViZmxvdy5zY3JvbGwub24oc2Nyb2xsKTtcbiAgICAgICAgc2Nyb2xsKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2VsZWN0KGxpbmspIHtcbiAgICAgIC8vIElnbm9yZSBsb2NhbGl6ZWQgbGlua3NcbiAgICAgIGlmIChsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZmxhbmcnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBocmVmID1cbiAgICAgICAgKGRlc2lnbmVyICYmIGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmLWRpc2FibGVkJykpIHx8XG4gICAgICAgIGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICB0ZW1wTGluay5ocmVmID0gaHJlZjtcblxuICAgICAgLy8gSWdub3JlIGFueSBocmVmcyB3aXRoIGEgY29sb24gdG8gc2FmZWx5IGF2b2lkIGFsbCB1cmkgc2NoZW1lc1xuICAgICAgaWYgKGhyZWYuaW5kZXhPZignOicpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgJGxpbmsgPSAkKGxpbmspO1xuXG4gICAgICAvLyBDaGVjayBmb3IgYWxsIGxpbmtzIHdpdGggaGFzaCAoZWcgKHRoaXMtaG9zdCkoL3RoaXMtcGF0aCkjc2VjdGlvbikgdG8gdGhpcyBwYWdlXG4gICAgICBpZiAoXG4gICAgICAgIHRlbXBMaW5rLmhhc2gubGVuZ3RoID4gMSAmJlxuICAgICAgICB0ZW1wTGluay5ob3N0ICsgdGVtcExpbmsucGF0aG5hbWUgPT09IGxvY2F0aW9uLmhvc3QgKyBsb2NhdGlvbi5wYXRobmFtZVxuICAgICAgKSB7XG4gICAgICAgIC8vIElnbm9yZSBhbnkgaHJlZnMgd2l0aCBHb29nbGUgVHJhbnNsYXRlIHR5cGUgaGFzaFxuICAgICAgICAvLyBFeGFtcGxlOiBqUXVlcnkgY2FuJ3QgcGFyc2UgJCgnI2dvb2d0cmFucyhlbnxlcyknKVxuICAgICAgICAvLyBodHRwczovL2ZvcnVtLndlYmZsb3cuY29tL3QvZHJvcGRvd24tbWVudXMtbm90LXdvcmtpbmctb24tc2l0ZS84NzE0MFxuICAgICAgICBpZiAoIS9eI1thLXpBLVowLTlcXC1cXF9dKyQvLnRlc3QodGVtcExpbmsuaGFzaCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgJHNlY3Rpb24gPSAkKHRlbXBMaW5rLmhhc2gpO1xuICAgICAgICAkc2VjdGlvbi5sZW5ndGggJiZcbiAgICAgICAgICBhbmNob3JzLnB1c2goe1xuICAgICAgICAgICAgbGluazogJGxpbmssXG4gICAgICAgICAgICBzZWM6ICRzZWN0aW9uLFxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZ25vcmUgZW1wdHkgIyBsaW5rc1xuICAgICAgaWYgKGhyZWYgPT09ICcjJyB8fCBocmVmID09PSAnJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRoZSBsaW5rIHNob3VsZCBiZSBzZWxlY3RlZFxuICAgICAgdmFyIG1hdGNoID1cbiAgICAgICAgKCFpbkFwcCAmJiB0ZW1wTGluay5ocmVmID09PSBsb2NhdGlvbi5ocmVmKSB8fFxuICAgICAgICBocmVmID09PSBzbHVnIHx8XG4gICAgICAgIChpbmRleFBhZ2UudGVzdChocmVmKSAmJiBkaXJMaXN0LnRlc3Qoc2x1ZykpO1xuICAgICAgc2V0Q2xhc3MoJGxpbmssIGxpbmtDdXJyZW50LCBtYXRjaCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nyb2xsKCkge1xuICAgICAgdmFyIHZpZXdUb3AgPSAkd2luLnNjcm9sbFRvcCgpO1xuICAgICAgdmFyIHZpZXdIZWlnaHQgPSAkd2luLmhlaWdodCgpO1xuXG4gICAgICAvLyBDaGVjayBlYWNoIGFuY2hvciBmb3IgYSBzZWN0aW9uIGluIHZpZXdcbiAgICAgIF8uZWFjaChhbmNob3JzLCBmdW5jdGlvbiAoYW5jaG9yKSB7XG4gICAgICAgIC8vIElnbm9yZSBsb2NhbGl6ZWQgbGlua3NcbiAgICAgICAgaWYgKGFuY2hvci5saW5rLmF0dHIoJ2hyZWZsYW5nJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgJGxpbmsgPSBhbmNob3IubGluaztcbiAgICAgICAgdmFyICRzZWN0aW9uID0gYW5jaG9yLnNlYztcbiAgICAgICAgdmFyIHRvcCA9ICRzZWN0aW9uLm9mZnNldCgpLnRvcDtcbiAgICAgICAgdmFyIGhlaWdodCA9ICRzZWN0aW9uLm91dGVySGVpZ2h0KCk7XG4gICAgICAgIHZhciBvZmZzZXQgPSB2aWV3SGVpZ2h0ICogMC41O1xuICAgICAgICB2YXIgYWN0aXZlID1cbiAgICAgICAgICAkc2VjdGlvbi5pcygnOnZpc2libGUnKSAmJlxuICAgICAgICAgIHRvcCArIGhlaWdodCAtIG9mZnNldCA+PSB2aWV3VG9wICYmXG4gICAgICAgICAgdG9wICsgb2Zmc2V0IDw9IHZpZXdUb3AgKyB2aWV3SGVpZ2h0O1xuICAgICAgICBpZiAoYW5jaG9yLmFjdGl2ZSA9PT0gYWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGFuY2hvci5hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgIHNldENsYXNzKCRsaW5rLCBsaW5rQ3VycmVudCwgYWN0aXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldENsYXNzKCRlbGVtLCBjbGFzc05hbWUsIGFkZCkge1xuICAgICAgdmFyIGV4aXN0cyA9ICRlbGVtLmhhc0NsYXNzKGNsYXNzTmFtZSk7XG4gICAgICBpZiAoYWRkICYmIGV4aXN0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWFkZCAmJiAhZXhpc3RzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFkZCA/ICRlbGVtLmFkZENsYXNzKGNsYXNzTmFtZSkgOiAkZWxlbS5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4gYXBpO1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsImRlZmluZSIsIm1vZHVsZSIsImV4cG9ydHMiLCIkIiwiXyIsImFwaSIsIiR3aW4iLCJ3aW5kb3ciLCJkZXNpZ25lciIsImluQXBwIiwiZW52IiwibG9jYXRpb24iLCJ0ZW1wTGluayIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImxpbmtDdXJyZW50IiwiaW5kZXhQYWdlIiwiZGlyTGlzdCIsImFuY2hvcnMiLCJzbHVnIiwicmVhZHkiLCJkZXNpZ24iLCJwcmV2aWV3IiwiaW5pdCIsInBhdGhuYW1lIiwic2Nyb2xsIiwib2ZmIiwibGlua3MiLCJpIiwibGVuZ3RoIiwic2VsZWN0Iiwib24iLCJsaW5rIiwiZ2V0QXR0cmlidXRlIiwiaHJlZiIsImluZGV4T2YiLCIkbGluayIsImhhc2giLCJob3N0IiwidGVzdCIsIiRzZWN0aW9uIiwicHVzaCIsInNlYyIsImFjdGl2ZSIsIm1hdGNoIiwic2V0Q2xhc3MiLCJ2aWV3VG9wIiwic2Nyb2xsVG9wIiwidmlld0hlaWdodCIsImhlaWdodCIsImVhY2giLCJhbmNob3IiLCJhdHRyIiwidG9wIiwib2Zmc2V0Iiwib3V0ZXJIZWlnaHQiLCJpcyIsIiRlbGVtIiwiY2xhc3NOYW1lIiwiYWRkIiwiZXhpc3RzIiwiaGFzQ2xhc3MiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIl0sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEIsR0FFNUI7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCRCxRQUFRRSxNQUFNLENBQ1osU0FDQ0MsT0FBT0MsT0FBTyxHQUFHLFNBQVVDLENBQUMsRUFBRUMsQ0FBQztJQUM5QixJQUFJQyxNQUFNLENBQUM7SUFDWCxJQUFJQyxPQUFPSCxFQUFFSTtJQUNiLElBQUlDO0lBQ0osSUFBSUMsUUFBUVgsUUFBUVksR0FBRztJQUN2QixJQUFJQyxXQUFXSixPQUFPSSxRQUFRO0lBQzlCLElBQUlDLFdBQVdDLFNBQVNDLGFBQWEsQ0FBQztJQUN0QyxJQUFJQyxjQUFjO0lBQ2xCLElBQUlDLFlBQVk7SUFDaEIsSUFBSUMsVUFBVTtJQUNkLElBQUlDO0lBQ0osSUFBSUM7SUFFSixzQ0FBc0M7SUFDdEMsaUJBQWlCO0lBRWpCZCxJQUFJZSxLQUFLLEdBQUdmLElBQUlnQixNQUFNLEdBQUdoQixJQUFJaUIsT0FBTyxHQUFHQztJQUV2QyxzQ0FBc0M7SUFDdEMsa0JBQWtCO0lBRWxCLFNBQVNBO1FBQ1BmLFdBQVdDLFNBQVNYLFFBQVFZLEdBQUcsQ0FBQztRQUNoQ1MsT0FBT3JCLFFBQVFZLEdBQUcsQ0FBQyxXQUFXQyxTQUFTYSxRQUFRLElBQUk7UUFFbkQsc0NBQXNDO1FBQ3RDMUIsUUFBUTJCLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDRDtRQUNuQlAsVUFBVSxFQUFFO1FBRVosdUNBQXVDO1FBQ3ZDLElBQUlTLFFBQVFkLFNBQVNjLEtBQUs7UUFDMUIsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlELE1BQU1FLE1BQU0sRUFBRSxFQUFFRCxFQUFHO1lBQ3JDRSxPQUFPSCxLQUFLLENBQUNDLEVBQUU7UUFDakI7UUFFQSx5Q0FBeUM7UUFDekMsSUFBSVYsUUFBUVcsTUFBTSxFQUFFO1lBQ2xCL0IsUUFBUTJCLE1BQU0sQ0FBQ00sRUFBRSxDQUFDTjtZQUNsQkE7UUFDRjtJQUNGO0lBRUEsU0FBU0ssT0FBT0UsSUFBSTtRQUNsQix5QkFBeUI7UUFDekIsSUFBSUEsS0FBS0MsWUFBWSxDQUFDLGFBQWE7WUFDakM7UUFDRjtRQUVBLElBQUlDLE9BQ0YsQUFBQzFCLFlBQVl3QixLQUFLQyxZQUFZLENBQUMsb0JBQy9CRCxLQUFLQyxZQUFZLENBQUM7UUFDcEJyQixTQUFTc0IsSUFBSSxHQUFHQTtRQUVoQixnRUFBZ0U7UUFDaEUsSUFBSUEsS0FBS0MsT0FBTyxDQUFDLFFBQVEsR0FBRztZQUMxQjtRQUNGO1FBRUEsSUFBSUMsUUFBUWpDLEVBQUU2QjtRQUVkLGtGQUFrRjtRQUNsRixJQUNFcEIsU0FBU3lCLElBQUksQ0FBQ1IsTUFBTSxHQUFHLEtBQ3ZCakIsU0FBUzBCLElBQUksR0FBRzFCLFNBQVNZLFFBQVEsS0FBS2IsU0FBUzJCLElBQUksR0FBRzNCLFNBQVNhLFFBQVEsRUFDdkU7WUFDQSxtREFBbUQ7WUFDbkQscURBQXFEO1lBQ3JELHVFQUF1RTtZQUN2RSxJQUFJLENBQUMsc0JBQXNCZSxJQUFJLENBQUMzQixTQUFTeUIsSUFBSSxHQUFHO2dCQUM5QztZQUNGO1lBRUEsSUFBSUcsV0FBV3JDLEVBQUVTLFNBQVN5QixJQUFJO1lBQzlCRyxTQUFTWCxNQUFNLElBQ2JYLFFBQVF1QixJQUFJLENBQUM7Z0JBQ1hULE1BQU1JO2dCQUNOTSxLQUFLRjtnQkFDTEcsUUFBUTtZQUNWO1lBQ0Y7UUFDRjtRQUVBLHVCQUF1QjtRQUN2QixJQUFJVCxTQUFTLE9BQU9BLFNBQVMsSUFBSTtZQUMvQjtRQUNGO1FBRUEsZ0RBQWdEO1FBQ2hELElBQUlVLFFBQ0YsQUFBQyxDQUFDbkMsU0FBU0csU0FBU3NCLElBQUksS0FBS3ZCLFNBQVN1QixJQUFJLElBQzFDQSxTQUFTZixRQUNSSCxVQUFVdUIsSUFBSSxDQUFDTCxTQUFTakIsUUFBUXNCLElBQUksQ0FBQ3BCO1FBQ3hDMEIsU0FBU1QsT0FBT3JCLGFBQWE2QjtJQUMvQjtJQUVBLFNBQVNuQjtRQUNQLElBQUlxQixVQUFVeEMsS0FBS3lDLFNBQVM7UUFDNUIsSUFBSUMsYUFBYTFDLEtBQUsyQyxNQUFNO1FBRTVCLDBDQUEwQztRQUMxQzdDLEVBQUU4QyxJQUFJLENBQUNoQyxTQUFTLFNBQVVpQyxNQUFNO1lBQzlCLHlCQUF5QjtZQUN6QixJQUFJQSxPQUFPbkIsSUFBSSxDQUFDb0IsSUFBSSxDQUFDLGFBQWE7Z0JBQ2hDO1lBQ0Y7WUFFQSxJQUFJaEIsUUFBUWUsT0FBT25CLElBQUk7WUFDdkIsSUFBSVEsV0FBV1csT0FBT1QsR0FBRztZQUN6QixJQUFJVyxNQUFNYixTQUFTYyxNQUFNLEdBQUdELEdBQUc7WUFDL0IsSUFBSUosU0FBU1QsU0FBU2UsV0FBVztZQUNqQyxJQUFJRCxTQUFTTixhQUFhO1lBQzFCLElBQUlMLFNBQ0ZILFNBQVNnQixFQUFFLENBQUMsZUFDWkgsTUFBTUosU0FBU0ssVUFBVVIsV0FDekJPLE1BQU1DLFVBQVVSLFVBQVVFO1lBQzVCLElBQUlHLE9BQU9SLE1BQU0sS0FBS0EsUUFBUTtnQkFDNUI7WUFDRjtZQUNBUSxPQUFPUixNQUFNLEdBQUdBO1lBQ2hCRSxTQUFTVCxPQUFPckIsYUFBYTRCO1FBQy9CO0lBQ0Y7SUFFQSxTQUFTRSxTQUFTWSxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsR0FBRztRQUNyQyxJQUFJQyxTQUFTSCxNQUFNSSxRQUFRLENBQUNIO1FBQzVCLElBQUlDLE9BQU9DLFFBQVE7WUFDakI7UUFDRjtRQUNBLElBQUksQ0FBQ0QsT0FBTyxDQUFDQyxRQUFRO1lBQ25CO1FBQ0Y7UUFDQUQsTUFBTUYsTUFBTUssUUFBUSxDQUFDSixhQUFhRCxNQUFNTSxXQUFXLENBQUNMO0lBQ3REO0lBRUEsZ0JBQWdCO0lBQ2hCLE9BQU9yRDtBQUNUIn0= }), 286: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document */ /** * Webflow: Smooth scroll */ var Webflow = __webpack_require__(3949); Webflow.define('scroll', module.exports = function($) { /** * A collection of namespaced events found in this module. * Namespaced events encapsulate our code, and make it safer and easier * for designers to apply custom code overrides. * @see https://api.jquery.com/on/#event-names * @typedef {Object.} NamespacedEventsCollection */ var NS_EVENTS = { WF_CLICK_EMPTY: 'click.wf-empty-link', WF_CLICK_SCROLL: 'click.wf-scroll' }; var loc = window.location; var history = inIframe() ? null : window.history; var $win = $(window); var $doc = $(document); var $body = $(document.body); var animate = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { window.setTimeout(fn, 15); }; var rootTag = Webflow.env('editor') ? '.w-editor-body' : 'body'; var headerSelector = 'header, ' + rootTag + ' > .header, ' + rootTag + ' > .w-nav:not([data-no-scroll])'; var emptyHrefSelector = 'a[href="#"]'; /** * Select only links whose href: * - contains a # * - is not one of our namespaced TabLink elements * - is not _only_ a # */ var localHrefSelector = 'a[href*="#"]:not(.w-tab-link):not(' + emptyHrefSelector + ')'; var scrollTargetOutlineCSS = '.wf-force-outline-none[tabindex="-1"]:focus{outline:none;}'; var focusStylesEl = document.createElement('style'); focusStylesEl.appendChild(document.createTextNode(scrollTargetOutlineCSS)); function inIframe() { try { return Boolean(window.frameElement); } catch (e) { return true; } } var validHash = /^#[a-zA-Z0-9][\w:.-]*$/; /** * Determine if link navigates to current page * @param {HTMLAnchorElement} link */ function linksToCurrentPage(link) { return validHash.test(link.hash) && link.host + link.pathname === loc.host + loc.pathname; } /** * Check if the designer has indicated that this page should * have no scroll animation, or if the end user has set * prefers-reduced-motion in their OS */ const reducedMotionMediaQuery = typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)'); function reducedMotionEnabled() { return document.body.getAttribute('data-wf-scroll-motion') === 'none' || reducedMotionMediaQuery.matches; } function setFocusable($el, action) { var initialTabindex; switch(action){ case 'add': initialTabindex = $el.attr('tabindex'); if (initialTabindex) { $el.attr('data-wf-tabindex-swap', initialTabindex); } else { $el.attr('tabindex', '-1'); } break; case 'remove': initialTabindex = $el.attr('data-wf-tabindex-swap'); if (initialTabindex) { $el.attr('tabindex', initialTabindex); $el.removeAttr('data-wf-tabindex-swap'); } else { $el.removeAttr('tabindex'); } break; } $el.toggleClass('wf-force-outline-none', action === 'add'); } /** * Determine if we should execute custom scroll */ function validateScroll(evt) { var target = evt.currentTarget; if (// Bail if in Designer Webflow.env('design') || // Ignore links being used by jQuery mobile window.$.mobile && /(?:^|\s)ui-link(?:$|\s)/.test(target.className)) { return; } var hash = linksToCurrentPage(target) ? target.hash : ''; if (hash === '') return; var $el = $(hash); if (!$el.length) { return; } if (evt) { evt.preventDefault(); evt.stopPropagation(); } updateHistory(hash, evt); window.setTimeout(function() { scroll($el, function setFocus() { setFocusable($el, 'add'); $el.get(0).focus({ preventScroll: true }); setFocusable($el, 'remove'); }); }, evt ? 0 : 300); } function updateHistory(hash) { // Push new history state if (loc.hash !== hash && history && history.pushState && // Navigation breaks Chrome when the protocol is `file:`. !(Webflow.env.chrome && loc.protocol === 'file:')) { var oldHash = history.state && history.state.hash; if (oldHash !== hash) { history.pushState({ hash }, '', hash); } } } function scroll($targetEl, cb) { var start = $win.scrollTop(); var end = calculateScrollEndPosition($targetEl); if (start === end) return; var duration = calculateScrollDuration($targetEl, start, end); var clock = Date.now(); var step = function() { var elapsed = Date.now() - clock; window.scroll(0, getY(start, end, elapsed, duration)); if (elapsed <= duration) { animate(step); } else if (typeof cb === 'function') { cb(); } }; animate(step); } function calculateScrollEndPosition($targetEl) { // If a fixed header exists, offset for the height var $header = $(headerSelector); var offsetY = $header.css('position') === 'fixed' ? $header.outerHeight() : 0; var end = $targetEl.offset().top - offsetY; // If specified, scroll so that the element ends up in the middle of the viewport if ($targetEl.data('scroll') === 'mid') { var available = $win.height() - offsetY; var elHeight = $targetEl.outerHeight(); if (elHeight < available) { end -= Math.round((available - elHeight) / 2); } } return end; } function calculateScrollDuration($targetEl, start, end) { if (reducedMotionEnabled()) return 0; var mult = 1; // Check for custom time multiplier on the body and the scroll target $body.add($targetEl).each(function(_, el) { var time = parseFloat(el.getAttribute('data-scroll-time')); if (!isNaN(time) && time >= 0) { mult = time; } }); return (472.143 * Math.log(Math.abs(start - end) + 125) - 2000) * mult; } function getY(start, end, elapsed, duration) { if (elapsed > duration) { return end; } return start + (end - start) * ease(elapsed / duration); } function ease(t) { return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1; } function ready() { var { WF_CLICK_EMPTY, WF_CLICK_SCROLL } = NS_EVENTS; $doc.on(WF_CLICK_SCROLL, localHrefSelector, validateScroll); /** * Prevent empty hash links from triggering scroll. * Legacy feature to preserve: use the default "#" link * to trigger an interaction, and do not want the page * to scroll to the top. */ $doc.on(WF_CLICK_EMPTY, emptyHrefSelector, function(e) { e.preventDefault(); }); document.head.insertBefore(focusStylesEl, document.head.firstChild); } // Export module return { ready }; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctc2Nyb2xsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCAqL1xuXG4vKipcbiAqIFdlYmZsb3c6IFNtb290aCBzY3JvbGxcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4vd2ViZmxvdy1saWInKTtcblxuV2ViZmxvdy5kZWZpbmUoXG4gICdzY3JvbGwnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJCkge1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBvZiBuYW1lc3BhY2VkIGV2ZW50cyBmb3VuZCBpbiB0aGlzIG1vZHVsZS5cbiAgICAgKiBOYW1lc3BhY2VkIGV2ZW50cyBlbmNhcHN1bGF0ZSBvdXIgY29kZSwgYW5kIG1ha2UgaXQgc2FmZXIgYW5kIGVhc2llclxuICAgICAqIGZvciBkZXNpZ25lcnMgdG8gYXBwbHkgY3VzdG9tIGNvZGUgb3ZlcnJpZGVzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9vbi8jZXZlbnQtbmFtZXNcbiAgICAgKiBAdHlwZWRlZiB7T2JqZWN0LjxzdHJpbmc+fSBOYW1lc3BhY2VkRXZlbnRzQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHZhciBOU19FVkVOVFMgPSB7XG4gICAgICBXRl9DTElDS19FTVBUWTogJ2NsaWNrLndmLWVtcHR5LWxpbmsnLFxuICAgICAgV0ZfQ0xJQ0tfU0NST0xMOiAnY2xpY2sud2Ytc2Nyb2xsJyxcbiAgICB9O1xuXG4gICAgdmFyIGxvYyA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICB2YXIgaGlzdG9yeSA9IGluSWZyYW1lKCkgPyBudWxsIDogd2luZG93Lmhpc3Rvcnk7XG4gICAgdmFyICR3aW4gPSAkKHdpbmRvdyk7XG4gICAgdmFyICRkb2MgPSAkKGRvY3VtZW50KTtcbiAgICB2YXIgJGJvZHkgPSAkKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgdmFyIGFuaW1hdGUgPVxuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZuLCAxNSk7XG4gICAgICB9O1xuICAgIHZhciByb290VGFnID0gV2ViZmxvdy5lbnYoJ2VkaXRvcicpID8gJy53LWVkaXRvci1ib2R5JyA6ICdib2R5JztcbiAgICB2YXIgaGVhZGVyU2VsZWN0b3IgPVxuICAgICAgJ2hlYWRlciwgJyArXG4gICAgICByb290VGFnICtcbiAgICAgICcgPiAuaGVhZGVyLCAnICtcbiAgICAgIHJvb3RUYWcgK1xuICAgICAgJyA+IC53LW5hdjpub3QoW2RhdGEtbm8tc2Nyb2xsXSknO1xuXG4gICAgdmFyIGVtcHR5SHJlZlNlbGVjdG9yID0gJ2FbaHJlZj1cIiNcIl0nO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IG9ubHkgbGlua3Mgd2hvc2UgaHJlZjpcbiAgICAgKiAtIGNvbnRhaW5zIGEgI1xuICAgICAqIC0gaXMgbm90IG9uZSBvZiBvdXIgbmFtZXNwYWNlZCBUYWJMaW5rIGVsZW1lbnRzXG4gICAgICogLSBpcyBub3QgX29ubHlfIGEgI1xuICAgICAqL1xuICAgIHZhciBsb2NhbEhyZWZTZWxlY3RvciA9XG4gICAgICAnYVtocmVmKj1cIiNcIl06bm90KC53LXRhYi1saW5rKTpub3QoJyArIGVtcHR5SHJlZlNlbGVjdG9yICsgJyknO1xuXG4gICAgdmFyIHNjcm9sbFRhcmdldE91dGxpbmVDU1MgPVxuICAgICAgJy53Zi1mb3JjZS1vdXRsaW5lLW5vbmVbdGFiaW5kZXg9XCItMVwiXTpmb2N1c3tvdXRsaW5lOm5vbmU7fSc7XG5cbiAgICB2YXIgZm9jdXNTdHlsZXNFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgZm9jdXNTdHlsZXNFbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzY3JvbGxUYXJnZXRPdXRsaW5lQ1NTKSk7XG5cbiAgICBmdW5jdGlvbiBpbklmcmFtZSgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHdpbmRvdy5mcmFtZUVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdmFsaWRIYXNoID0gL14jW2EtekEtWjAtOV1bXFx3Oi4tXSokLztcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiBsaW5rIG5hdmlnYXRlcyB0byBjdXJyZW50IHBhZ2VcbiAgICAgKiBAcGFyYW0ge0hUTUxBbmNob3JFbGVtZW50fSBsaW5rXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlua3NUb0N1cnJlbnRQYWdlKGxpbmspIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHZhbGlkSGFzaC50ZXN0KGxpbmsuaGFzaCkgJiZcbiAgICAgICAgbGluay5ob3N0ICsgbGluay5wYXRobmFtZSA9PT0gbG9jLmhvc3QgKyBsb2MucGF0aG5hbWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGRlc2lnbmVyIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGlzIHBhZ2Ugc2hvdWxkXG4gICAgICogaGF2ZSBubyBzY3JvbGwgYW5pbWF0aW9uLCBvciBpZiB0aGUgZW5kIHVzZXIgaGFzIHNldFxuICAgICAqIHByZWZlcnMtcmVkdWNlZC1tb3Rpb24gaW4gdGhlaXIgT1NcbiAgICAgKi9cbiAgICBjb25zdCByZWR1Y2VkTW90aW9uTWVkaWFRdWVyeSA9XG4gICAgICB0eXBlb2Ygd2luZG93Lm1hdGNoTWVkaWEgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpO1xuICAgIGZ1bmN0aW9uIHJlZHVjZWRNb3Rpb25FbmFibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2Ytc2Nyb2xsLW1vdGlvbicpID09PSAnbm9uZScgfHxcbiAgICAgICAgcmVkdWNlZE1vdGlvbk1lZGlhUXVlcnkubWF0Y2hlc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRGb2N1c2FibGUoJGVsLCBhY3Rpb24pIHtcbiAgICAgIHZhciBpbml0aWFsVGFiaW5kZXg7XG5cbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgaW5pdGlhbFRhYmluZGV4ID0gJGVsLmF0dHIoJ3RhYmluZGV4Jyk7XG5cbiAgICAgICAgICBpZiAoaW5pdGlhbFRhYmluZGV4KSB7XG4gICAgICAgICAgICAkZWwuYXR0cignZGF0YS13Zi10YWJpbmRleC1zd2FwJywgaW5pdGlhbFRhYmluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGVsLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6XG4gICAgICAgICAgaW5pdGlhbFRhYmluZGV4ID0gJGVsLmF0dHIoJ2RhdGEtd2YtdGFiaW5kZXgtc3dhcCcpO1xuICAgICAgICAgIGlmIChpbml0aWFsVGFiaW5kZXgpIHtcbiAgICAgICAgICAgICRlbC5hdHRyKCd0YWJpbmRleCcsIGluaXRpYWxUYWJpbmRleCk7XG4gICAgICAgICAgICAkZWwucmVtb3ZlQXR0cignZGF0YS13Zi10YWJpbmRleC1zd2FwJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRlbC5yZW1vdmVBdHRyKCd0YWJpbmRleCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgJGVsLnRvZ2dsZUNsYXNzKCd3Zi1mb3JjZS1vdXRsaW5lLW5vbmUnLCBhY3Rpb24gPT09ICdhZGQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGV4ZWN1dGUgY3VzdG9tIHNjcm9sbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU2Nyb2xsKGV2dCkge1xuICAgICAgdmFyIHRhcmdldCA9IGV2dC5jdXJyZW50VGFyZ2V0O1xuICAgICAgaWYgKFxuICAgICAgICAvLyBCYWlsIGlmIGluIERlc2lnbmVyXG4gICAgICAgIFdlYmZsb3cuZW52KCdkZXNpZ24nKSB8fFxuICAgICAgICAvLyBJZ25vcmUgbGlua3MgYmVpbmcgdXNlZCBieSBqUXVlcnkgbW9iaWxlXG4gICAgICAgICh3aW5kb3cuJC5tb2JpbGUgJiYgLyg/Ol58XFxzKXVpLWxpbmsoPzokfFxccykvLnRlc3QodGFyZ2V0LmNsYXNzTmFtZSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGFzaCA9IGxpbmtzVG9DdXJyZW50UGFnZSh0YXJnZXQpID8gdGFyZ2V0Lmhhc2ggOiAnJztcbiAgICAgIGlmIChoYXNoID09PSAnJykgcmV0dXJuO1xuXG4gICAgICB2YXIgJGVsID0gJChoYXNoKTtcbiAgICAgIGlmICghJGVsLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldnQpIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlSGlzdG9yeShoYXNoLCBldnQpO1xuXG4gICAgICB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNjcm9sbCgkZWwsIGZ1bmN0aW9uIHNldEZvY3VzKCkge1xuICAgICAgICAgICAgc2V0Rm9jdXNhYmxlKCRlbCwgJ2FkZCcpO1xuICAgICAgICAgICAgJGVsLmdldCgwKS5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pO1xuICAgICAgICAgICAgc2V0Rm9jdXNhYmxlKCRlbCwgJ3JlbW92ZScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBldnQgPyAwIDogMzAwXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhpc3RvcnkoaGFzaCkge1xuICAgICAgLy8gUHVzaCBuZXcgaGlzdG9yeSBzdGF0ZVxuICAgICAgaWYgKFxuICAgICAgICBsb2MuaGFzaCAhPT0gaGFzaCAmJlxuICAgICAgICBoaXN0b3J5ICYmXG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlICYmXG4gICAgICAgIC8vIE5hdmlnYXRpb24gYnJlYWtzIENocm9tZSB3aGVuIHRoZSBwcm90b2NvbCBpcyBgZmlsZTpgLlxuICAgICAgICAhKFdlYmZsb3cuZW52LmNocm9tZSAmJiBsb2MucHJvdG9jb2wgPT09ICdmaWxlOicpXG4gICAgICApIHtcbiAgICAgICAgdmFyIG9sZEhhc2ggPSBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuaGFzaDtcbiAgICAgICAgaWYgKG9sZEhhc2ggIT09IGhhc2gpIHtcbiAgICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7aGFzaH0sICcnLCBoYXNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbCgkdGFyZ2V0RWwsIGNiKSB7XG4gICAgICB2YXIgc3RhcnQgPSAkd2luLnNjcm9sbFRvcCgpO1xuICAgICAgdmFyIGVuZCA9IGNhbGN1bGF0ZVNjcm9sbEVuZFBvc2l0aW9uKCR0YXJnZXRFbCk7XG5cbiAgICAgIGlmIChzdGFydCA9PT0gZW5kKSByZXR1cm47XG5cbiAgICAgIHZhciBkdXJhdGlvbiA9IGNhbGN1bGF0ZVNjcm9sbER1cmF0aW9uKCR0YXJnZXRFbCwgc3RhcnQsIGVuZCk7XG5cbiAgICAgIHZhciBjbG9jayA9IERhdGUubm93KCk7XG4gICAgICB2YXIgc3RlcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gY2xvY2s7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgZ2V0WShzdGFydCwgZW5kLCBlbGFwc2VkLCBkdXJhdGlvbikpO1xuXG4gICAgICAgIGlmIChlbGFwc2VkIDw9IGR1cmF0aW9uKSB7XG4gICAgICAgICAgYW5pbWF0ZShzdGVwKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhbmltYXRlKHN0ZXApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbEVuZFBvc2l0aW9uKCR0YXJnZXRFbCkge1xuICAgICAgLy8gSWYgYSBmaXhlZCBoZWFkZXIgZXhpc3RzLCBvZmZzZXQgZm9yIHRoZSBoZWlnaHRcbiAgICAgIHZhciAkaGVhZGVyID0gJChoZWFkZXJTZWxlY3Rvcik7XG4gICAgICB2YXIgb2Zmc2V0WSA9XG4gICAgICAgICRoZWFkZXIuY3NzKCdwb3NpdGlvbicpID09PSAnZml4ZWQnID8gJGhlYWRlci5vdXRlckhlaWdodCgpIDogMDtcbiAgICAgIHZhciBlbmQgPSAkdGFyZ2V0RWwub2Zmc2V0KCkudG9wIC0gb2Zmc2V0WTtcblxuICAgICAgLy8gSWYgc3BlY2lmaWVkLCBzY3JvbGwgc28gdGhhdCB0aGUgZWxlbWVudCBlbmRzIHVwIGluIHRoZSBtaWRkbGUgb2YgdGhlIHZpZXdwb3J0XG4gICAgICBpZiAoJHRhcmdldEVsLmRhdGEoJ3Njcm9sbCcpID09PSAnbWlkJykge1xuICAgICAgICB2YXIgYXZhaWxhYmxlID0gJHdpbi5oZWlnaHQoKSAtIG9mZnNldFk7XG4gICAgICAgIHZhciBlbEhlaWdodCA9ICR0YXJnZXRFbC5vdXRlckhlaWdodCgpO1xuICAgICAgICBpZiAoZWxIZWlnaHQgPCBhdmFpbGFibGUpIHtcbiAgICAgICAgICBlbmQgLT0gTWF0aC5yb3VuZCgoYXZhaWxhYmxlIC0gZWxIZWlnaHQpIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbmQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlU2Nyb2xsRHVyYXRpb24oJHRhcmdldEVsLCBzdGFydCwgZW5kKSB7XG4gICAgICBpZiAocmVkdWNlZE1vdGlvbkVuYWJsZWQoKSkgcmV0dXJuIDA7XG5cbiAgICAgIHZhciBtdWx0ID0gMTtcbiAgICAgIC8vIENoZWNrIGZvciBjdXN0b20gdGltZSBtdWx0aXBsaWVyIG9uIHRoZSBib2R5IGFuZCB0aGUgc2Nyb2xsIHRhcmdldFxuICAgICAgJGJvZHkuYWRkKCR0YXJnZXRFbCkuZWFjaChmdW5jdGlvbiAoXywgZWwpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBwYXJzZUZsb2F0KGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zY3JvbGwtdGltZScpKTtcbiAgICAgICAgaWYgKCFpc05hTih0aW1lKSAmJiB0aW1lID49IDApIHtcbiAgICAgICAgICBtdWx0ID0gdGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoNDcyLjE0MyAqIE1hdGgubG9nKE1hdGguYWJzKHN0YXJ0IC0gZW5kKSArIDEyNSkgLSAyMDAwKSAqIG11bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0WShzdGFydCwgZW5kLCBlbGFwc2VkLCBkdXJhdGlvbikge1xuICAgICAgaWYgKGVsYXBzZWQgPiBkdXJhdGlvbikge1xuICAgICAgICByZXR1cm4gZW5kO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogZWFzZShlbGFwc2VkIC8gZHVyYXRpb24pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVhc2UodCkge1xuICAgICAgcmV0dXJuIHQgPCAwLjUgPyA0ICogdCAqIHQgKiB0IDogKHQgLSAxKSAqICgyICogdCAtIDIpICogKDIgKiB0IC0gMikgKyAxO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgIHZhciB7V0ZfQ0xJQ0tfRU1QVFksIFdGX0NMSUNLX1NDUk9MTH0gPSBOU19FVkVOVFM7XG5cbiAgICAgICRkb2Mub24oV0ZfQ0xJQ0tfU0NST0xMLCBsb2NhbEhyZWZTZWxlY3RvciwgdmFsaWRhdGVTY3JvbGwpO1xuXG4gICAgICAvKipcbiAgICAgICAqIFByZXZlbnQgZW1wdHkgaGFzaCBsaW5rcyBmcm9tIHRyaWdnZXJpbmcgc2Nyb2xsLlxuICAgICAgICogTGVnYWN5IGZlYXR1cmUgdG8gcHJlc2VydmU6IHVzZSB0aGUgZGVmYXVsdCBcIiNcIiBsaW5rXG4gICAgICAgKiB0byB0cmlnZ2VyIGFuIGludGVyYWN0aW9uLCBhbmQgZG8gbm90IHdhbnQgdGhlIHBhZ2VcbiAgICAgICAqIHRvIHNjcm9sbCB0byB0aGUgdG9wLlxuICAgICAgICovXG4gICAgICAkZG9jLm9uKFdGX0NMSUNLX0VNUFRZLCBlbXB0eUhyZWZTZWxlY3RvciwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGRvY3VtZW50LmhlYWQuaW5zZXJ0QmVmb3JlKGZvY3VzU3R5bGVzRWwsIGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IG1vZHVsZVxuICAgIHJldHVybiB7cmVhZHl9O1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsImRlZmluZSIsIm1vZHVsZSIsImV4cG9ydHMiLCIkIiwiTlNfRVZFTlRTIiwiV0ZfQ0xJQ0tfRU1QVFkiLCJXRl9DTElDS19TQ1JPTEwiLCJsb2MiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhpc3RvcnkiLCJpbklmcmFtZSIsIiR3aW4iLCIkZG9jIiwiZG9jdW1lbnQiLCIkYm9keSIsImJvZHkiLCJhbmltYXRlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZm4iLCJzZXRUaW1lb3V0Iiwicm9vdFRhZyIsImVudiIsImhlYWRlclNlbGVjdG9yIiwiZW1wdHlIcmVmU2VsZWN0b3IiLCJsb2NhbEhyZWZTZWxlY3RvciIsInNjcm9sbFRhcmdldE91dGxpbmVDU1MiLCJmb2N1c1N0eWxlc0VsIiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJCb29sZWFuIiwiZnJhbWVFbGVtZW50IiwiZSIsInZhbGlkSGFzaCIsImxpbmtzVG9DdXJyZW50UGFnZSIsImxpbmsiLCJ0ZXN0IiwiaGFzaCIsImhvc3QiLCJwYXRobmFtZSIsInJlZHVjZWRNb3Rpb25NZWRpYVF1ZXJ5IiwibWF0Y2hNZWRpYSIsInJlZHVjZWRNb3Rpb25FbmFibGVkIiwiZ2V0QXR0cmlidXRlIiwibWF0Y2hlcyIsInNldEZvY3VzYWJsZSIsIiRlbCIsImFjdGlvbiIsImluaXRpYWxUYWJpbmRleCIsImF0dHIiLCJyZW1vdmVBdHRyIiwidG9nZ2xlQ2xhc3MiLCJ2YWxpZGF0ZVNjcm9sbCIsImV2dCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJtb2JpbGUiLCJjbGFzc05hbWUiLCJsZW5ndGgiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInVwZGF0ZUhpc3RvcnkiLCJzY3JvbGwiLCJzZXRGb2N1cyIsImdldCIsImZvY3VzIiwicHJldmVudFNjcm9sbCIsInB1c2hTdGF0ZSIsImNocm9tZSIsInByb3RvY29sIiwib2xkSGFzaCIsInN0YXRlIiwiJHRhcmdldEVsIiwiY2IiLCJzdGFydCIsInNjcm9sbFRvcCIsImVuZCIsImNhbGN1bGF0ZVNjcm9sbEVuZFBvc2l0aW9uIiwiZHVyYXRpb24iLCJjYWxjdWxhdGVTY3JvbGxEdXJhdGlvbiIsImNsb2NrIiwiRGF0ZSIsIm5vdyIsInN0ZXAiLCJlbGFwc2VkIiwiZ2V0WSIsIiRoZWFkZXIiLCJvZmZzZXRZIiwiY3NzIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXQiLCJ0b3AiLCJkYXRhIiwiYXZhaWxhYmxlIiwiaGVpZ2h0IiwiZWxIZWlnaHQiLCJNYXRoIiwicm91bmQiLCJtdWx0IiwiYWRkIiwiZWFjaCIsIl8iLCJlbCIsInRpbWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJsb2ciLCJhYnMiLCJlYXNlIiwidCIsInJlYWR5Iiwib24iLCJoZWFkIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0QkQsUUFBUUUsTUFBTSxDQUNaLFVBQ0NDLE9BQU9DLE9BQU8sR0FBRyxTQUFVQyxDQUFDO0lBQzNCOzs7Ozs7S0FNQyxHQUNELElBQUlDLFlBQVk7UUFDZEMsZ0JBQWdCO1FBQ2hCQyxpQkFBaUI7SUFDbkI7SUFFQSxJQUFJQyxNQUFNQyxPQUFPQyxRQUFRO0lBQ3pCLElBQUlDLFVBQVVDLGFBQWEsT0FBT0gsT0FBT0UsT0FBTztJQUNoRCxJQUFJRSxPQUFPVCxFQUFFSztJQUNiLElBQUlLLE9BQU9WLEVBQUVXO0lBQ2IsSUFBSUMsUUFBUVosRUFBRVcsU0FBU0UsSUFBSTtJQUUzQixJQUFJQyxVQUNGVCxPQUFPVSxxQkFBcUIsSUFDNUJWLE9BQU9XLHdCQUF3QixJQUMvQlgsT0FBT1ksMkJBQTJCLElBQ2xDLFNBQVVDLEVBQUU7UUFDVmIsT0FBT2MsVUFBVSxDQUFDRCxJQUFJO0lBQ3hCO0lBQ0YsSUFBSUUsVUFBVXpCLFFBQVEwQixHQUFHLENBQUMsWUFBWSxtQkFBbUI7SUFDekQsSUFBSUMsaUJBQ0YsYUFDQUYsVUFDQSxpQkFDQUEsVUFDQTtJQUVGLElBQUlHLG9CQUFvQjtJQUV4Qjs7Ozs7S0FLQyxHQUNELElBQUlDLG9CQUNGLHVDQUF1Q0Qsb0JBQW9CO0lBRTdELElBQUlFLHlCQUNGO0lBRUYsSUFBSUMsZ0JBQWdCZixTQUFTZ0IsYUFBYSxDQUFDO0lBQzNDRCxjQUFjRSxXQUFXLENBQUNqQixTQUFTa0IsY0FBYyxDQUFD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 }), 3695: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals document, window */ /** * Webflow: Touch events * Supports legacy 'tap' event * Adds a 'swipe' event to desktop and mobile */ var Webflow = __webpack_require__(3949); Webflow.define('touch', module.exports = function($) { var api = {}; var getSelection = window.getSelection; // Delegate all legacy 'tap' events to 'click' $.event.special.tap = { bindType: 'click', delegateType: 'click' }; api.init = function(el) { el = typeof el === 'string' ? $(el).get(0) : el; return el ? new Touch(el) : null; }; function Touch(el) { var active = false; var useTouch = false; var thresholdX = Math.min(Math.round(window.innerWidth * 0.04), 40); var startX; var lastX; el.addEventListener('touchstart', start, false); el.addEventListener('touchmove', move, false); el.addEventListener('touchend', end, false); el.addEventListener('touchcancel', cancel, false); el.addEventListener('mousedown', start, false); el.addEventListener('mousemove', move, false); el.addEventListener('mouseup', end, false); el.addEventListener('mouseout', cancel, false); function start(evt) { // We don’t handle multi-touch events yet. var touches = evt.touches; if (touches && touches.length > 1) { return; } active = true; if (touches) { useTouch = true; startX = touches[0].clientX; } else { startX = evt.clientX; } lastX = startX; } function move(evt) { if (!active) { return; } if (useTouch && evt.type === 'mousemove') { evt.preventDefault(); evt.stopPropagation(); return; } var touches = evt.touches; var x = touches ? touches[0].clientX : evt.clientX; var velocityX = x - lastX; lastX = x; // Allow swipes while pointer is down, but prevent them during text selection if (Math.abs(velocityX) > thresholdX && getSelection && String(getSelection()) === '') { triggerEvent('swipe', evt, { direction: velocityX > 0 ? 'right' : 'left' }); cancel(); } } function end(evt) { if (!active) { return; } active = false; if (useTouch && evt.type === 'mouseup') { evt.preventDefault(); evt.stopPropagation(); useTouch = false; return; } } function cancel() { active = false; } function destroy() { el.removeEventListener('touchstart', start, false); el.removeEventListener('touchmove', move, false); el.removeEventListener('touchend', end, false); el.removeEventListener('touchcancel', cancel, false); el.removeEventListener('mousedown', start, false); el.removeEventListener('mousemove', move, false); el.removeEventListener('mouseup', end, false); el.removeEventListener('mouseout', cancel, false); el = null; } // Public instance methods this.destroy = destroy; } // Wrap native event to supoprt preventdefault + stopPropagation function triggerEvent(type, evt, data) { var newEvent = $.Event(type, { originalEvent: evt }); $(evt.target).trigger(newEvent, data); } // Listen for touch events on all nodes by default. api.instance = api.init(document); // Export module return api; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctdG91Y2guanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBkb2N1bWVudCwgd2luZG93ICovXG5cbi8qKlxuICogV2ViZmxvdzogVG91Y2ggZXZlbnRzXG4gKiBTdXBwb3J0cyBsZWdhY3kgJ3RhcCcgZXZlbnRcbiAqIEFkZHMgYSAnc3dpcGUnIGV2ZW50IHRvIGRlc2t0b3AgYW5kIG1vYmlsZVxuICovXG5cbnZhciBXZWJmbG93ID0gcmVxdWlyZSgnLi93ZWJmbG93LWxpYicpO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ3RvdWNoJyxcbiAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCQpIHtcbiAgICB2YXIgYXBpID0ge307XG4gICAgdmFyIGdldFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb247XG5cbiAgICAvLyBEZWxlZ2F0ZSBhbGwgbGVnYWN5ICd0YXAnIGV2ZW50cyB0byAnY2xpY2snXG4gICAgJC5ldmVudC5zcGVjaWFsLnRhcCA9IHtiaW5kVHlwZTogJ2NsaWNrJywgZGVsZWdhdGVUeXBlOiAnY2xpY2snfTtcblxuICAgIGFwaS5pbml0ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICBlbCA9IHR5cGVvZiBlbCA9PT0gJ3N0cmluZycgPyAkKGVsKS5nZXQoMCkgOiBlbDtcbiAgICAgIHJldHVybiBlbCA/IG5ldyBUb3VjaChlbCkgOiBudWxsO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBUb3VjaChlbCkge1xuICAgICAgdmFyIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdmFyIHVzZVRvdWNoID0gZmFsc2U7XG4gICAgICB2YXIgdGhyZXNob2xkWCA9IE1hdGgubWluKE1hdGgucm91bmQod2luZG93LmlubmVyV2lkdGggKiAwLjA0KSwgNDApO1xuICAgICAgdmFyIHN0YXJ0WDtcbiAgICAgIHZhciBsYXN0WDtcblxuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHN0YXJ0LCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBtb3ZlLCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGVuZCwgZmFsc2UpO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCBjYW5jZWwsIGZhbHNlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHN0YXJ0LCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlLCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZW5kLCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGNhbmNlbCwgZmFsc2UpO1xuXG4gICAgICBmdW5jdGlvbiBzdGFydChldnQpIHtcbiAgICAgICAgLy8gV2UgZG9u4oCZdCBoYW5kbGUgbXVsdGktdG91Y2ggZXZlbnRzIHlldC5cbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldnQudG91Y2hlcztcbiAgICAgICAgaWYgKHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBpZiAodG91Y2hlcykge1xuICAgICAgICAgIHVzZVRvdWNoID0gdHJ1ZTtcbiAgICAgICAgICBzdGFydFggPSB0b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRYID0gZXZ0LmNsaWVudFg7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0WCA9IHN0YXJ0WDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbW92ZShldnQpIHtcbiAgICAgICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlVG91Y2ggJiYgZXZ0LnR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XG4gICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0b3VjaGVzID0gZXZ0LnRvdWNoZXM7XG4gICAgICAgIHZhciB4ID0gdG91Y2hlcyA/IHRvdWNoZXNbMF0uY2xpZW50WCA6IGV2dC5jbGllbnRYO1xuICAgICAgICB2YXIgdmVsb2NpdHlYID0geCAtIGxhc3RYO1xuXG4gICAgICAgIGxhc3RYID0geDtcblxuICAgICAgICAvLyBBbGxvdyBzd2lwZXMgd2hpbGUgcG9pbnRlciBpcyBkb3duLCBidXQgcHJldmVudCB0aGVtIGR1cmluZyB0ZXh0IHNlbGVjdGlvblxuICAgICAgICBpZiAoXG4gICAgICAgICAgTWF0aC5hYnModmVsb2NpdHlYKSA+IHRocmVzaG9sZFggJiZcbiAgICAgICAgICBnZXRTZWxlY3Rpb24gJiZcbiAgICAgICAgICBTdHJpbmcoZ2V0U2VsZWN0aW9uKCkpID09PSAnJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnQoJ3N3aXBlJywgZXZ0LCB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IHZlbG9jaXR5WCA+IDAgPyAncmlnaHQnIDogJ2xlZnQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGVuZChldnQpIHtcbiAgICAgICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHVzZVRvdWNoICYmIGV2dC50eXBlID09PSAnbW91c2V1cCcpIHtcbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdXNlVG91Y2ggPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG1vdmUsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBlbmQsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCBjYW5jZWwsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgc3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZSwgZmFsc2UpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZW5kLCBmYWxzZSk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgY2FuY2VsLCBmYWxzZSk7XG4gICAgICAgIGVsID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gUHVibGljIGluc3RhbmNlIG1ldGhvZHNcbiAgICAgIHRoaXMuZGVzdHJveSA9IGRlc3Ryb3k7XG4gICAgfVxuXG4gICAgLy8gV3JhcCBuYXRpdmUgZXZlbnQgdG8gc3Vwb3BydCBwcmV2ZW50ZGVmYXVsdCArIHN0b3BQcm9wYWdhdGlvblxuICAgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudCh0eXBlLCBldnQsIGRhdGEpIHtcbiAgICAgIHZhciBuZXdFdmVudCA9ICQuRXZlbnQodHlwZSwge29yaWdpbmFsRXZlbnQ6IGV2dH0pO1xuICAgICAgJChldnQudGFyZ2V0KS50cmlnZ2VyKG5ld0V2ZW50LCBkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHRvdWNoIGV2ZW50cyBvbiBhbGwgbm9kZXMgYnkgZGVmYXVsdC5cbiAgICBhcGkuaW5zdGFuY2UgPSBhcGkuaW5pdChkb2N1bWVudCk7XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIGFwaTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiJCIsImFwaSIsImdldFNlbGVjdGlvbiIsIndpbmRvdyIsImV2ZW50Iiwic3BlY2lhbCIsInRhcCIsImJpbmRUeXBlIiwiZGVsZWdhdGVUeXBlIiwiaW5pdCIsImVsIiwiZ2V0IiwiVG91Y2giLCJhY3RpdmUiLCJ1c2VUb3VjaCIsInRocmVzaG9sZFgiLCJNYXRoIiwibWluIiwicm91bmQiLCJpbm5lcldpZHRoIiwic3RhcnRYIiwibGFzdFgiLCJhZGRFdmVudExpc3RlbmVyIiwic3RhcnQiLCJtb3ZlIiwiZW5kIiwiY2FuY2VsIiwiZXZ0IiwidG91Y2hlcyIsImxlbmd0aCIsImNsaWVudFgiLCJ0eXBlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ4IiwidmVsb2NpdHlYIiwiYWJzIiwiU3RyaW5nIiwidHJpZ2dlckV2ZW50IiwiZGlyZWN0aW9uIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkYXRhIiwibmV3RXZlbnQiLCJFdmVudCIsIm9yaWdpbmFsRXZlbnQiLCJ0YXJnZXQiLCJ0cmlnZ2VyIiwiaW5zdGFuY2UiLCJkb2N1bWVudCJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCOzs7O0NBSUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCRCxRQUFRRSxNQUFNLENBQ1osU0FDQ0MsT0FBT0MsT0FBTyxHQUFHLFNBQVVDLENBQUM7SUFDM0Is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 }), 9078: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* global document window */ /** * Webflow: Tabs component */ var Webflow = __webpack_require__(3949); var IXEvents = __webpack_require__(5134); Webflow.define('tabs', module.exports = function($) { var api = {}; var tram = $.tram; var $doc = $(document); var $tabs; var design; var env = Webflow.env; var safari = env.safari; var inApp = env(); var tabAttr = 'data-w-tab'; var paneAttr = 'data-w-pane'; var namespace = '.w-tabs'; var linkCurrent = 'w--current'; var tabActive = 'w--tab-active'; var ix = IXEvents.triggers; var inRedraw = false; // ----------------------------------- // Module methods api.ready = api.design = api.preview = init; api.redraw = function() { inRedraw = true; init(); inRedraw = false; }; api.destroy = function() { $tabs = $doc.find(namespace); if (!$tabs.length) { return; } $tabs.each(resetIX); removeListeners(); }; // ----------------------------------- // Private methods function init() { design = inApp && Webflow.env('design'); // Find all instances on the page $tabs = $doc.find(namespace); if (!$tabs.length) { return; } $tabs.each(build); if (Webflow.env('preview') && !inRedraw) { $tabs.each(resetIX); } removeListeners(); addListeners(); } function removeListeners() { Webflow.redraw.off(api.redraw); } function addListeners() { Webflow.redraw.on(api.redraw); } function resetIX(i, el) { var data = $.data(el, namespace); if (!data) { return; } data.links && data.links.each(ix.reset); data.panes && data.panes.each(ix.reset); } function build(i, el) { var widgetHash = namespace.substr(1) + '-' + i; var $el = $(el); // Store state in data var data = $.data(el, namespace); if (!data) { data = $.data(el, namespace, { el: $el, config: {} }); } data.current = null; data.tabIdentifier = widgetHash + '-' + tabAttr; data.paneIdentifier = widgetHash + '-' + paneAttr; data.menu = $el.children('.w-tab-menu'); data.links = data.menu.children('.w-tab-link'); data.content = $el.children('.w-tab-content'); data.panes = data.content.children('.w-tab-pane'); // Remove old events data.el.off(namespace); data.links.off(namespace); // This role is necessary in the ARIA spec data.menu.attr('role', 'tablist'); // Set all tabs unfocusable data.links.attr('tabindex', '-1'); // Set config from data attributes configure(data); // Wire up events when not in design mode if (!design) { data.links.on('click' + namespace, linkSelect(data)); data.links.on('keydown' + namespace, handleLinkKeydown(data)); // Trigger first intro event from current tab var $link = data.links.filter('.' + linkCurrent); var tab = $link.attr(tabAttr); tab && changeTab(data, { tab, immediate: true }); } } function configure(data) { var config = {}; // Set config options from data attributes config.easing = data.el.attr('data-easing') || 'ease'; var intro = parseInt(data.el.attr('data-duration-in'), 10); // eslint-disable-next-line no-self-compare intro = config.intro = intro === intro ? intro : 0; var outro = parseInt(data.el.attr('data-duration-out'), 10); // eslint-disable-next-line no-self-compare outro = config.outro = outro === outro ? outro : 0; config.immediate = !intro && !outro; // Store config in data data.config = config; } function getActiveTabIdx(data) { var tab = data.current; return Array.prototype.findIndex.call(data.links, (t)=>{ return t.getAttribute(tabAttr) === tab; }, null); } function linkSelect(data) { return function(evt) { evt.preventDefault(); var tab = evt.currentTarget.getAttribute(tabAttr); tab && changeTab(data, { tab }); }; } function handleLinkKeydown(data) { return function(evt) { var currentIdx = getActiveTabIdx(data); var keyName = evt.key; var keyMap = { ArrowLeft: currentIdx - 1, ArrowUp: currentIdx - 1, ArrowRight: currentIdx + 1, ArrowDown: currentIdx + 1, End: data.links.length - 1, Home: 0 }; // Bail out of function if this key is not // involved in tab management if (!(keyName in keyMap)) return; evt.preventDefault(); var nextIdx = keyMap[keyName]; // go back to end of tabs if we wrap past the start if (nextIdx === -1) { nextIdx = data.links.length - 1; } // go back to start if we wrap past the last tab if (nextIdx === data.links.length) { nextIdx = 0; } var tabEl = data.links[nextIdx]; var tab = tabEl.getAttribute(tabAttr); tab && changeTab(data, { tab }); }; } function changeTab(data, options) { options = options || {}; var config = data.config; var easing = config.easing; var tab = options.tab; // Don't select the same tab twice if (tab === data.current) { return; } data.current = tab; /** * The currently active tab. * Will be referenced to manage focus after * TabLink attributes are changed * @type {HTMLAnchorElement} */ var currentTab; // Select the current link data.links.each(function(i, el) { var $el = $(el); // Add important attributes at build time. if (options.immediate || config.immediate) { // Store corresponding pane for reference. var pane = data.panes[i]; // IDs are necessary for ARIA relationships, // so if the user did not create one, we create one // using our generated identifier if (!el.id) { el.id = data.tabIdentifier + '-' + i; } if (!pane.id) { pane.id = data.paneIdentifier + '-' + i; } el.href = '#' + pane.id; // Tab elements must take this role el.setAttribute('role', 'tab'); // Tab elements must reference the unique ID of the panel // that they control el.setAttribute('aria-controls', pane.id); // Tab elements must report that they are not selected // by default el.setAttribute('aria-selected', 'false'); // Panes must take on the `Tabpanel` role pane.setAttribute('role', 'tabpanel'); // Elements with tabpanel role must be labelled by // their controlling tab pane.setAttribute('aria-labelledby', el.id); } if (el.getAttribute(tabAttr) === tab) { // This is the current tab. Store it. currentTab = el; $el.addClass(linkCurrent).removeAttr('tabindex').attr({ 'aria-selected': 'true' }).each(ix.intro); } else if ($el.hasClass(linkCurrent)) { $el.removeClass(linkCurrent).attr({ tabindex: '-1', 'aria-selected': 'false' }).each(ix.outro); } }); // Find the new tab panes and keep track of previous var targets = []; var previous = []; data.panes.each(function(i, el) { var $el = $(el); if (el.getAttribute(tabAttr) === tab) { targets.push(el); } else if ($el.hasClass(tabActive)) { previous.push(el); } }); var $targets = $(targets); var $previous = $(previous); // Switch tabs immediately and bypass transitions if (options.immediate || config.immediate) { $targets.addClass(tabActive).each(ix.intro); $previous.removeClass(tabActive); // Redraw to benefit components in the hidden tab pane // But only if not currently in the middle of a redraw if (!inRedraw) { Webflow.redraw.up(); } return; } else { // Backwards compatible hack to prevent focus from scrolling var x = window.scrollX; var y = window.scrollY; currentTab.focus(); window.scrollTo(x, y); } // Fade out the currently active tab before intro if ($previous.length && config.outro) { $previous.each(ix.outro); tram($previous).add('opacity ' + config.outro + 'ms ' + easing, { fallback: safari }).start({ opacity: 0 }).then(()=>fadeIn(config, $previous, $targets)); } else { // Skip the outro and play intro fadeIn(config, $previous, $targets); } } // Fade in the new target function fadeIn(config, $previous, $targets) { // Clear previous active class + styles touched by tram // We cannot remove the whole inline style because it could be dynamically bound $previous.removeClass(tabActive).css({ opacity: '', transition: '', transform: '', width: '', height: '' }); // Add active class to new target $targets.addClass(tabActive).each(ix.intro); Webflow.redraw.up(); // Set opacity immediately if intro is zero if (!config.intro) { return tram($targets).set({ opacity: 1 }); } // Otherwise fade in opacity tram($targets).set({ opacity: 0 }).redraw().add('opacity ' + config.intro + 'ms ' + config.easing, { fallback: safari }).start({ opacity: 1 }); } // Export module return api; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctdGFicy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZG9jdW1lbnQgd2luZG93ICovXG5cbi8qKlxuICogV2ViZmxvdzogVGFicyBjb21wb25lbnRcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4uL0Jhc2VTaXRlTW9kdWxlcy93ZWJmbG93LWxpYicpO1xudmFyIElYRXZlbnRzID0gcmVxdWlyZSgnLi4vQmFzZVNpdGVNb2R1bGVzL3dlYmZsb3ctaXgyLWV2ZW50cycpO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ3RhYnMnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJCkge1xuICAgIHZhciBhcGkgPSB7fTtcbiAgICB2YXIgdHJhbSA9ICQudHJhbTtcbiAgICB2YXIgJGRvYyA9ICQoZG9jdW1lbnQpO1xuICAgIHZhciAkdGFicztcbiAgICB2YXIgZGVzaWduO1xuICAgIHZhciBlbnYgPSBXZWJmbG93LmVudjtcbiAgICB2YXIgc2FmYXJpID0gZW52LnNhZmFyaTtcbiAgICB2YXIgaW5BcHAgPSBlbnYoKTtcbiAgICB2YXIgdGFiQXR0ciA9ICdkYXRhLXctdGFiJztcbiAgICB2YXIgcGFuZUF0dHIgPSAnZGF0YS13LXBhbmUnO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctdGFicyc7XG4gICAgdmFyIGxpbmtDdXJyZW50ID0gJ3ctLWN1cnJlbnQnO1xuICAgIHZhciB0YWJBY3RpdmUgPSAndy0tdGFiLWFjdGl2ZSc7XG4gICAgdmFyIGl4ID0gSVhFdmVudHMudHJpZ2dlcnM7XG5cbiAgICB2YXIgaW5SZWRyYXcgPSBmYWxzZTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTW9kdWxlIG1ldGhvZHNcblxuICAgIGFwaS5yZWFkeSA9IGFwaS5kZXNpZ24gPSBhcGkucHJldmlldyA9IGluaXQ7XG5cbiAgICBhcGkucmVkcmF3ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5SZWRyYXcgPSB0cnVlO1xuICAgICAgaW5pdCgpO1xuICAgICAgaW5SZWRyYXcgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgYXBpLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkdGFicyA9ICRkb2MuZmluZChuYW1lc3BhY2UpO1xuICAgICAgaWYgKCEkdGFicy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJHRhYnMuZWFjaChyZXNldElYKTtcbiAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgIH07XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFByaXZhdGUgbWV0aG9kc1xuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIGRlc2lnbiA9IGluQXBwICYmIFdlYmZsb3cuZW52KCdkZXNpZ24nKTtcblxuICAgICAgLy8gRmluZCBhbGwgaW5zdGFuY2VzIG9uIHRoZSBwYWdlXG4gICAgICAkdGFicyA9ICRkb2MuZmluZChuYW1lc3BhY2UpO1xuICAgICAgaWYgKCEkdGFicy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJHRhYnMuZWFjaChidWlsZCk7XG4gICAgICBpZiAoV2ViZmxvdy5lbnYoJ3ByZXZpZXcnKSAmJiAhaW5SZWRyYXcpIHtcbiAgICAgICAgJHRhYnMuZWFjaChyZXNldElYKTtcbiAgICAgIH1cblxuICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICBhZGRMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgICBXZWJmbG93LnJlZHJhdy5vZmYoYXBpLnJlZHJhdyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkTGlzdGVuZXJzKCkge1xuICAgICAgV2ViZmxvdy5yZWRyYXcub24oYXBpLnJlZHJhdyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRJWChpLCBlbCkge1xuICAgICAgdmFyIGRhdGEgPSAkLmRhdGEoZWwsIG5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGF0YS5saW5rcyAmJiBkYXRhLmxpbmtzLmVhY2goaXgucmVzZXQpO1xuICAgICAgZGF0YS5wYW5lcyAmJiBkYXRhLnBhbmVzLmVhY2goaXgucmVzZXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkKGksIGVsKSB7XG4gICAgICB2YXIgd2lkZ2V0SGFzaCA9IG5hbWVzcGFjZS5zdWJzdHIoMSkgKyAnLScgKyBpO1xuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuXG4gICAgICAvLyBTdG9yZSBzdGF0ZSBpbiBkYXRhXG4gICAgICB2YXIgZGF0YSA9ICQuZGF0YShlbCwgbmFtZXNwYWNlKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gJC5kYXRhKGVsLCBuYW1lc3BhY2UsIHtlbDogJGVsLCBjb25maWc6IHt9fSk7XG4gICAgICB9XG4gICAgICBkYXRhLmN1cnJlbnQgPSBudWxsO1xuICAgICAgZGF0YS50YWJJZGVudGlmaWVyID0gd2lkZ2V0SGFzaCArICctJyArIHRhYkF0dHI7XG4gICAgICBkYXRhLnBhbmVJZGVudGlmaWVyID0gd2lkZ2V0SGFzaCArICctJyArIHBhbmVBdHRyO1xuXG4gICAgICBkYXRhLm1lbnUgPSAkZWwuY2hpbGRyZW4oJy53LXRhYi1tZW51Jyk7XG4gICAgICBkYXRhLmxpbmtzID0gZGF0YS5tZW51LmNoaWxkcmVuKCcudy10YWItbGluaycpO1xuICAgICAgZGF0YS5jb250ZW50ID0gJGVsLmNoaWxkcmVuKCcudy10YWItY29udGVudCcpO1xuICAgICAgZGF0YS5wYW5lcyA9IGRhdGEuY29udGVudC5jaGlsZHJlbignLnctdGFiLXBhbmUnKTtcblxuICAgICAgLy8gUmVtb3ZlIG9sZCBldmVudHNcbiAgICAgIGRhdGEuZWwub2ZmKG5hbWVzcGFjZSk7XG4gICAgICBkYXRhLmxpbmtzLm9mZihuYW1lc3BhY2UpO1xuXG4gICAgICAvLyBUaGlzIHJvbGUgaXMgbmVjZXNzYXJ5IGluIHRoZSBBUklBIHNwZWNcbiAgICAgIGRhdGEubWVudS5hdHRyKCdyb2xlJywgJ3RhYmxpc3QnKTtcblxuICAgICAgLy8gU2V0IGFsbCB0YWJzIHVuZm9jdXNhYmxlXG4gICAgICBkYXRhLmxpbmtzLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG5cbiAgICAgIC8vIFNldCBjb25maWcgZnJvbSBkYXRhIGF0dHJpYnV0ZXNcbiAgICAgIGNvbmZpZ3VyZShkYXRhKTtcblxuICAgICAgLy8gV2lyZSB1cCBldmVudHMgd2hlbiBub3QgaW4gZGVzaWduIG1vZGVcbiAgICAgIGlmICghZGVzaWduKSB7XG4gICAgICAgIGRhdGEubGlua3Mub24oJ2NsaWNrJyArIG5hbWVzcGFjZSwgbGlua1NlbGVjdChkYXRhKSk7XG4gICAgICAgIGRhdGEubGlua3Mub24oJ2tleWRvd24nICsgbmFtZXNwYWNlLCBoYW5kbGVMaW5rS2V5ZG93bihkYXRhKSk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBmaXJzdCBpbnRybyBldmVudCBmcm9tIGN1cnJlbnQgdGFiXG4gICAgICAgIHZhciAkbGluayA9IGRhdGEubGlua3MuZmlsdGVyKCcuJyArIGxpbmtDdXJyZW50KTtcbiAgICAgICAgdmFyIHRhYiA9ICRsaW5rLmF0dHIodGFiQXR0cik7XG4gICAgICAgIHRhYiAmJiBjaGFuZ2VUYWIoZGF0YSwge3RhYiwgaW1tZWRpYXRlOiB0cnVlfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGRhdGEpIHtcbiAgICAgIHZhciBjb25maWcgPSB7fTtcblxuICAgICAgLy8gU2V0IGNvbmZpZyBvcHRpb25zIGZyb20gZGF0YSBhdHRyaWJ1dGVzXG4gICAgICBjb25maWcuZWFzaW5nID0gZGF0YS5lbC5hdHRyKCdkYXRhLWVhc2luZycpIHx8ICdlYXNlJztcblxuICAgICAgdmFyIGludHJvID0gcGFyc2VJbnQoZGF0YS5lbC5hdHRyKCdkYXRhLWR1cmF0aW9uLWluJyksIDEwKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGludHJvID0gY29uZmlnLmludHJvID0gaW50cm8gPT09IGludHJvID8gaW50cm8gOiAwO1xuXG4gICAgICB2YXIgb3V0cm8gPSBwYXJzZUludChkYXRhLmVsLmF0dHIoJ2RhdGEtZHVyYXRpb24tb3V0JyksIDEwKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIG91dHJvID0gY29uZmlnLm91dHJvID0gb3V0cm8gPT09IG91dHJvID8gb3V0cm8gOiAwO1xuXG4gICAgICBjb25maWcuaW1tZWRpYXRlID0gIWludHJvICYmICFvdXRybztcblxuICAgICAgLy8gU3RvcmUgY29uZmlnIGluIGRhdGFcbiAgICAgIGRhdGEuY29uZmlnID0gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFjdGl2ZVRhYklkeChkYXRhKSB7XG4gICAgICB2YXIgdGFiID0gZGF0YS5jdXJyZW50O1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXguY2FsbChcbiAgICAgICAgZGF0YS5saW5rcyxcbiAgICAgICAgKHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdC5nZXRBdHRyaWJ1dGUodGFiQXR0cikgPT09IHRhYjtcbiAgICAgICAgfSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5rU2VsZWN0KGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB2YXIgdGFiID0gZXZ0LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKHRhYkF0dHIpO1xuICAgICAgICB0YWIgJiYgY2hhbmdlVGFiKGRhdGEsIHt0YWJ9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlTGlua0tleWRvd24oZGF0YSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRJZHggPSBnZXRBY3RpdmVUYWJJZHgoZGF0YSk7XG4gICAgICAgIHZhciBrZXlOYW1lID0gZXZ0LmtleTtcbiAgICAgICAgdmFyIGtleU1hcCA9IHtcbiAgICAgICAgICBBcnJvd0xlZnQ6IGN1cnJlbnRJZHggLSAxLFxuICAgICAgICAgIEFycm93VXA6IGN1cnJlbnRJZHggLSAxLFxuICAgICAgICAgIEFycm93UmlnaHQ6IGN1cnJlbnRJZHggKyAxLFxuICAgICAgICAgIEFycm93RG93bjogY3VycmVudElkeCArIDEsXG4gICAgICAgICAgRW5kOiBkYXRhLmxpbmtzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgSG9tZTogMCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBCYWlsIG91dCBvZiBmdW5jdGlvbiBpZiB0aGlzIGtleSBpcyBub3RcbiAgICAgICAgLy8gaW52b2x2ZWQgaW4gdGFiIG1hbmFnZW1lbnRcbiAgICAgICAgaWYgKCEoa2V5TmFtZSBpbiBrZXlNYXApKSByZXR1cm47XG5cbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdmFyIG5leHRJZHggPSBrZXlNYXBba2V5TmFtZV07XG5cbiAgICAgICAgLy8gZ28gYmFjayB0byBlbmQgb2YgdGFicyBpZiB3ZSB3cmFwIHBhc3QgdGhlIHN0YXJ0XG4gICAgICAgIGlmIChuZXh0SWR4ID09PSAtMSkge1xuICAgICAgICAgIG5leHRJZHggPSBkYXRhLmxpbmtzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ28gYmFjayB0byBzdGFydCBpZiB3ZSB3cmFwIHBhc3QgdGhlIGxhc3QgdGFiXG4gICAgICAgIGlmIChuZXh0SWR4ID09PSBkYXRhLmxpbmtzLmxlbmd0aCkge1xuICAgICAgICAgIG5leHRJZHggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0YWJFbCA9IGRhdGEubGlua3NbbmV4dElkeF07XG4gICAgICAgIHZhciB0YWIgPSB0YWJFbC5nZXRBdHRyaWJ1dGUodGFiQXR0cik7XG4gICAgICAgIHRhYiAmJiBjaGFuZ2VUYWIoZGF0YSwge3RhYn0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGFuZ2VUYWIoZGF0YSwgb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgIHZhciBjb25maWcgPSBkYXRhLmNvbmZpZztcbiAgICAgIHZhciBlYXNpbmcgPSBjb25maWcuZWFzaW5nO1xuICAgICAgdmFyIHRhYiA9IG9wdGlvbnMudGFiO1xuXG4gICAgICAvLyBEb24ndCBzZWxlY3QgdGhlIHNhbWUgdGFiIHR3aWNlXG4gICAgICBpZiAodGFiID09PSBkYXRhLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGF0YS5jdXJyZW50ID0gdGFiO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYi5cbiAgICAgICAqIFdpbGwgYmUgcmVmZXJlbmNlZCB0byBtYW5hZ2UgZm9jdXMgYWZ0ZXJcbiAgICAgICAqIFRhYkxpbmsgYXR0cmlidXRlcyBhcmUgY2hhbmdlZFxuICAgICAgICogQHR5cGUge0hUTUxBbmNob3JFbGVtZW50fVxuICAgICAgICovXG4gICAgICB2YXIgY3VycmVudFRhYjtcblxuICAgICAgLy8gU2VsZWN0IHRoZSBjdXJyZW50IGxpbmtcbiAgICAgIGRhdGEubGlua3MuZWFjaChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgdmFyICRlbCA9ICQoZWwpO1xuXG4gICAgICAgIC8vIEFkZCBpbXBvcnRhbnQgYXR0cmlidXRlcyBhdCBidWlsZCB0aW1lLlxuICAgICAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUgfHwgY29uZmlnLmltbWVkaWF0ZSkge1xuICAgICAgICAgIC8vIFN0b3JlIGNvcnJlc3BvbmRpbmcgcGFuZSBmb3IgcmVmZXJlbmNlLlxuICAgICAgICAgIHZhciBwYW5lID0gZGF0YS5wYW5lc1tpXTtcbiAgICAgICAgICAvLyBJRHMgYXJlIG5lY2Vzc2FyeSBmb3IgQVJJQSByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIC8vIHNvIGlmIHRoZSB1c2VyIGRpZCBub3QgY3JlYXRlIG9uZSwgd2UgY3JlYXRlIG9uZVxuICAgICAgICAgIC8vIHVzaW5nIG91ciBnZW5lcmF0ZWQgaWRlbnRpZmllclxuICAgICAgICAgIGlmICghZWwuaWQpIHtcbiAgICAgICAgICAgIGVsLmlkID0gZGF0YS50YWJJZGVudGlmaWVyICsgJy0nICsgaTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFwYW5lLmlkKSB7XG4gICAgICAgICAgICBwYW5lLmlkID0gZGF0YS5wYW5lSWRlbnRpZmllciArICctJyArIGk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsLmhyZWYgPSAnIycgKyBwYW5lLmlkO1xuXG4gICAgICAgICAgLy8gVGFiIGVsZW1lbnRzIG11c3QgdGFrZSB0aGlzIHJvbGVcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAndGFiJyk7XG4gICAgICAgICAgLy8gVGFiIGVsZW1lbnRzIG11c3QgcmVmZXJlbmNlIHRoZSB1bmlxdWUgSUQgb2YgdGhlIHBhbmVsXG4gICAgICAgICAgLy8gdGhhdCB0aGV5IGNvbnRyb2xcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnLCBwYW5lLmlkKTtcbiAgICAgICAgICAvLyBUYWIgZWxlbWVudHMgbXVzdCByZXBvcnQgdGhhdCB0aGV5IGFyZSBub3Qgc2VsZWN0ZWRcbiAgICAgICAgICAvLyBieSBkZWZhdWx0XG4gICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgLy8gUGFuZXMgbXVzdCB0YWtlIG9uIHRoZSBgVGFicGFuZWxgIHJvbGVcbiAgICAgICAgICBwYW5lLnNldEF0dHJpYnV0ZSgncm9sZScsICd0YWJwYW5lbCcpO1xuICAgICAgICAgIC8vIEVsZW1lbnRzIHdpdGggdGFicGFuZWwgcm9sZSBtdXN0IGJlIGxhYmVsbGVkIGJ5XG4gICAgICAgICAgLy8gdGhlaXIgY29udHJvbGxpbmcgdGFiXG4gICAgICAgICAgcGFuZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGVsLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKHRhYkF0dHIpID09PSB0YWIpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjdXJyZW50IHRhYi4gU3RvcmUgaXQuXG4gICAgICAgICAgY3VycmVudFRhYiA9IGVsO1xuICAgICAgICAgICRlbFxuICAgICAgICAgICAgLmFkZENsYXNzKGxpbmtDdXJyZW50KVxuICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ3RhYmluZGV4JylcbiAgICAgICAgICAgIC5hdHRyKHsnYXJpYS1zZWxlY3RlZCc6ICd0cnVlJ30pXG4gICAgICAgICAgICAuZWFjaChpeC5pbnRybyk7XG4gICAgICAgIH0gZWxzZSBpZiAoJGVsLmhhc0NsYXNzKGxpbmtDdXJyZW50KSkge1xuICAgICAgICAgICRlbFxuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKGxpbmtDdXJyZW50KVxuICAgICAgICAgICAgLmF0dHIoe3RhYmluZGV4OiAnLTEnLCAnYXJpYS1zZWxlY3RlZCc6ICdmYWxzZSd9KVxuICAgICAgICAgICAgLmVhY2goaXgub3V0cm8pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gRmluZCB0aGUgbmV3IHRhYiBwYW5lcyBhbmQga2VlcCB0cmFjayBvZiBwcmV2aW91c1xuICAgICAgdmFyIHRhcmdldHMgPSBbXTtcbiAgICAgIHZhciBwcmV2aW91cyA9IFtdO1xuICAgICAgZGF0YS5wYW5lcy5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICB2YXIgJGVsID0gJChlbCk7XG4gICAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUodGFiQXR0cikgPT09IHRhYikge1xuICAgICAgICAgIHRhcmdldHMucHVzaChlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoJGVsLmhhc0NsYXNzKHRhYkFjdGl2ZSkpIHtcbiAgICAgICAgICBwcmV2aW91cy5wdXNoKGVsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciAkdGFyZ2V0cyA9ICQodGFyZ2V0cyk7XG4gICAgICB2YXIgJHByZXZpb3VzID0gJChwcmV2aW91cyk7XG5cbiAgICAgIC8vIFN3aXRjaCB0YWJzIGltbWVkaWF0ZWx5IGFuZCBieXBhc3MgdHJhbnNpdGlvbnNcbiAgICAgIGlmIChvcHRpb25zLmltbWVkaWF0ZSB8fCBjb25maWcuaW1tZWRpYXRlKSB7XG4gICAgICAgICR0YXJnZXRzLmFkZENsYXNzKHRhYkFjdGl2ZSkuZWFjaChpeC5pbnRybyk7XG4gICAgICAgICRwcmV2aW91cy5yZW1vdmVDbGFzcyh0YWJBY3RpdmUpO1xuICAgICAgICAvLyBSZWRyYXcgdG8gYmVuZWZpdCBjb21wb25lbnRzIGluIHRoZSBoaWRkZW4gdGFiIHBhbmVcbiAgICAgICAgLy8gQnV0IG9ubHkgaWYgbm90IGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVkcmF3XG4gICAgICAgIGlmICghaW5SZWRyYXcpIHtcbiAgICAgICAgICBXZWJmbG93LnJlZHJhdy51cCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIEZvY3VzIGlmIHRoaXMgaXMgbm90IHRoZSBvbi1wYWdlLWxvYWQgY2FsbCB0byBgY2hhbmdlVGFiYFxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmxlIGhhY2sgdG8gcHJldmVudCBmb2N1cyBmcm9tIHNjcm9sbGluZ1xuICAgICAgICB2YXIgeCA9IHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICB2YXIgeSA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICBjdXJyZW50VGFiLmZvY3VzKCk7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgLy8gRmFkZSBvdXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiIGJlZm9yZSBpbnRyb1xuICAgICAgaWYgKCRwcmV2aW91cy5sZW5ndGggJiYgY29uZmlnLm91dHJvKSB7XG4gICAgICAgICRwcmV2aW91cy5lYWNoKGl4Lm91dHJvKTtcbiAgICAgICAgdHJhbSgkcHJldmlvdXMpXG4gICAgICAgICAgLmFkZCgnb3BhY2l0eSAnICsgY29uZmlnLm91dHJvICsgJ21zICcgKyBlYXNpbmcsIHtmYWxsYmFjazogc2FmYXJpfSlcbiAgICAgICAgICAuc3RhcnQoe29wYWNpdHk6IDB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IGZhZGVJbihjb25maWcsICRwcmV2aW91cywgJHRhcmdldHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNraXAgdGhlIG91dHJvIGFuZCBwbGF5IGludHJvXG4gICAgICAgIGZhZGVJbihjb25maWcsICRwcmV2aW91cywgJHRhcmdldHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhZGUgaW4gdGhlIG5ldyB0YXJnZXRcbiAgICBmdW5jdGlvbiBmYWRlSW4oY29uZmlnLCAkcHJldmlvdXMsICR0YXJnZXRzKSB7XG4gICAgICAvLyBDbGVhciBwcmV2aW91cyBhY3RpdmUgY2xhc3MgKyBzdHlsZXMgdG91Y2hlZCBieSB0cmFtXG4gICAgICAvLyBXZSBjYW5ub3QgcmVtb3ZlIHRoZSB3aG9sZSBpbmxpbmUgc3R5bGUgYmVjYXVzZSBpdCBjb3VsZCBiZSBkeW5hbWljYWxseSBib3VuZFxuICAgICAgJHByZXZpb3VzLnJlbW92ZUNsYXNzKHRhYkFjdGl2ZSkuY3NzKHtcbiAgICAgICAgb3BhY2l0eTogJycsXG4gICAgICAgIHRyYW5zaXRpb246ICcnLFxuICAgICAgICB0cmFuc2Zvcm06ICcnLFxuICAgICAgICB3aWR0aDogJycsXG4gICAgICAgIGhlaWdodDogJycsXG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIGFjdGl2ZSBjbGFzcyB0byBuZXcgdGFyZ2V0XG4gICAgICAkdGFyZ2V0cy5hZGRDbGFzcyh0YWJBY3RpdmUpLmVhY2goaXguaW50cm8pO1xuICAgICAgV2ViZmxvdy5yZWRyYXcudXAoKTtcblxuICAgICAgLy8gU2V0IG9wYWNpdHkgaW1tZWRpYXRlbHkgaWYgaW50cm8gaXMgemVyb1xuICAgICAgaWYgKCFjb25maWcuaW50cm8pIHtcbiAgICAgICAgcmV0dXJuIHRyYW0oJHRhcmdldHMpLnNldCh7b3BhY2l0eTogMX0pO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UgZmFkZSBpbiBvcGFjaXR5XG4gICAgICB0cmFtKCR0YXJnZXRzKVxuICAgICAgICAuc2V0KHtvcGFjaXR5OiAwfSlcbiAgICAgICAgLnJlZHJhdygpXG4gICAgICAgIC5hZGQoJ29wYWNpdHkgJyArIGNvbmZpZy5pbnRybyArICdtcyAnICsgY29uZmlnLmVhc2luZywge1xuICAgICAgICAgIGZhbGxiYWNrOiBzYWZhcmksXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGFydCh7b3BhY2l0eTogMX0pO1xuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4gYXBpO1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsIklYRXZlbnRzIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsIiQiLCJhcGkiLCJ0cmFtIiwiJGRvYyIsImRvY3VtZW50IiwiJHRhYnMiLCJkZXNpZ24iLCJlbnYiLCJzYWZhcmkiLCJpbkFwcCIsInRhYkF0dHIiLCJwYW5lQXR0ciIsIm5hbWVzcGFjZSIsImxpbmtDdXJyZW50IiwidGFiQWN0aXZlIiwiaXgiLCJ0cmlnZ2VycyIsImluUmVkcmF3IiwicmVhZHkiLCJwcmV2aWV3IiwiaW5pdCIsInJlZHJhdyIsImRlc3Ryb3kiLCJmaW5kIiwibGVuZ3RoIiwiZWFjaCIsInJlc2V0SVgiLCJyZW1vdmVMaXN0ZW5lcnMiLCJidWlsZCIsImFkZExpc3RlbmVycyIsIm9mZiIsIm9uIiwiaSIsImVsIiwiZGF0YSIsImxpbmtzIiwicmVzZXQiLCJwYW5lcyIsIndpZGdldEhhc2giLCJzdWJzdHIiLCIkZWwiLCJjb25maWciLCJjdXJyZW50IiwidGFiSWRlbnRpZmllciIsInBhbmVJZGVudGlmaWVyIiwibWVudSIsImNoaWxkcmVuIiwiY29udGVudCIsImF0dHIiLCJjb25maWd1cmUiLCJsaW5rU2VsZWN0IiwiaGFuZGxlTGlua0tleWRvd24iLCIkbGluayIsImZpbHRlciIsInRhYiIsImNoYW5nZVRhYiIsImltbWVkaWF0ZSIsImVhc2luZyIsImludHJvIiwicGFyc2VJbnQiLCJvdXRybyIsImdldEFjdGl2ZVRhYklkeCIsIkFycmF5IiwicHJvdG90eXBlIiwiZmluZEluZGV4IiwiY2FsbCIsInQiLCJnZXRBdHRyaWJ1dGUiLCJldnQiLCJwcmV2ZW50RGVmYXVsdCIsImN1cnJlbnRUYXJnZXQiLCJjdXJyZW50SWR4Iiwia2V5TmFtZSIsImtleSIsImtleU1hcCIsIkFycm93TGVmdCIsIkFycm93VXAiLCJBcnJvd1JpZ2h0IiwiQXJyb3dEb3duIiwiRW5kIiwiSG9tZSIsIm5leHRJZHgiLCJ0YWJFbCIsIm9wdGlvbnMiLCJjdXJyZW50VGFiIiwicGFuZSIsImlkIiwiaHJlZiIsInNldEF0dHJpYnV0ZSIsImFkZENsYXNzIiwicmVtb3ZlQXR0ciIsImhhc0NsYXNzIiwicmVtb3ZlQ2xhc3MiLCJ0YWJpbmRleCIsInRhcmdldHMiLCJwcmV2aW91cyIsInB1c2giLCIkdGFyZ2V0cyIsIiRwcmV2aW91cyIsInVwIiwieCIsIndpbmRvdyIsInNjcm9sbFgiLCJ5Iiwic2Nyb2xsWSIsImZvY3VzIiwic2Nyb2xsVG8iLCJhZGQiLCJmYWxsYmFjayIsInN0YXJ0Iiwib3BhY2l0eSIsInRoZW4iLCJmYWRlSW4iLCJjc3MiLCJ0cmFuc2l0aW9uIiwidHJhbnNmb3JtIiwid2lk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 }), 3946: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { actionListPlaybackChanged: function() { return actionListPlaybackChanged; }, animationFrameChanged: function() { return animationFrameChanged; }, clearRequested: function() { return clearRequested; }, elementStateChanged: function() { return elementStateChanged; }, eventListenerAdded: function() { return eventListenerAdded; }, eventStateChanged: function() { return eventStateChanged; }, instanceAdded: function() { return instanceAdded; }, instanceRemoved: function() { return instanceRemoved; }, instanceStarted: function() { return instanceStarted; }, mediaQueriesDefined: function() { return mediaQueriesDefined; }, parameterChanged: function() { return parameterChanged; }, playbackRequested: function() { return playbackRequested; }, previewRequested: function() { return previewRequested; }, rawDataImported: function() { return rawDataImported; }, sessionInitialized: function() { return sessionInitialized; }, sessionStarted: function() { return sessionStarted; }, sessionStopped: function() { return sessionStopped; }, stopRequested: function() { return stopRequested; }, testFrameRendered: function() { return testFrameRendered; }, viewportWidthChanged: function() { return viewportWidthChanged; } }); const _sharedconstants = __webpack_require__(7087); const _shared = __webpack_require__(9468); const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_INITIALIZED, IX2_SESSION_STARTED, IX2_SESSION_STOPPED, IX2_PREVIEW_REQUESTED, IX2_PLAYBACK_REQUESTED, IX2_STOP_REQUESTED, IX2_CLEAR_REQUESTED, IX2_EVENT_LISTENER_ADDED, IX2_TEST_FRAME_RENDERED, IX2_EVENT_STATE_CHANGED, IX2_ANIMATION_FRAME_CHANGED, IX2_PARAMETER_CHANGED, IX2_INSTANCE_ADDED, IX2_INSTANCE_STARTED, IX2_INSTANCE_REMOVED, IX2_ELEMENT_STATE_CHANGED, IX2_ACTION_LIST_PLAYBACK_CHANGED, IX2_VIEWPORT_WIDTH_CHANGED, IX2_MEDIA_QUERIES_DEFINED } = _sharedconstants.IX2EngineActionTypes; const { reifyState } = _shared.IX2VanillaUtils; const rawDataImported = (rawData)=>({ type: IX2_RAW_DATA_IMPORTED, payload: { ...reifyState(rawData) } }); const sessionInitialized = ({ hasBoundaryNodes, reducedMotion })=>({ type: IX2_SESSION_INITIALIZED, payload: { hasBoundaryNodes, reducedMotion } }); const sessionStarted = ()=>({ type: IX2_SESSION_STARTED }); const sessionStopped = ()=>({ type: IX2_SESSION_STOPPED }); const previewRequested = ({ rawData, defer })=>({ type: IX2_PREVIEW_REQUESTED, payload: { defer, rawData } }); const playbackRequested = ({ actionTypeId = _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION, actionListId, actionItemId, eventId, allowEvents, immediate, testManual, verbose, rawData })=>({ type: IX2_PLAYBACK_REQUESTED, payload: { actionTypeId, actionListId, actionItemId, testManual, eventId, allowEvents, immediate, verbose, rawData } }); const stopRequested = (actionListId)=>({ type: IX2_STOP_REQUESTED, payload: { actionListId } }); const clearRequested = ()=>({ type: IX2_CLEAR_REQUESTED }); const eventListenerAdded = (target, listenerParams)=>({ type: IX2_EVENT_LISTENER_ADDED, payload: { target, listenerParams } }); const testFrameRendered = (step = 1)=>({ type: IX2_TEST_FRAME_RENDERED, payload: { step } }); const eventStateChanged = (stateKey, newState)=>({ type: IX2_EVENT_STATE_CHANGED, payload: { stateKey, newState } }); const animationFrameChanged = (now, parameters)=>({ type: IX2_ANIMATION_FRAME_CHANGED, payload: { now, parameters } }); const parameterChanged = (key, value)=>({ type: IX2_PARAMETER_CHANGED, payload: { key, value } }); const instanceAdded = (options)=>({ type: IX2_INSTANCE_ADDED, payload: { ...options } }); const instanceStarted = (instanceId, time)=>({ type: IX2_INSTANCE_STARTED, payload: { instanceId, time } }); const instanceRemoved = (instanceId)=>({ type: IX2_INSTANCE_REMOVED, payload: { instanceId } }); const elementStateChanged = (elementId, actionTypeId, current, actionItem)=>({ type: IX2_ELEMENT_STATE_CHANGED, payload: { elementId, actionTypeId, current, actionItem } }); const actionListPlaybackChanged = ({ actionListId, isPlaying })=>({ type: IX2_ACTION_LIST_PLAYBACK_CHANGED, payload: { actionListId, isPlaying } }); const viewportWidthChanged = ({ width, mediaQueries })=>({ type: IX2_VIEWPORT_WIDTH_CHANGED, payload: { width, mediaQueries } }); const mediaQueriesDefined = ()=>({ type: IX2_MEDIA_QUERIES_DEFINED }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVuZ2luZUFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWN0aW9uVHlwZUNvbnN0cyxcbiAgSVgyRW5naW5lQWN0aW9uVHlwZXMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuaW1wb3J0IHtJWDJWYW5pbGxhVXRpbHN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbkxpc3RJZCxcbiAgQWN0aW9uSWQsXG4gIEV2ZW50SWQsXG4gIENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkLFxuICBBY3Rpb25UeXBlSWRUeXBlLFxuICBBY3Rpb25MaXN0c1R5cGUsXG4gIEV2ZW50c1R5cGUsXG4gIEV2ZW50VHlwZSxcbn0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3R5cGVzLWNvcmUnO1xuaW1wb3J0IHtCcmVha3BvaW50SUR9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL3N0eWxlL3R5cGVzJztcblxuY29uc3Qge1xuICBJWDJfUkFXX0RBVEFfSU1QT1JURUQsXG4gIElYMl9TRVNTSU9OX0lOSVRJQUxJWkVELFxuICBJWDJfU0VTU0lPTl9TVEFSVEVELFxuICBJWDJfU0VTU0lPTl9TVE9QUEVELFxuICBJWDJfUFJFVklFV19SRVFVRVNURUQsXG4gIElYMl9QTEFZQkFDS19SRVFVRVNURUQsXG4gIElYMl9TVE9QX1JFUVVFU1RFRCxcbiAgSVgyX0NMRUFSX1JFUVVFU1RFRCxcbiAgSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVELFxuICBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCxcbiAgSVgyX0VWRU5UX1NUQVRFX0NIQU5HRUQsXG4gIElYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRCxcbiAgSVgyX1BBUkFNRVRFUl9DSEFOR0VELFxuICBJWDJfSU5TVEFOQ0VfQURERUQsXG4gIElYMl9JTlNUQU5DRV9TVEFSVEVELFxuICBJWDJfSU5TVEFOQ0VfUkVNT1ZFRCxcbiAgSVgyX0VMRU1FTlRfU1RBVEVfQ0hBTkdFRCxcbiAgSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQsXG4gIElYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VELFxuICBJWDJfTUVESUFfUVVFUklFU19ERUZJTkVELFxufSA9IElYMkVuZ2luZUFjdGlvblR5cGVzO1xuXG5jb25zdCB7cmVpZnlTdGF0ZX0gPSBJWDJWYW5pbGxhVXRpbHM7XG5cbmV4cG9ydCB0eXBlIElYMlJhd0RhdGEgPSB7XG4gIGV2ZW50czogRXZlbnRzVHlwZTtcbiAgYWN0aW9uTGlzdHM6IEFjdGlvbkxpc3RzVHlwZTtcbiAgc2l0ZToge21lZGlhUXVlcmllczoge2tleTogQnJlYWtwb2ludElEOyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXJ9W119O1xufTtcblxuZXhwb3J0IHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCA9IHtcbiAgaXhEYXRhOiB7XG4gICAgZXZlbnRzOiBFdmVudHNUeXBlIHwgdW5kZWZpbmVkO1xuICAgIGFjdGlvbkxpc3RzOiBBY3Rpb25MaXN0c1R5cGUgfCB1bmRlZmluZWQ7XG4gICAgZXZlbnRUeXBlTWFwOiB7W2sgaW4gRXZlbnRUeXBlWydldmVudFR5cGVJZCddXToge1trZXk6IHN0cmluZ106IEV2ZW50VHlwZX19O1xuICAgIG1lZGlhUXVlcmllczogSVgyUmF3RGF0YVsnc2l0ZSddWydtZWRpYVF1ZXJpZXMnXTtcbiAgICBtZWRpYVF1ZXJ5S2V5czogQnJlYWtwb2ludElEW107XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmF3RGF0YUltcG9ydGVkID0gKHJhd0RhdGE6IElYMlJhd0RhdGEpID0+ICh7XG4gIHR5cGU6IElYMl9SQVdfREFUQV9JTVBPUlRFRCxcbiAgcGF5bG9hZDoge1xuICAgIC4uLnJlaWZ5U3RhdGUocmF3RGF0YSksXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZCA9IHtcbiAgaGFzQm91bmRhcnlOb2RlczogYm9vbGVhbjtcbiAgcmVkdWNlZE1vdGlvbjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXNzaW9uSW5pdGlhbGl6ZWQgPSAoe1xuICBoYXNCb3VuZGFyeU5vZGVzLFxuICByZWR1Y2VkTW90aW9uLFxufTogc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1NFU1NJT05fSU5JVElBTElaRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBoYXNCb3VuZGFyeU5vZGVzLFxuICAgIHJlZHVjZWRNb3Rpb24sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHNlc3Npb25TdGFydGVkID0gKCkgPT4gKHtcbiAgdHlwZTogSVgyX1NFU1NJT05fU1RBUlRFRCxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0b3BwZWQgPSAoKSA9PiAoe1xuICB0eXBlOiBJWDJfU0VTU0lPTl9TVE9QUEVELFxufSk7XG5cbmV4cG9ydCB0eXBlIHByZXZpZXdSZXF1ZXN0ZWRQYXlsb2FkID0ge1xuICByYXdEYXRhOiBJWDJSYXdEYXRhO1xuICBkZWZlcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2aWV3UmVxdWVzdGVkID0gKHtcbiAgcmF3RGF0YSxcbiAgZGVmZXIsXG59OiBwcmV2aWV3UmVxdWVzdGVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1BSRVZJRVdfUkVRVUVTVEVELFxuICBwYXlsb2FkOiB7XG4gICAgZGVmZXIsXG4gICAgcmF3RGF0YSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSBwbGF5YmFja1JlcXVlc3RlZFBheWxvYWQgPSB7XG4gIGFjdGlvblR5cGVJZDpcbiAgICB8IHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OXG4gICAgfCB0eXBlb2YgQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OO1xuICBhY3Rpb25MaXN0SWQ6IEFjdGlvbkxpc3RJZDtcbiAgYWN0aW9uSXRlbUlkOiBBY3Rpb25JZDtcbiAgZXZlbnRJZDogRXZlbnRJZDtcbiAgYWxsb3dFdmVudHM6IGJvb2xlYW47XG4gIGltbWVkaWF0ZTogYm9vbGVhbjtcbiAgdGVzdE1hbnVhbD86IGJvb2xlYW47XG4gIHZlcmJvc2U6IGJvb2xlYW47XG4gIHJhd0RhdGE6IElYMlJhd0RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgcGxheWJhY2tSZXF1ZXN0ZWQgPSAoe1xuICBhY3Rpb25UeXBlSWQgPSBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OLFxuICBhY3Rpb25MaXN0SWQsXG4gIGFjdGlvbkl0ZW1JZCxcbiAgZXZlbnRJZCxcbiAgYWxsb3dFdmVudHMsXG4gIGltbWVkaWF0ZSxcbiAgdGVzdE1hbnVhbCxcbiAgdmVyYm9zZSxcbiAgcmF3RGF0YSxcbn06IHBsYXliYWNrUmVxdWVzdGVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCxcbiAgcGF5bG9hZDoge1xuICAgIGFjdGlvblR5cGVJZCxcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgYWN0aW9uSXRlbUlkLFxuICAgIHRlc3RNYW51YWwsXG4gICAgZXZlbnRJZCxcbiAgICBhbGxvd0V2ZW50cyxcbiAgICBpbW1lZGlhdGUsXG4gICAgdmVyYm9zZSxcbiAgICByYXdEYXRhLFxuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIHN0b3BSZXF1ZXN0ZWRQYXlsb2FkID0ge1xuICBhY3Rpb25MaXN0SWQ6IEFjdGlvbkxpc3RJZDtcbn07XG5cbmV4cG9ydCBjb25zdCBzdG9wUmVxdWVzdGVkID0gKFxuICBhY3Rpb25MaXN0SWQ6IHN0b3BSZXF1ZXN0ZWRQYXlsb2FkWydhY3Rpb25MaXN0SWQnXVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfU1RPUF9SRVFVRVNURUQsXG4gIHBheWxvYWQ6IHtcbiAgICBhY3Rpb25MaXN0SWQsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUmVxdWVzdGVkID0gKCkgPT4gKHtcbiAgdHlwZTogSVgyX0NMRUFSX1JFUVVFU1RFRCxcbn0pO1xuXG5leHBvcnQgdHlwZSBldmVudExpc3RlbmVyQWRkZWRQYXlsb2FkID0ge1xuICB0YXJnZXQ6IGFueTtcbiAgbGlzdGVuZXJQYXJhbXM6IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBldmVudExpc3RlbmVyQWRkZWQgPSAoXG4gIHRhcmdldDogZXZlbnRMaXN0ZW5lckFkZGVkUGF5bG9hZFsndGFyZ2V0J10sXG4gIGxpc3RlbmVyUGFyYW1zOiBldmVudExpc3RlbmVyQWRkZWRQYXlsb2FkWydsaXN0ZW5lclBhcmFtcyddXG4pID0+ICh7XG4gIHR5cGU6IElYMl9FVkVOVF9MSVNURU5FUl9BRERFRCxcbiAgcGF5bG9hZDoge1xuICAgIHRhcmdldCxcbiAgICBsaXN0ZW5lclBhcmFtcyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSB0ZXN0RnJhbWVSZW5kZXJlZFBheWxvYWQgPSB7XG4gIHN0ZXA/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgdGVzdEZyYW1lUmVuZGVyZWQgPSAoXG4gIHN0ZXA6IHRlc3RGcmFtZVJlbmRlcmVkUGF5bG9hZFsnc3RlcCddID0gMVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCxcbiAgcGF5bG9hZDoge1xuICAgIHN0ZXAsXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkID0ge1xuICBzdGF0ZUtleTogYW55O1xuICBuZXdTdGF0ZTogYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IGV2ZW50U3RhdGVDaGFuZ2VkID0gKFxuICBzdGF0ZUtleTogZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkWydzdGF0ZUtleSddLFxuICBuZXdTdGF0ZTogZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkWyduZXdTdGF0ZSddXG4pID0+ICh7XG4gIHR5cGU6IElYMl9FVkVOVF9TVEFURV9DSEFOR0VELFxuICBwYXlsb2FkOiB7XG4gICAgc3RhdGVLZXksXG4gICAgbmV3U3RhdGUsXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgYW5pbWF0aW9uRnJhbWVDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgbm93OiBudW1iZXI7XG4gIHBhcmFtZXRlcnM6IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBhbmltYXRpb25GcmFtZUNoYW5nZWQgPSAoXG4gIG5vdzogYW5pbWF0aW9uRnJhbWVDaGFuZ2VkUGF5bG9hZFsnbm93J10sXG4gIHBhcmFtZXRlcnM6IGFuaW1hdGlvbkZyYW1lQ2hhbmdlZFBheWxvYWRbJ3BhcmFtZXRlcnMnXVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBub3csXG4gICAgcGFyYW1ldGVycyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgcGFyYW1ldGVyQ2hhbmdlZCA9IChcbiAga2V5OiBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCxcbiAgdmFsdWU6IG51bWJlclxuKSA9PiAoe1xuICB0eXBlOiBJWDJfUEFSQU1FVEVSX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGluc3RhbmNlQWRkZWQgPSAob3B0aW9uczogYW55KSA9PiAoe1xuICB0eXBlOiBJWDJfSU5TVEFOQ0VfQURERUQsXG4gIHBheWxvYWQ6IHtcbiAgICAuLi5vcHRpb25zLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBpbnN0YW5jZVN0YXJ0ZWQgPSAoaW5zdGFuY2VJZDogc3RyaW5nLCB0aW1lOiBudW1iZXIpID0+ICh7XG4gIHR5cGU6IElYMl9JTlNUQU5DRV9TVEFSVEVELFxuICBwYXlsb2FkOiB7XG4gICAgaW5zdGFuY2VJZCxcbiAgICB0aW1lLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBpbnN0YW5jZVJlbW92ZWQgPSAoaW5zdGFuY2VJZDogc3RyaW5nKSA9PiAoe1xuICB0eXBlOiBJWDJfSU5TVEFOQ0VfUkVNT1ZFRCxcbiAgcGF5bG9hZDoge1xuICAgIGluc3RhbmNlSWQsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGVsZW1lbnRTdGF0ZUNoYW5nZWQgPSAoXG4gIGVsZW1lbnRJZDogYW55LFxuICBhY3Rpb25UeXBlSWQ6IEFjdGlvblR5cGVJZFR5cGUsXG4gIGN1cnJlbnQ6IGFueSxcbiAgYWN0aW9uSXRlbTogYW55XG4pID0+ICh7XG4gIHR5cGU6IElYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBlbGVtZW50SWQsXG4gICAgYWN0aW9uVHlwZUlkLFxuICAgIGN1cnJlbnQsXG4gICAgYWN0aW9uSXRlbSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgYWN0aW9uTGlzdElkOiBBY3Rpb25MaXN0SWQ7XG4gIGlzUGxheWluZzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkID0gKHtcbiAgYWN0aW9uTGlzdElkLFxuICBpc1BsYXlpbmcsXG59OiBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgaXNQbGF5aW5nLFxuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIHZpZXdwb3J0V2lkdGhDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgbWVkaWFRdWVyaWVzOiBhbnk7XG59O1xuXG5leHBvcnQgY29uc3Qgdmlld3BvcnRXaWR0aENoYW5nZWQgPSAoe1xuICB3aWR0aCxcbiAgbWVkaWFRdWVyaWVzLFxufTogdmlld3BvcnRXaWR0aENoYW5nZWRQYXlsb2FkKSA9PiAoe1xuICB0eXBlOiBJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCxcbiAgcGF5bG9hZDoge1xuICAgIHdpZHRoLFxuICAgIG1lZGlhUXVlcmllcyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgbWVkaWFRdWVyaWVzRGVmaW5lZCA9ICgpID0+ICh7XG4gIHR5cGU6IElYMl9NRURJQV9RVUVSSUVTX0RFRklORUQsXG59KTtcbiJdLCJuYW1lcyI6WyJhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkIiwiYW5pbWF0aW9uRnJhbWVDaGFuZ2VkIiwiY2xlYXJSZXF1ZXN0ZWQiLCJlbGVtZW50U3RhdGVDaGFuZ2VkIiwiZXZlbnRMaXN0ZW5lckFkZGVkIiwiZXZlbnRTdGF0ZUNoYW5nZWQiLCJpbnN0YW5jZUFkZGVkIiwiaW5zdGFuY2VSZW1vdmVkIiwiaW5zdGFuY2VTdGFydGVkIiwibWVkaWFRdWVyaWVzRGVmaW5lZCIsInBhcmFtZXRlckNoYW5nZWQiLCJwbGF5YmFja1JlcXVlc3RlZCIsInByZXZpZXdSZXF1ZXN0ZWQiLCJyYXdEYXRhSW1wb3J0ZWQiLCJzZXNzaW9uSW5pdGlhbGl6ZWQiLCJzZXNzaW9uU3RhcnRlZCIsInNlc3Npb25TdG9wcGVkIiwic3RvcFJlcXVlc3RlZCIsInRlc3RGcmFtZVJlbmRlcmVkIiwidmlld3BvcnRXaWR0aENoYW5nZWQiLCJJWDJfUkFXX0RBVEFfSU1QT1JURUQiLCJJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCIsIklYMl9TRVNTSU9OX1NUQVJURUQiLCJJWDJfU0VTU0lPTl9TVE9QUEVEIiwiSVgyX1BSRVZJRVdfUkVRVUVTVEVEIiwiSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCIsIklYMl9TVE9QX1JFUVVFU1RFRCIsIklYMl9DTEVBUl9SRVFVRVNURUQiLCJJWDJfRVZFTlRfTElTVEVORVJfQURERUQiLCJJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCIsIklYMl9FVkVOVF9TVEFURV9DSEFOR0VEIiwiSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEIiwiSVgyX1BBUkFNRVRFUl9DSEFOR0VEIiwiSVgyX0lOU1RBTkNFX0FEREVEIiwiSVgyX0lOU1RBTkNFX1NUQVJURUQiLCJJWDJfSU5TVEFOQ0VfUkVNT1ZFRCIsIklYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQiLCJJWDJfQUNUSU9OX0xJU1RfUExBWUJBQ0tfQ0hBTkdFRCIsIklYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VEIiwiSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRCIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwicmVpZnlTdGF0ZSIsIklYMlZhbmlsbGFVdGlscyIsInJhd0RhdGEiLCJ0eXBlIiwicGF5bG9hZCIsImhhc0JvdW5kYXJ5Tm9kZXMiLCJyZWR1Y2VkTW90aW9uIiwiZGVmZXIiLCJhY3Rpb25UeXBlSWQiLCJBY3Rpb25UeXBlQ29uc3RzIiwiR0VORVJBTF9TVEFSVF9BQ1RJT04iLCJhY3Rpb25MaXN0SWQiLCJhY3Rpb25JdGVtSWQiLCJldmVudElkIiwiYWxsb3dFdmVudHMiLCJpbW1lZGlhdGUiLCJ0ZXN0TWFudWFsIiwidmVyYm9zZSIsInRhcmdldCIsImxpc3RlbmVyUGFyYW1zIiwic3RlcCIsInN0YXRlS2V5IiwibmV3U3RhdGUiLCJub3ciLCJwYXJhbWV0ZXJzIiwia2V5IiwidmFsdWUiLCJvcHRpb25zIiwiaW5zdGFuY2VJZCIsInRpbWUiLCJlbGVtZW50SWQiLCJjdXJyZW50IiwiYWN0aW9uSXRlbSIsImlzUGxheWluZyIsIndpZHRoIiwibWVkaWFRdWVyaWVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXFSYUEseUJBQXlCO2VBQXpCQTs7SUFoRUFDLHFCQUFxQjtlQUFyQkE7O0lBdERBQyxjQUFjO2VBQWRBOztJQWtHQUMsbUJBQW1CO2VBQW5CQTs7SUF6RkFDLGtCQUFrQjtlQUFsQkE7O0lBNkJBQyxpQkFBaUI7ZUFBakJBOztJQXNDQUMsYUFBYTtlQUFiQTs7SUFlQUMsZUFBZTtlQUFmQTs7SUFSQUMsZUFBZTtlQUFmQTs7SUE4REFDLG1CQUFtQjtlQUFuQkE7O0lBaEZBQyxnQkFBZ0I7ZUFBaEJBOztJQXZHQUMsaUJBQWlCO2VBQWpC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 }), 6011: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; // Array.includes needed for IE11 @packages/systems/ix2/shared-utils/quick-effects Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { actions: function() { return _IX2EngineActions; }, destroy: function() { return destroy; }, init: function() { return init; }, setEnv: function() { return setEnv; }, store: function() { return store; } }); const _redux = __webpack_require__(9516); const _IX2Reducer = /*#__PURE__*/ _interop_require_default(__webpack_require__(7243)); const _IX2VanillaEngine = __webpack_require__(1970); const _IX2EngineActions = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(3946)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const store = (0, _redux.createStore)(_IX2Reducer.default); function setEnv(env) { if (env()) { (0, _IX2VanillaEngine.observeRequests)(store); } } function init(rawData) { destroy(); (0, _IX2VanillaEngine.startEngine)({ store, rawData, allowEvents: true }); } function destroy() { (0, _IX2VanillaEngine.stopEngine)(store); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEFycmF5LmluY2x1ZGVzIG5lZWRlZCBmb3IgSUUxMSBAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLXV0aWxzL3F1aWNrLWVmZmVjdHNcbmltcG9ydCAnY29yZS1qcy9mZWF0dXJlcy9hcnJheS9pbmNsdWRlcyc7XG5cbmltcG9ydCB7Y3JlYXRlU3RvcmV9IGZyb20gJ3JlZHV4JztcbmltcG9ydCByZWR1Y2VyIGZyb20gJy4vcmVkdWNlcnMvSVgyUmVkdWNlcic7XG5pbXBvcnQge1xuICBzdGFydEVuZ2luZSxcbiAgc3RvcEVuZ2luZSxcbiAgb2JzZXJ2ZVJlcXVlc3RzLFxufSBmcm9tICcuL2xvZ2ljL0lYMlZhbmlsbGFFbmdpbmUnO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICcuL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5pbXBvcnQge1xuICB0eXBlIElYMlJhd0RhdGEsXG4gIHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCxcbn0gZnJvbSAnLi9hY3Rpb25zL0lYMkVuZ2luZUFjdGlvbnMnO1xuXG5jb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIpO1xuXG5mdW5jdGlvbiBzZXRFbnYoZW52OiAoYXJnMT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpID0+IGJvb2xlYW4pIHtcbiAgaWYgKGVudigpKSB7XG4gICAgb2JzZXJ2ZVJlcXVlc3RzKHN0b3JlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0KHJhd0RhdGE6IElYMlJhd0RhdGEpIHtcbiAgZGVzdHJveSgpO1xuXG4gIHN0YXJ0RW5naW5lKHtzdG9yZSwgcmF3RGF0YSwgYWxsb3dFdmVudHM6IHRydWV9KTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgc3RvcEVuZ2luZShzdG9yZSk7XG59XG5cbmV4cG9ydCB7XG4gIHNldEVudixcbiAgaW5pdCxcbiAgZGVzdHJveSxcbiAgc3RvcmUsXG4gIGFjdGlvbnMsXG4gIHR5cGUgSVgyUmF3RGF0YSxcbiAgdHlwZSByYXdEYXRhSW1wb3J0ZWRQYXlsb2FkLFxufTtcbiJdLCJuYW1lcyI6WyJhY3Rpb25zIiwiZGVzdHJveSIsImluaXQiLCJzZXRFbnYiLCJzdG9yZSIsImNyZWF0ZVN0b3JlIiwicmVkdWNlciIsImVudiIsIm9ic2VydmVSZXF1ZXN0cyIsInJhd0RhdGEiLCJzdGFydEVuZ2luZSIsImFsbG93RXZlbnRzIiwic3RvcEVuZ2luZSJdLCJtYXBwaW5ncyI6IkFBQUEsa0ZBQWtGOzs7Ozs7Ozs7Ozs7SUF1Q2hGQSxPQUFPO2VBQVBBOztJQUZBQyxPQUFPO2VBQVBBOztJQURBQyxJQUFJO2VBQUpBOztJQURBQyxNQUFNO2VBQU5BOztJQUdBQyxLQUFLO2VBQUxBOzs7dUJBbkN3QjttRUFDTjtrQ0FLYjswRUFDa0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTXpCLE1BQU1BLFFBQVFDLElBQUFBLGtCQUFXLEVBQUNDLG1CQUFPO0FBRWpDLFNBQVNILE9BQU9JLEdBQWtEO0lBQ2hFLElBQUlBLE9BQU87UUFDVEMsSUFBQUEsaUNBQWUsRUFBQ0o7SUFDbEI7QUFDRjtBQUVBLFNBQVNGLEtBQUtPLE9BQW1CO0lBQy9CUjtJQUVBUyxJQUFBQSw2QkFBVyxFQUFDO1FBQUNOO1FBQU9LO1FBQVNFLGFBQWE7SUFBSTtBQUNoRDtBQUVBLFNBQVNWO0lBQ1BXLElBQUFBLDRCQUFVLEVBQUNSO0FBQ2IifQ== }), 5012: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { elementContains: function() { return elementContains; }, getChildElements: function() { return getChildElements; }, getClosestElement: function() { return getClosestElement; }, getProperty: function() { return getProperty; }, getQuerySelector: function() { return getQuerySelector; }, getRefType: function() { return getRefType; }, getSiblingElements: function() { return getSiblingElements; }, getStyle: function() { return getStyle; }, getValidDocument: function() { return getValidDocument; }, isSiblingNode: function() { return isSiblingNode; }, matchSelector: function() { return matchSelector; }, queryDocument: function() { return queryDocument; }, setStyle: function() { return setStyle; } }); const _shared = __webpack_require__(9468); const _sharedconstants = __webpack_require__(7087); const { ELEMENT_MATCHES } = _shared.IX2BrowserSupport; const { IX2_ID_DELIMITER, HTML_ELEMENT, PLAIN_OBJECT, WF_PAGE } = _sharedconstants.IX2EngineConstants; function setStyle(element, prop, value) { // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'. element.style[prop] = value; } function getStyle(element, prop) { if (prop.startsWith('--')) { return window.getComputedStyle(document.documentElement).getPropertyValue(prop); } if (element.style instanceof CSSStyleDeclaration) { // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'. return element.style[prop]; } } function getProperty(element, prop) { // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'HTMLElement'. return element[prop]; } function matchSelector(selector) { // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'. return (element)=>element[ELEMENT_MATCHES](selector); } function getQuerySelector({ id, selector }) { if (id) { let nodeId = id; if (id.indexOf(IX2_ID_DELIMITER) !== -1) { const pair = id.split(IX2_ID_DELIMITER); const pageId = pair[0]; // @ts-expect-error - TS2322 - Type 'string | undefined' is not assignable to type 'string'. nodeId = pair[1]; // Short circuit query if we're on the wrong page if (pageId !== document.documentElement.getAttribute(WF_PAGE)) { return null; } } return `[data-w-id="${nodeId}"], [data-w-id^="${nodeId}_instance"]`; } return selector; } function getValidDocument(pageId) { if (pageId == null || pageId === document.documentElement.getAttribute(WF_PAGE)) { return document; } return null; } function queryDocument(baseSelector, descendantSelector) { return Array.prototype.slice.call(document.querySelectorAll(descendantSelector ? baseSelector + ' ' + descendantSelector : baseSelector)); } function elementContains(parent, child) { return parent.contains(child); } function isSiblingNode(a, b) { return a !== b && a.parentNode === b.parentNode; } function getChildElements(// @ts-expect-error - TS2315 - Type 'NodeList' is not generic. sourceElements) { const childElements = []; for(let i = 0, { length } = sourceElements || []; i < length; i++){ const { children } = sourceElements[i]; const { length: childCount } = children; if (!childCount) { continue; } for(let j = 0; j < childCount; j++){ childElements.push(children[j]); } } return childElements; } function getSiblingElements(sourceElements = []) { const elements = []; const parentCache = []; for(let i = 0, { length } = sourceElements; i < length; i++){ // @ts-expect-error - TS2339 - Property 'parentNode' does not exist on type 'undefined'. const { parentNode } = sourceElements[i]; if (!parentNode || !parentNode.children || !parentNode.children.length) { continue; } if (parentCache.indexOf(parentNode) !== -1) { continue; } parentCache.push(parentNode); let el = parentNode.firstElementChild; while(el != null){ // @ts-expect-error - TS2345 - Argument of type 'any' is not assignable to parameter of type 'never'. if (sourceElements.indexOf(el) === -1) { elements.push(el); } el = el.nextElementSibling; } } return elements; } const getClosestElement = Element.prototype.closest ? (element, selector)=>{ if (!document.documentElement.contains(element)) { return null; } return element.closest(selector); } : (element, selector)=>{ if (!document.documentElement.contains(element)) { return null; } let el = element; do { // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'. | TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'. if (el[ELEMENT_MATCHES] && el[ELEMENT_MATCHES](selector)) { return el; } // @ts-expect-error - TS2322 - Type 'ParentNode | null' is not assignable to type 'HTMLElement'. el = el.parentNode; }while (el != null); return null; }; function getRefType(ref) { if (ref != null && typeof ref == 'object') { return ref instanceof Element ? HTML_ELEMENT : PLAIN_OBJECT; } return null; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkJyb3dzZXJBcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5pbXBvcnQge0lYMkJyb3dzZXJTdXBwb3J0fSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcbmltcG9ydCB7SVgyRW5naW5lQ29uc3RhbnRzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5jb25zdCB7RUxFTUVOVF9NQVRDSEVTfSA9IElYMkJyb3dzZXJTdXBwb3J0O1xuY29uc3Qge0lYMl9JRF9ERUxJTUlURVIsIEhUTUxfRUxFTUVOVCwgUExBSU5fT0JKRUNULCBXRl9QQUdFfSA9XG4gIElYMkVuZ2luZUNvbnN0YW50cztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFN0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAxNSAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGluZGV4IGV4cHJlc3Npb24gaXMgbm90IG9mIHR5cGUgJ251bWJlcicuXG4gIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wOiBzdHJpbmcpIHtcbiAgaWYgKHByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgIHJldHVybiB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQuc3R5bGUgaW5zdGFuY2VvZiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAxNSAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGluZGV4IGV4cHJlc3Npb24gaXMgbm90IG9mIHR5cGUgJ251bWJlcicuXG4gICAgcmV0dXJuIGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wOiBzdHJpbmcpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnc3RyaW5nJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ0hUTUxFbGVtZW50Jy5cbiAgcmV0dXJuIGVsZW1lbnRbcHJvcF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFNlbGVjdG9yKFxuICBzZWxlY3Rvcjogc3RyaW5nXG4pOiAoYXJnMTogSFRNTEVsZW1lbnQpID0+IGJvb2xlYW4ge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdhbnknIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAnSFRNTEVsZW1lbnQnLlxuICByZXR1cm4gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBlbGVtZW50W0VMRU1FTlRfTUFUQ0hFU10oc2VsZWN0b3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlTZWxlY3Rvcih7XG4gIGlkLFxuICBzZWxlY3Rvcixcbn06IHtcbiAgaWQ6IG51bGwgfCB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIHNlbGVjdG9yOiBzdHJpbmc7XG59KSB7XG4gIGlmIChpZCkge1xuICAgIGxldCBub2RlSWQgPSBpZDtcbiAgICBpZiAoaWQuaW5kZXhPZihJWDJfSURfREVMSU1JVEVSKSAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IHBhaXIgPSBpZC5zcGxpdChJWDJfSURfREVMSU1JVEVSKTtcbiAgICAgIGNvbnN0IHBhZ2VJZCA9IHBhaXJbMF07XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzIyIC0gVHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdzdHJpbmcnLlxuICAgICAgbm9kZUlkID0gcGFpclsxXTtcbiAgICAgIC8vIFNob3J0IGNpcmN1aXQgcXVlcnkgaWYgd2UncmUgb24gdGhlIHdyb25nIHBhZ2VcbiAgICAgIGlmIChwYWdlSWQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoV0ZfUEFHRSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgW2RhdGEtdy1pZD1cIiR7bm9kZUlkfVwiXSwgW2RhdGEtdy1pZF49XCIke25vZGVJZH1faW5zdGFuY2VcIl1gO1xuICB9XG4gIHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkRG9jdW1lbnQocGFnZUlkPzogbnVsbCB8IHN0cmluZykge1xuICBpZiAoXG4gICAgcGFnZUlkID09IG51bGwgfHxcbiAgICBwYWdlSWQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoV0ZfUEFHRSlcbiAgKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlEb2N1bWVudChcbiAgYmFzZVNlbGVjdG9yOiBzdHJpbmcsXG4gIGRlc2NlbmRhbnRTZWxlY3Rvcj86IG51bGwgfCBzdHJpbmdcbikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGRlc2NlbmRhbnRTZWxlY3RvclxuICAgICAgICA/IGJhc2VTZWxlY3RvciArICcgJyArIGRlc2NlbmRhbnRTZWxlY3RvclxuICAgICAgICA6IGJhc2VTZWxlY3RvclxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRDb250YWlucyhcbiAgcGFyZW50OiBIVE1MRWxlbWVudCxcbiAgY2hpbGQ6IEhUTUxFbGVtZW50XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcmVudC5jb250YWlucyhjaGlsZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpYmxpbmdOb2RlKGE6IEhUTUxFbGVtZW50LCBiOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gYSAhPT0gYiAmJiBhLnBhcmVudE5vZGUgPT09IGIucGFyZW50Tm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkRWxlbWVudHMoXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMTUgLSBUeXBlICdOb2RlTGlzdCcgaXMgbm90IGdlbmVyaWMuXG4gIHNvdXJjZUVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD4gfCBOb2RlTGlzdDxIVE1MRWxlbWVudD5cbikge1xuICBjb25zdCBjaGlsZEVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudCB8IGFueT4gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwge2xlbmd0aH0gPSBzb3VyY2VFbGVtZW50cyB8fCBbXTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge2NoaWxkcmVufSA9IHNvdXJjZUVsZW1lbnRzW2ldO1xuICAgIGNvbnN0IHtsZW5ndGg6IGNoaWxkQ291bnR9ID0gY2hpbGRyZW47XG4gICAgaWYgKCFjaGlsZENvdW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZENvdW50OyBqKyspIHtcbiAgICAgIGNoaWxkRWxlbWVudHMucHVzaChjaGlsZHJlbltqXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2libGluZ0VsZW1lbnRzKHNvdXJjZUVsZW1lbnRzID0gW10pIHtcbiAgY29uc3QgZWxlbWVudHM6IEFycmF5PGFueT4gPSBbXTtcbiAgY29uc3QgcGFyZW50Q2FjaGU6IEFycmF5PGFueT4gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDAsIHtsZW5ndGh9ID0gc291cmNlRWxlbWVudHM7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAncGFyZW50Tm9kZScgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAndW5kZWZpbmVkJy5cbiAgICBjb25zdCB7cGFyZW50Tm9kZX0gPSBzb3VyY2VFbGVtZW50c1tpXTtcbiAgICBpZiAoIXBhcmVudE5vZGUgfHwgIXBhcmVudE5vZGUuY2hpbGRyZW4gfHwgIXBhcmVudE5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHBhcmVudENhY2hlLmluZGV4T2YocGFyZW50Tm9kZSkgIT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGFyZW50Q2FjaGUucHVzaChwYXJlbnROb2RlKTtcbiAgICBsZXQgZWwgPSBwYXJlbnROb2RlLmZpcnN0RWxlbWVudENoaWxkO1xuICAgIHdoaWxlIChlbCAhPSBudWxsKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnYW55JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInLlxuICAgICAgaWYgKHNvdXJjZUVsZW1lbnRzLmluZGV4T2YoZWwpID09PSAtMSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKGVsKTtcbiAgICAgIH1cbiAgICAgIGVsID0gZWwubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI3NzQgLSBUaGlzIGNvbmRpdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZSBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBkZWZpbmVkLiBEaWQgeW91IG1lYW4gdG8gY2FsbCBpdCBpbnN0ZWFkP1xuZXhwb3J0IGNvbnN0IGdldENsb3Nlc3RFbGVtZW50ID0gRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdFxuICA/IChlbGVtZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICB9XG4gIDogKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzZWxlY3Rvcjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbGV0IGVsID0gZWxlbWVudDtcblxuICAgICAgZG8ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdhbnknIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAnSFRNTEVsZW1lbnQnLiB8IFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnYW55JyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ0hUTUxFbGVtZW50Jy5cbiAgICAgICAgaWYgKGVsW0VMRU1FTlRfTUFUQ0hFU10gJiYgZWxbRUxFTUVOVF9NQVRDSEVTXShzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMyMiAtIFR5cGUgJ1BhcmVudE5vZGUgfCBudWxsJyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdIVE1MRWxlbWVudCcuXG4gICAgICAgIGVsID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIH0gd2hpbGUgKGVsICE9IG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZlR5cGUocmVmOiBhbnkpIHtcbiAgaWYgKHJlZiAhPSBudWxsICYmIHR5cGVvZiByZWYgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gcmVmIGluc3RhbmNlb2YgRWxlbWVudCA/IEhUTUxfRUxFTUVOVCA6IFBMQUlOX09CSkVDVDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdLCJuYW1lcyI6WyJlbGVtZW50Q29udGFpbnMiLCJnZXRDaGlsZEVsZW1lbnRzIiwiZ2V0Q2xvc2VzdEVsZW1lbnQiLCJnZXRQcm9wZXJ0eSIsImdldFF1ZXJ5U2VsZWN0b3IiLCJnZXRSZWZUeXBlIiwiZ2V0U2libGluZ0VsZW1lbnRzIiwiZ2V0U3R5bGUiLCJnZXRWYWxpZERvY3VtZW50IiwiaXNTaWJsaW5nTm9kZSIsIm1hdGNoU2VsZWN0b3IiLCJxdWVyeURvY3VtZW50Iiwic2V0U3R5bGUiLCJFTEVNRU5UX01BVENIRVMiLCJJWDJCcm93c2VyU3VwcG9ydCIsIklYMl9JRF9ERUxJTUlURVIiLCJIVE1MX0VMRU1FTlQiLCJQTEFJTl9PQkpFQ1QiLCJXRl9QQUdFIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiZWxlbWVudCIsInByb3AiLCJ2YWx1ZSIsInN0eWxlIiwic3RhcnRzV2l0aCIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJDU1NTdHlsZURlY2xhcmF0aW9uIiwic2VsZWN0b3IiLCJpZCIsIm5vZGVJZCIsImluZGV4T2YiLCJwYWlyIiwic3BsaXQiLCJwYWdlSWQiLCJnZXRBdHRyaWJ1dGUiLCJiYXNlU2VsZWN0b3IiLCJkZXNjZW5kYW50U2VsZWN0b3IiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJwYXJlbnQiLCJjaGlsZCIsImNvbnRhaW5zIiwiYSIsImIiLCJwYXJlbnROb2RlIiwic291cmNlRWxlbWVudHMiLCJjaGlsZEVsZW1lbnRzIiwiaSIsImxlbmd0aCIsImNoaWxkcmVuIiwiY2hpbGRDb3VudCIsImoiLCJwdXNoIiwiZWxlbWVudHMiLCJwYXJlbnRDYWNoZSIsImVsIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJFbGVtZW50IiwiY2xvc2VzdCIsInJlZiJdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCOzs7Ozs7Ozs7OztJQW9GTkEsZUFBZTtlQUFmQTs7SUFXQUMsZ0JBQWdCO2VBQWhCQTs7SUE2Q0hDLGlCQUFpQjtlQUFqQkE7O0lBbkhHQyxXQUFXO2VBQVhBOztJQVlBQyxnQkFBZ0I7ZUFBaEJBOztJQWlJQUMsVUFBVTtlQUFWQTs7SUFwREFDLGtCQUFrQjtlQUFsQkE7O0lBdEdBQyxRQUFRO2VBQVJBOztJQWlEQUMsZ0JBQWdCO2VBQWhCQTs7SUE4QkFDLGFBQWE7ZUFBYkE7O0lBN0RBQyxhQUFhO2VBQWJBOztJQXlDQUMsYUFBYTtlQUFiQTs7SUFoRUFDLFFBQVE7ZUFBUkE7Ozt3QkFOZ0I7aUNBQ0M7QUFDakMsTUFBTSxFQUFDQyxlQUFlLEVBQUMsR0FBR0MseUJBQWlCO0FBQzNDLE1BQU0sRUFBQ0MsZ0JBQWdCLEVBQUVDLFlBQVksRUFBRUMsWUFBWSxFQUFFQyxPQUFPLEVBQUMsR0FDM0RDLG1DQUFrQjtBQUViLFNBQVNQLFNBQVNRLE9BQW9CLEVBQUVDLElBQVksRUFBRUMsS0FBYTtJQUN4RSxxSEFBcUg7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 }), 1970: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { observeRequests: function() { return observeRequests; }, startActionGroup: function() { return startActionGroup; }, startEngine: function() { return startEngine; }, stopActionGroup: function() { return stopActionGroup; }, stopAllActionGroups: function() { return stopAllActionGroups; }, stopEngine: function() { return stopEngine; } }); const _find = /*#__PURE__*/ _interop_require_default(__webpack_require__(9777)); const _get = /*#__PURE__*/ _interop_require_default(__webpack_require__(4738)); const _size = /*#__PURE__*/ _interop_require_default(__webpack_require__(4659)); const _omitBy = /*#__PURE__*/ _interop_require_default(__webpack_require__(3452)); const _isEmpty = /*#__PURE__*/ _interop_require_default(__webpack_require__(6633)); const _mapValues = /*#__PURE__*/ _interop_require_default(__webpack_require__(3729)); const _forEach = /*#__PURE__*/ _interop_require_default(__webpack_require__(2397)); const _throttle = /*#__PURE__*/ _interop_require_default(__webpack_require__(5082)); const _sharedconstants = __webpack_require__(7087); const _shared = __webpack_require__(9468); const _IX2EngineActions = __webpack_require__(3946); const _IX2BrowserApi = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(5012)); const _IX2VanillaEvents = /*#__PURE__*/ _interop_require_default(__webpack_require__(8955)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const QuickEffectsIdList = Object.keys(_sharedconstants.QuickEffectIds); const isQuickEffect = (actionTypeId)=>QuickEffectsIdList.includes(actionTypeId); const { COLON_DELIMITER, BOUNDARY_SELECTOR, HTML_ELEMENT, RENDER_GENERAL, W_MOD_IX } = _sharedconstants.IX2EngineConstants; const { getAffectedElements, getElementId, getDestinationValues, observeStore, getInstanceId, renderHTMLElement, clearAllStyles, getMaxDurationItemIndex, getComputedStyle, getInstanceOrigin, reduceListToGroup, shouldNamespaceEventParameter, getNamespacedParameterId, shouldAllowMediaQuery, cleanupHTMLElement, clearObjectCache, stringifyTarget, mediaQueriesEqual, shallowEqual } = _shared.IX2VanillaUtils; const { isPluginType, createPluginInstance, getPluginDuration } = _shared.IX2VanillaPlugins; const ua = navigator.userAgent; const IS_MOBILE_SAFARI = ua.match(/iPad/i) || ua.match(/iPhone/); // Keep throttled events at ~80fps to reduce reflows while maintaining render accuracy const THROTTLED_EVENT_WAIT = 12; function observeRequests(store) { observeStore({ store, select: ({ ixRequest })=>ixRequest.preview, onChange: handlePreviewRequest }); observeStore({ store, select: ({ ixRequest })=>ixRequest.playback, onChange: handlePlaybackRequest }); observeStore({ store, select: ({ ixRequest })=>ixRequest.stop, onChange: handleStopRequest }); observeStore({ store, select: ({ ixRequest })=>ixRequest.clear, onChange: handleClearRequest }); } function observeMediaQueryChange(store) { observeStore({ store, select: ({ ixSession })=>ixSession.mediaQueryKey, onChange: ()=>{ stopEngine(store); clearAllStyles({ store, elementApi: _IX2BrowserApi }); startEngine({ store, allowEvents: true }); dispatchPageUpdateEvent(); } }); } function observeOneRenderTick(store, onTick) { const unsubscribe = observeStore({ store, select: ({ ixSession })=>ixSession.tick, // @ts-expect-error - TS7006 - Parameter 'tick' implicitly has an 'any' type. onChange: (tick)=>{ onTick(tick); unsubscribe(); } }); } function handlePreviewRequest({ rawData, defer }, store) { const start = ()=>{ startEngine({ store, rawData, allowEvents: true }); dispatchPageUpdateEvent(); }; defer ? setTimeout(start, 0) : start(); } function dispatchPageUpdateEvent() { document.dispatchEvent(new CustomEvent('IX2_PAGE_UPDATE')); } function handlePlaybackRequest(playback, store) { const { actionTypeId, actionListId, actionItemId, eventId, allowEvents, immediate, testManual, verbose = true } = playback; let { rawData } = playback; if (actionListId && actionItemId && rawData && immediate) { const actionList = rawData.actionLists[actionListId]; if (actionList) { rawData = reduceListToGroup({ actionList, actionItemId, rawData }); } } startEngine({ store, rawData, allowEvents, testManual }); if (actionListId && actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION || isQuickEffect(actionTypeId)) { // @ts-expect-error - TS2345 - Argument of type '{ store: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }'. stopActionGroup({ store, actionListId }); renderInitialGroup({ store, actionListId, eventId }); // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; actionListId: any; immediate: any; verbose: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'. const started = startActionGroup({ store, eventId, actionListId, immediate, verbose }); if (verbose && started) { store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({ actionListId, isPlaying: !immediate })); } } } function handleStopRequest({ actionListId }, store) { if (actionListId) { // @ts-expect-error - TS2345 - Argument of type '{ store: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }'. stopActionGroup({ store, actionListId }); } else { stopAllActionGroups({ store }); } stopEngine(store); } function handleClearRequest(state, store) { stopEngine(store); clearAllStyles({ store, elementApi: _IX2BrowserApi }); } function startEngine({ store, rawData, allowEvents, testManual }) { const { ixSession } = store.getState(); if (rawData) { store.dispatch((0, _IX2EngineActions.rawDataImported)(rawData)); } if (!ixSession.active) { store.dispatch((0, _IX2EngineActions.sessionInitialized)({ hasBoundaryNodes: Boolean(document.querySelector(BOUNDARY_SELECTOR)), reducedMotion: document.body.hasAttribute('data-wf-ix-vacation') && window.matchMedia('(prefers-reduced-motion)').matches })); if (allowEvents) { bindEvents(store); addDocumentClass(); if (store.getState().ixSession.hasDefinedMediaQueries) { observeMediaQueryChange(store); } } store.dispatch((0, _IX2EngineActions.sessionStarted)()); startRenderLoop(store, testManual); } } function addDocumentClass() { const { documentElement } = document; if (documentElement.className.indexOf(W_MOD_IX) === -1) { documentElement.className += ` ${W_MOD_IX}`; } } function startRenderLoop(store, testManual) { const handleFrame = (now)=>{ const { ixSession, ixParameters } = store.getState(); if (ixSession.active) { store.dispatch((0, _IX2EngineActions.animationFrameChanged)(now, ixParameters)); if (testManual) { observeOneRenderTick(store, handleFrame); } else { requestAnimationFrame(handleFrame); } } }; handleFrame(window.performance.now()); } function stopEngine(store) { const { ixSession } = store.getState(); if (ixSession.active) { const { eventListeners } = ixSession; eventListeners.forEach(clearEventListener); clearObjectCache(); store.dispatch((0, _IX2EngineActions.sessionStopped)()); } } // @ts-expect-error - TS7031 - Binding element 'target' implicitly has an 'any' type. | TS7031 - Binding element 'listenerParams' implicitly has an 'any' type. function clearEventListener({ target, listenerParams }) { // eslint-disable-next-line prefer-spread target.removeEventListener.apply(target, listenerParams); } function createGroupInstances({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. store, // @ts-expect-error - TS7031 - Binding element 'eventStateKey' implicitly has an 'any' type. eventStateKey, // @ts-expect-error - TS7031 - Binding element 'eventTarget' implicitly has an 'any' type. eventTarget, // @ts-expect-error - TS7031 - Binding element 'eventId' implicitly has an 'any' type. eventId, // @ts-expect-error - TS7031 - Binding element 'eventConfig' implicitly has an 'any' type. eventConfig, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type. actionListId, // @ts-expect-error - TS7031 - Binding element 'parameterGroup' implicitly has an 'any' type. parameterGroup, // @ts-expect-error - TS7031 - Binding element 'smoothing' implicitly has an 'any' type. smoothing, // @ts-expect-error - TS7031 - Binding element 'restingValue' implicitly has an 'any' type. restingValue }) { const { ixData, ixSession } = store.getState(); const { events } = ixData; const event = events[eventId]; const { eventTypeId } = event; const targetCache = {}; const instanceActionGroups = {}; const instanceConfigs = []; const { continuousActionGroups } = parameterGroup; let { id: parameterId } = parameterGroup; if (shouldNamespaceEventParameter(eventTypeId, eventConfig)) { parameterId = getNamespacedParameterId(eventStateKey, parameterId); } // Limit affected elements when event target is within a boundary node const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null; // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type. continuousActionGroups.forEach((actionGroup)=>{ const { keyframe, actionItems } = actionGroup; // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. actionItems.forEach((actionItem)=>{ const { actionTypeId } = actionItem; const { target } = actionItem.config; if (!target) { return; } const elementRoot = target.boundaryMode ? eventElementRoot : null; const key = stringifyTarget(target) + COLON_DELIMITER + actionTypeId; instanceActionGroups[key] = appendActionItem(instanceActionGroups[key], keyframe, actionItem); if (!targetCache[key]) { targetCache[key] = true; const { config } = actionItem; getAffectedElements({ config, event, eventTarget, elementRoot, elementApi: _IX2BrowserApi }).forEach((element)=>{ instanceConfigs.push({ element, key }); }); } }); }); instanceConfigs.forEach(({ element, key })=>{ const actionGroups = instanceActionGroups[key]; const actionItem = (0, _get.default)(actionGroups, `[0].actionItems[0]`, {}); const { actionTypeId } = actionItem; const shouldUsePlugin = // If it's targeted by class, don't query the element by pluginElementId actionTypeId === _sharedconstants.ActionTypeConsts.PLUGIN_RIVE ? (actionItem.config?.target?.selectorGuids || []).length === 0 : isPluginType(actionTypeId); const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null; const destination = getDestinationValues({ element, actionItem, elementApi: _IX2BrowserApi }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error pluginInstance); createInstance({ store, element, eventId, actionListId, actionItem, destination, continuous: true, parameterId, actionGroups, smoothing, restingValue, pluginInstance }); }); } function appendActionItem(actionGroups = [], keyframe, actionItem) { const newActionGroups = [ ...actionGroups ]; let groupIndex; newActionGroups.some((group, index)=>{ // @ts-expect-error - TS2339 - Property 'keyframe' does not exist on type 'never'. if (group.keyframe === keyframe) { groupIndex = index; return true; } return false; }); if (groupIndex == null) { groupIndex = newActionGroups.length; // @ts-expect-error - TS2345 - Argument of type '{ keyframe: any; actionItems: never[]; }' is not assignable to parameter of type 'never'. newActionGroups.push({ keyframe, actionItems: [] }); } // @ts-expect-error - TS2339 - Property 'actionItems' does not exist on type 'never'. newActionGroups[groupIndex].actionItems.push(actionItem); return newActionGroups; } function bindEvents(store) { const { ixData } = store.getState(); const { eventTypeMap } = ixData; updateViewportWidth(store); (0, _forEach.default)(eventTypeMap, (events, key)=>{ // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ SLIDER_ACTIVE: { handler: (options: any, state: any) => any; types: string; }; SLIDER_INACTIVE: { handler: (options: any, state: any) => any; types: string; }; DROPDOWN_OPEN: { handler: (options: any, state: any) => any; types: string; }; ... 21 more ...; PAGE_START: { ...; }; }'. const logic = _IX2VanillaEvents.default[key]; if (!logic) { console.warn(`IX2 event type not configured: ${key}`); return; } bindEventType({ // @ts-expect-error - TS7031 - Binding element 'logic' implicitly has an 'any' type. logic, store, events }); }); const { ixSession } = store.getState(); if (ixSession.eventListeners.length) { bindResizeEvents(store); } } const WINDOW_RESIZE_EVENTS = [ 'resize', 'orientationchange' ]; function bindResizeEvents(store) { const handleResize = ()=>{ updateViewportWidth(store); }; WINDOW_RESIZE_EVENTS.forEach((type)=>{ window.addEventListener(type, handleResize); store.dispatch((0, _IX2EngineActions.eventListenerAdded)(window, [ type, handleResize ])); }); handleResize(); } function updateViewportWidth(store) { const { ixSession, ixData } = store.getState(); const width = window.innerWidth; if (width !== ixSession.viewportWidth) { const { mediaQueries } = ixData; store.dispatch((0, _IX2EngineActions.viewportWidthChanged)({ width, mediaQueries })); } } const mapFoundValues = (object, iteratee)=>(0, _omitBy.default)((0, _mapValues.default)(object, iteratee), _isEmpty.default); const forEachEventTarget = (eventTargets, eventCallback)=>{ (0, _forEach.default)(eventTargets, (elements, eventId)=>{ // @ts-expect-error - TS7006 - Parameter 'element' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type. elements.forEach((element, index)=>{ const eventStateKey = eventId + COLON_DELIMITER + index; eventCallback(element, eventId, eventStateKey); }); }); }; const getAffectedForEvent = (event)=>{ const config = { target: event.target, targets: event.targets }; return getAffectedElements({ config, elementApi: _IX2BrowserApi }); }; // @ts-expect-error - TS7031 - Binding element 'logic' implicitly has an 'any' type. | TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'events' implicitly has an 'any' type. function bindEventType({ logic, store, events }) { injectBehaviorCSSFixes(events); const { types: eventTypes, handler: eventHandler } = logic; const { ixData } = store.getState(); const { actionLists } = ixData; const eventTargets = mapFoundValues(events, getAffectedForEvent); if (!(0, _size.default)(eventTargets)) { return; } (0, _forEach.default)(eventTargets, (elements, key)=>{ const event = events[key]; const { action: eventAction, id: eventId, mediaQueries = ixData.mediaQueryKeys } = event; const { actionListId } = eventAction.config; if (!mediaQueriesEqual(mediaQueries, ixData.mediaQueryKeys)) { store.dispatch((0, _IX2EngineActions.mediaQueriesDefined)()); } if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_CONTINUOUS_ACTION) { const configs = Array.isArray(event.config) ? event.config : [ event.config ]; // @ts-expect-error - TS7006 - Parameter 'eventConfig' implicitly has an 'any' type. configs.forEach((eventConfig)=>{ const { continuousParameterGroupId } = eventConfig; const paramGroups = (0, _get.default)(actionLists, `${actionListId}.continuousParameterGroups`, []); const parameterGroup = (0, _find.default)(paramGroups, ({ id })=>id === continuousParameterGroupId); const smoothing = (eventConfig.smoothing || 0) / 100; const restingValue = (eventConfig.restingState || 0) / 100; if (!parameterGroup) { return; } elements.forEach((eventTarget, index)=>{ const eventStateKey = eventId + COLON_DELIMITER + index; createGroupInstances({ store, eventStateKey, eventTarget, eventId, eventConfig, actionListId, parameterGroup, smoothing, restingValue }); }); }); } if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION || isQuickEffect(eventAction.actionTypeId)) { renderInitialGroup({ store, actionListId, eventId }); } }); const handleEvent = (nativeEvent)=>{ const { ixSession } = store.getState(); forEachEventTarget(eventTargets, (element, eventId, eventStateKey)=>{ const event = events[eventId]; const oldState = ixSession.eventState[eventStateKey]; const { action: eventAction, mediaQueries = ixData.mediaQueryKeys } = event; // Bypass event handler if current media query is not listed in event config if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) { return; } const handleEventWithConfig = (eventConfig = {})=>{ const newState = eventHandler({ store, element, event, eventConfig, nativeEvent, eventStateKey }, oldState); if (!shallowEqual(newState, oldState)) { store.dispatch((0, _IX2EngineActions.eventStateChanged)(eventStateKey, newState)); } }; if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_CONTINUOUS_ACTION) { const configs = Array.isArray(event.config) ? event.config : [ event.config ]; configs.forEach(handleEventWithConfig); } else { handleEventWithConfig(); } }); }; const handleEventThrottled = (0, _throttle.default)(handleEvent, THROTTLED_EVENT_WAIT); const addListeners = ({ target = document, // @ts-expect-error - TS7031 - Binding element 'types' implicitly has an 'any' type. types, // @ts-expect-error - TS7031 - Binding element 'shouldThrottle' implicitly has an 'any' type. throttle: shouldThrottle })=>{ types.split(' ').filter(Boolean)// @ts-expect-error - TS7006 - Parameter 'type' implicitly has an 'any' type. .forEach((type)=>{ const handlerFunc = shouldThrottle ? handleEventThrottled : handleEvent; target.addEventListener(type, handlerFunc); store.dispatch((0, _IX2EngineActions.eventListenerAdded)(target, [ type, handlerFunc ])); }); }; if (Array.isArray(eventTypes)) { eventTypes.forEach(addListeners); } else if (typeof eventTypes === 'string') { addListeners(logic); } } /** * Injects CSS into the document to fix behavior issues across * different devices. */ function injectBehaviorCSSFixes(events) { if (!IS_MOBILE_SAFARI) { return; } const injectedSelectors = {}; let cssText = ''; for(const eventId in events){ const { eventTypeId, target } = events[eventId]; const selector = _IX2BrowserApi.getQuerySelector(target); // @ts-expect-error - TS2538 - Type 'null' cannot be used as an index type. if (injectedSelectors[selector]) { continue; } // add a "cursor: pointer" style rule to ensure that CLICK events get fired for IOS devices if (eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_CLICK || eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_SECOND_CLICK) { // @ts-expect-error - TS2538 - Type 'null' cannot be used as an index type. injectedSelectors[selector] = true; cssText += selector + '{' + 'cursor: pointer;' + 'touch-action: manipulation;' + '}'; } } if (cssText) { const style = document.createElement('style'); style.textContent = cssText; document.body.appendChild(style); } } function renderInitialGroup({ store, actionListId, eventId }) { const { ixData, ixSession } = store.getState(); const { actionLists, events } = ixData; // @ts-expect-error - TS18048 - 'events' is possibly 'undefined'. const event = events[eventId]; // @ts-expect-error - TS18048 - 'actionLists' is possibly 'undefined'. const actionList = actionLists[actionListId]; // @ts-expect-error - Property 'useFirstGroupAsInitialState' does not exist on type 'ActionListType'. if (actionList && actionList.useFirstGroupAsInitialState) { const initialStateItems = (0, _get.default)(actionList, 'actionItemGroups[0].actionItems', []); // Bypass initial state render if current media query is not listed in event config const mediaQueries = (0, _get.default)(event, 'mediaQueries', ixData.mediaQueryKeys); if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) { return; } initialStateItems.forEach((actionItem)=>{ const { config: itemConfig, actionTypeId } = actionItem; const config = // When useEventTarget is explicitly true, use event target/targets to query elements // However, skip this condition when objectId is defined // @ts-expect-error - Property 'target' does not exist on type 'never'. itemConfig?.target?.useEventTarget === true && // @ts-expect-error - Property 'target' does not exist on type 'never'. itemConfig?.target?.objectId == null ? { target: event.target, targets: event.targets } : itemConfig; const itemElements = getAffectedElements({ config, event, elementApi: _IX2BrowserApi }); const shouldUsePlugin = isPluginType(actionTypeId); itemElements.forEach((element)=>{ const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null; createInstance({ destination: getDestinationValues({ element, actionItem, elementApi: _IX2BrowserApi }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error pluginInstance), immediate: true, store, element, eventId, actionItem, actionListId, pluginInstance }); }); }); } } function stopAllActionGroups({ store }) { const { ixInstances } = store.getState(); (0, _forEach.default)(ixInstances, (instance)=>{ if (!instance.continuous) { const { actionListId, verbose } = instance; removeInstance(instance, store); if (verbose) { store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({ actionListId, isPlaying: false })); } } }); } function stopActionGroup({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. store, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventId, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventTarget, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventStateKey, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type. actionListId }) { const { ixInstances, ixSession } = store.getState(); // Check for element boundary before stopping engine instances const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null; (0, _forEach.default)(ixInstances, (instance)=>{ const boundaryMode = (0, _get.default)(instance, 'actionItem.config.target.boundaryMode'); // Validate event key if eventStateKey was provided, otherwise default to true const validEventKey = eventStateKey ? instance.eventStateKey === eventStateKey : true; // Remove engine instances that match the required ids if (instance.actionListId === actionListId && instance.eventId === eventId && validEventKey) { // Avoid removal when root boundary does not contain instance element if (eventElementRoot && boundaryMode && !_IX2BrowserApi.elementContains(eventElementRoot, instance.element)) { return; } removeInstance(instance, store); if (instance.verbose) { store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({ actionListId, isPlaying: false })); } } }); } function startActionGroup({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. store, // @ts-expect-error - TS7031 - Binding element 'eventId' implicitly has an 'any' type. eventId, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventTarget, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventStateKey, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type. actionListId, groupIndex = 0, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error immediate, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error verbose }) { const { ixData, ixSession } = store.getState(); const { events } = ixData; const event = events[eventId] || {}; const { mediaQueries = ixData.mediaQueryKeys } = event; const actionList = (0, _get.default)(ixData, `actionLists.${actionListId}`, {}); const { actionItemGroups, useFirstGroupAsInitialState } = actionList; // Abort playback if no action groups if (!actionItemGroups || !actionItemGroups.length) { return false; } // Reset to first group when event loop is configured if (groupIndex >= actionItemGroups.length && (0, _get.default)(event, 'config.loop')) { groupIndex = 0; } // Skip initial state group during action list playback, as it should already be applied if (groupIndex === 0 && useFirstGroupAsInitialState) { groupIndex++; } // Identify first animated group and apply the initial QuickEffect delay const isFirstGroup = groupIndex === 0 || groupIndex === 1 && useFirstGroupAsInitialState; const instanceDelay = isFirstGroup && isQuickEffect(event.action?.actionTypeId) ? event.config.delay : undefined; // Abort playback if no action items exist at group index const actionItems = (0, _get.default)(actionItemGroups, [ groupIndex, 'actionItems' ], []); if (!actionItems.length) { return false; } // Abort playback if current media query is not listed in event config if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) { return false; } // Limit affected elements when event target is within a boundary node const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null; const carrierIndex = getMaxDurationItemIndex(actionItems); let groupStartResult = false; // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. | TS7006 - Parameter 'actionIndex' implicitly has an 'any' type. actionItems.forEach((actionItem, actionIndex)=>{ const { config, actionTypeId } = actionItem; const shouldUsePlugin = isPluginType(actionTypeId); const { target } = config; if (!target) { return; } const elementRoot = target.boundaryMode ? eventElementRoot : null; const elements = getAffectedElements({ config, event, eventTarget, elementRoot, elementApi: _IX2BrowserApi }); elements.forEach((element, elementIndex)=>{ const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null; const pluginDuration = shouldUsePlugin ? getPluginDuration(actionTypeId)(element, actionItem) : null; groupStartResult = true; const isCarrier = carrierIndex === actionIndex && elementIndex === 0; const computedStyle = getComputedStyle({ element, actionItem }); const destination = getDestinationValues({ element, actionItem, elementApi: _IX2BrowserApi }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error pluginInstance); createInstance({ store, element, actionItem, eventId, eventTarget, eventStateKey, actionListId, groupIndex, isCarrier, computedStyle, destination, immediate, verbose, pluginInstance, pluginDuration, instanceDelay }); }); }); return groupStartResult; } // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. function createInstance(options) { const { store, computedStyle, ...rest } = options; const { element, actionItem, immediate, pluginInstance, continuous, restingValue, eventId } = rest; const autoStart = !continuous; const instanceId = getInstanceId(); const { ixElements, ixSession, ixData } = store.getState(); const elementId = getElementId(ixElements, element); const { refState } = ixElements[elementId] || {}; const refType = _IX2BrowserApi.getRefType(element); const skipMotion = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ readonly TRANSFORM_MOVE: true; readonly TRANSFORM_SCALE: true; readonly TRANSFORM_ROTATE: true; readonly TRANSFORM_SKEW: true; readonly STYLE_SIZE: true; readonly STYLE_FILTER: true; readonly STYLE_FONT_VARIATION: true; }'. ixSession.reducedMotion && _sharedconstants.ReducedMotionTypes[actionItem.actionTypeId]; let skipToValue; if (skipMotion && continuous) { switch(ixData.events[eventId]?.eventTypeId){ case _sharedconstants.EventTypeConsts.MOUSE_MOVE: case _sharedconstants.EventTypeConsts.MOUSE_MOVE_IN_VIEWPORT: skipToValue = restingValue; break; default: skipToValue = 0.5; break; } } const origin = getInstanceOrigin(element, refState, computedStyle, actionItem, _IX2BrowserApi, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error pluginInstance); store.dispatch((0, _IX2EngineActions.instanceAdded)({ instanceId, elementId, origin, refType, skipMotion, skipToValue, ...rest })); dispatchCustomEvent(document.body, 'ix2-animation-started', instanceId); if (immediate) { renderImmediateInstance(store, instanceId); return; } observeStore({ store, // @ts-expect-error - TS7031 - Binding element 'ixInstances' implicitly has an 'any' type. select: ({ ixInstances })=>ixInstances[instanceId], onChange: handleInstanceChange }); if (autoStart) { store.dispatch((0, _IX2EngineActions.instanceStarted)(instanceId, ixSession.tick)); } } function removeInstance(instance, store) { dispatchCustomEvent(document.body, 'ix2-animation-stopping', { instanceId: instance.id, state: store.getState() }); const { elementId, actionItem } = instance; const { ixElements } = store.getState(); const { ref, refType } = ixElements[elementId] || {}; if (refType === HTML_ELEMENT) { cleanupHTMLElement(ref, actionItem, _IX2BrowserApi); } store.dispatch((0, _IX2EngineActions.instanceRemoved)(instance.id)); } function dispatchCustomEvent(element, eventName, detail) { const event = document.createEvent('CustomEvent'); event.initCustomEvent(eventName, true, true, detail); // @ts-expect-error - TS18047 - 'element' is possibly 'null'. element.dispatchEvent(event); } function renderImmediateInstance(store, instanceId) { const { ixParameters } = store.getState(); store.dispatch((0, _IX2EngineActions.instanceStarted)(instanceId, 0)); store.dispatch((0, _IX2EngineActions.animationFrameChanged)(performance.now(), ixParameters)); const { ixInstances } = store.getState(); handleInstanceChange(ixInstances[instanceId], store); } function handleInstanceChange(instance, store) { const { active, continuous, complete, elementId, actionItem, actionTypeId, renderType, current, groupIndex, eventId, eventTarget, eventStateKey, actionListId, isCarrier, styleProp, verbose, pluginInstance } = instance; // Bypass render if current media query is not listed in event config const { ixData, ixSession } = store.getState(); const { events } = ixData; const event = events && events[eventId] ? events[eventId] : {}; // @ts-expect-error - TS2339 - Property 'mediaQueries' does not exist on type '{} | undefined'. const { mediaQueries = ixData.mediaQueryKeys } = event; if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) { return; } if (continuous || active || complete) { if (current || renderType === RENDER_GENERAL && complete) { // Render current values to ref state and grab latest store.dispatch((0, _IX2EngineActions.elementStateChanged)(elementId, actionTypeId, current, actionItem)); const { ixElements } = store.getState(); const { ref, refType, refState } = ixElements[elementId] || {}; const actionState = refState && refState[actionTypeId]; // Render HTML and plugin elements if (refType === HTML_ELEMENT || isPluginType(actionTypeId)) { renderHTMLElement(ref, refState, actionState, eventId, actionItem, styleProp, _IX2BrowserApi, renderType, pluginInstance); } } if (complete) { if (isCarrier) { // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex: any; verbose: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'. const started = startActionGroup({ store, eventId, eventTarget, eventStateKey, actionListId, groupIndex: groupIndex + 1, verbose }); if (verbose && !started) { store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({ actionListId, isPlaying: false })); } } removeInstance(instance, store); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhbmlsbGFFbmdpbmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5pbXBvcnQgZmluZCBmcm9tICdsb2Rhc2gvZmluZCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IHNpemUgZnJvbSAnbG9kYXNoL3NpemUnO1xuaW1wb3J0IG9taXRCeSBmcm9tICdsb2Rhc2gvb21pdEJ5JztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBtYXBWYWx1ZXMgZnJvbSAnbG9kYXNoL21hcFZhbHVlcyc7XG5pbXBvcnQgZm9yRWFjaCBmcm9tICdsb2Rhc2gvZm9yRWFjaCc7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnbG9kYXNoL3Rocm90dGxlJztcbmltcG9ydCB7XG4gIEV2ZW50VHlwZUNvbnN0cyxcbiAgQWN0aW9uVHlwZUNvbnN0cyxcbiAgSVgyRW5naW5lQ29uc3RhbnRzLFxuICBRdWlja0VmZmVjdElkcyxcbiAgUmVkdWNlZE1vdGlvblR5cGVzLFxufSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5cbmNvbnN0IFF1aWNrRWZmZWN0c0lkTGlzdCA9IE9iamVjdC5rZXlzKFF1aWNrRWZmZWN0SWRzKTtcblxuY29uc3QgaXNRdWlja0VmZmVjdCA9IChhY3Rpb25UeXBlSWQ6IHN0cmluZykgPT5cbiAgUXVpY2tFZmZlY3RzSWRMaXN0LmluY2x1ZGVzKGFjdGlvblR5cGVJZCk7XG5cbmltcG9ydCB7SVgyVmFuaWxsYVV0aWxzLCBJWDJWYW5pbGxhUGx1Z2luc30gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZCc7XG5cbmNvbnN0IHtcbiAgQ09MT05fREVMSU1JVEVSLFxuICBCT1VOREFSWV9TRUxFQ1RPUixcbiAgSFRNTF9FTEVNRU5ULFxuICBSRU5ERVJfR0VORVJBTCxcbiAgV19NT0RfSVgsXG59ID0gSVgyRW5naW5lQ29uc3RhbnRzO1xuXG5jb25zdCB7XG4gIGdldEFmZmVjdGVkRWxlbWVudHMsXG4gIGdldEVsZW1lbnRJZCxcbiAgZ2V0RGVzdGluYXRpb25WYWx1ZXMsXG4gIG9ic2VydmVTdG9yZSxcbiAgZ2V0SW5zdGFuY2VJZCxcbiAgcmVuZGVySFRNTEVsZW1lbnQsXG4gIGNsZWFyQWxsU3R5bGVzLFxuICBnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleCxcbiAgZ2V0Q29tcHV0ZWRTdHlsZSxcbiAgZ2V0SW5zdGFuY2VPcmlnaW4sXG4gIHJlZHVjZUxpc3RUb0dyb3VwLFxuICBzaG91bGROYW1lc3BhY2VFdmVudFBhcmFtZXRlcixcbiAgZ2V0TmFtZXNwYWNlZFBhcmFtZXRlcklkLFxuICBzaG91bGRBbGxvd01lZGlhUXVlcnksXG4gIGNsZWFudXBIVE1MRWxlbWVudCxcbiAgY2xlYXJPYmplY3RDYWNoZSxcbiAgc3RyaW5naWZ5VGFyZ2V0LFxuICBtZWRpYVF1ZXJpZXNFcXVhbCxcbiAgc2hhbGxvd0VxdWFsLFxufSA9IElYMlZhbmlsbGFVdGlscztcbmNvbnN0IHtpc1BsdWdpblR5cGUsIGNyZWF0ZVBsdWdpbkluc3RhbmNlLCBnZXRQbHVnaW5EdXJhdGlvbn0gPVxuICBJWDJWYW5pbGxhUGx1Z2lucztcblxuaW1wb3J0IHtcbiAgcmF3RGF0YUltcG9ydGVkLFxuICBzZXNzaW9uSW5pdGlhbGl6ZWQsXG4gIHNlc3Npb25TdGFydGVkLFxuICBzZXNzaW9uU3RvcHBlZCxcbiAgZXZlbnRMaXN0ZW5lckFkZGVkLFxuICBldmVudFN0YXRlQ2hhbmdlZCxcbiAgYW5pbWF0aW9uRnJhbWVDaGFuZ2VkLFxuICBpbnN0YW5jZUFkZGVkLFxuICBpbnN0YW5jZVN0YXJ0ZWQsXG4gIGluc3RhbmNlUmVtb3ZlZCxcbiAgZWxlbWVudFN0YXRlQ2hhbmdlZCxcbiAgYWN0aW9uTGlzdFBsYXliYWNrQ2hhbmdlZCxcbiAgdmlld3BvcnRXaWR0aENoYW5nZWQsXG4gIG1lZGlhUXVlcmllc0RlZmluZWQsXG4gIElYMlJhd0RhdGEsXG59IGZyb20gJy4uL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5cbmltcG9ydCAqIGFzIGVsZW1lbnRBcGkgZnJvbSAnLi9JWDJCcm93c2VyQXBpJztcblxuaW1wb3J0IElYMlZhbmlsbGFFdmVudHMgZnJvbSAnLi9JWDJWYW5pbGxhRXZlbnRzJztcbmltcG9ydCB7XG4gIElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlLFxuICBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUsXG59IGZyb20gJy4uL3JlZHVjZXJzL0lYMlJlZHVjZXInO1xuaW1wb3J0IHtBY3Rpb25MaXN0SWR9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcblxuY29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuY29uc3QgSVNfTU9CSUxFX1NBRkFSSSA9IHVhLm1hdGNoKC9pUGFkL2kpIHx8IHVhLm1hdGNoKC9pUGhvbmUvKTtcblxuLy8gS2VlcCB0aHJvdHRsZWQgZXZlbnRzIGF0IH44MGZwcyB0byByZWR1Y2UgcmVmbG93cyB3aGlsZSBtYWludGFpbmluZyByZW5kZXIgYWNjdXJhY3lcbmNvbnN0IFRIUk9UVExFRF9FVkVOVF9XQUlUID0gMTI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVxdWVzdHMoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIHNlbGVjdDogKHtcbiAgICAgIGl4UmVxdWVzdCxcbiAgICB9OiB7XG4gICAgICBpeFJlcXVlc3Q6IElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlWydpeFJlcXVlc3QnXTtcbiAgICB9KSA9PiBpeFJlcXVlc3QucHJldmlldyxcbiAgICBvbkNoYW5nZTogaGFuZGxlUHJldmlld1JlcXVlc3QsXG4gIH0pO1xuICBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIHNlbGVjdDogKHtcbiAgICAgIGl4UmVxdWVzdCxcbiAgICB9OiB7XG4gICAgICBpeFJlcXVlc3Q6IElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlWydpeFJlcXVlc3QnXTtcbiAgICB9KSA9PiBpeFJlcXVlc3QucGxheWJhY2ssXG4gICAgb25DaGFuZ2U6IGhhbmRsZVBsYXliYWNrUmVxdWVzdCxcbiAgfSk7XG4gIG9ic2VydmVTdG9yZSh7XG4gICAgc3RvcmUsXG4gICAgc2VsZWN0OiAoe1xuICAgICAgaXhSZXF1ZXN0LFxuICAgIH06IHtcbiAgICAgIGl4UmVxdWVzdDogSVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGVbJ2l4UmVxdWVzdCddO1xuICAgIH0pID0+IGl4UmVxdWVzdC5zdG9wLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVTdG9wUmVxdWVzdCxcbiAgfSk7XG4gIG9ic2VydmVTdG9yZSh7XG4gICAgc3RvcmUsXG4gICAgc2VsZWN0OiAoe1xuICAgICAgaXhSZXF1ZXN0LFxuICAgIH06IHtcbiAgICAgIGl4UmVxdWVzdDogSVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGVbJ2l4UmVxdWVzdCddO1xuICAgIH0pID0+IGl4UmVxdWVzdC5jbGVhcixcbiAgICBvbkNoYW5nZTogaGFuZGxlQ2xlYXJSZXF1ZXN0LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gb2JzZXJ2ZU1lZGlhUXVlcnlDaGFuZ2Uoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIHNlbGVjdDogKHtcbiAgICAgIGl4U2Vzc2lvbixcbiAgICB9OiB7XG4gICAgICBpeFNlc3Npb246IElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlWydpeFNlc3Npb24nXTtcbiAgICB9KSA9PiBpeFNlc3Npb24ubWVkaWFRdWVyeUtleSxcbiAgICBvbkNoYW5nZTogKCkgPT4ge1xuICAgICAgc3RvcEVuZ2luZShzdG9yZSk7XG4gICAgICBjbGVhckFsbFN0eWxlcyh7c3RvcmUsIGVsZW1lbnRBcGl9KTtcbiAgICAgIHN0YXJ0RW5naW5lKHtzdG9yZSwgYWxsb3dFdmVudHM6IHRydWV9KTtcbiAgICAgIGRpc3BhdGNoUGFnZVVwZGF0ZUV2ZW50KCk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9ic2VydmVPbmVSZW5kZXJUaWNrKFxuICBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlLFxuICBvblRpY2s6IChub3c6IGFueSB8IG51bWJlcikgPT4gdm9pZFxuKSB7XG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gb2JzZXJ2ZVN0b3JlKHtcbiAgICBzdG9yZSxcbiAgICBzZWxlY3Q6ICh7XG4gICAgICBpeFNlc3Npb24sXG4gICAgfToge1xuICAgICAgaXhTZXNzaW9uOiBJWDJFbmdpbmVSZWR1Y2VyU3RhdGVTaGFwZVsnaXhTZXNzaW9uJ107XG4gICAgfSkgPT4gaXhTZXNzaW9uLnRpY2ssXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAndGljaycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICBvbkNoYW5nZTogKHRpY2spID0+IHtcbiAgICAgIG9uVGljayh0aWNrKTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByZXZpZXdSZXF1ZXN0KFxuICB7cmF3RGF0YSwgZGVmZXJ9OiB7cmF3RGF0YTogSVgyUmF3RGF0YTsgZGVmZXI6IGJvb2xlYW59LFxuICBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlXG4pIHtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgc3RhcnRFbmdpbmUoe3N0b3JlLCByYXdEYXRhLCBhbGxvd0V2ZW50czogdHJ1ZX0pO1xuICAgIGRpc3BhdGNoUGFnZVVwZGF0ZUV2ZW50KCk7XG4gIH07XG4gIGRlZmVyID8gc2V0VGltZW91dChzdGFydCwgMCkgOiBzdGFydCgpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFBhZ2VVcGRhdGVFdmVudCgpIHtcbiAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ0lYMl9QQUdFX1VQREFURScpKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUGxheWJhY2tSZXF1ZXN0KHBsYXliYWNrOiBhbnksIHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvblR5cGVJZCxcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgYWN0aW9uSXRlbUlkLFxuICAgIGV2ZW50SWQsXG4gICAgYWxsb3dFdmVudHMsXG4gICAgaW1tZWRpYXRlLFxuICAgIHRlc3RNYW51YWwsXG4gICAgdmVyYm9zZSA9IHRydWUsXG4gIH0gPSBwbGF5YmFjaztcbiAgbGV0IHtyYXdEYXRhfSA9IHBsYXliYWNrO1xuXG4gIGlmIChhY3Rpb25MaXN0SWQgJiYgYWN0aW9uSXRlbUlkICYmIHJhd0RhdGEgJiYgaW1tZWRpYXRlKSB7XG4gICAgY29uc3QgYWN0aW9uTGlzdCA9IHJhd0RhdGEuYWN0aW9uTGlzdHNbYWN0aW9uTGlzdElkXTtcblxuICAgIGlmIChhY3Rpb25MaXN0KSB7XG4gICAgICByYXdEYXRhID0gcmVkdWNlTGlzdFRvR3JvdXAoe1xuICAgICAgICBhY3Rpb25MaXN0LFxuICAgICAgICBhY3Rpb25JdGVtSWQsXG4gICAgICAgIHJhd0RhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGFydEVuZ2luZSh7c3RvcmUsIHJhd0RhdGEsIGFsbG93RXZlbnRzLCB0ZXN0TWFudWFsfSk7XG5cbiAgaWYgKFxuICAgIChhY3Rpb25MaXN0SWQgJiYgYWN0aW9uVHlwZUlkID09PSBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OKSB8fFxuICAgIGlzUXVpY2tFZmZlY3QoYWN0aW9uVHlwZUlkKVxuICApIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBhY3Rpb25MaXN0SWQ6IGFueTsgfScgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ3sgc3RvcmU6IGFueTsgZXZlbnRJZDogYW55OyBldmVudFRhcmdldDogYW55OyBldmVudFN0YXRlS2V5OiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyB9Jy5cbiAgICBzdG9wQWN0aW9uR3JvdXAoe3N0b3JlLCBhY3Rpb25MaXN0SWR9KTtcbiAgICByZW5kZXJJbml0aWFsR3JvdXAoe3N0b3JlLCBhY3Rpb25MaXN0SWQsIGV2ZW50SWR9KTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyBpbW1lZGlhdGU6IGFueTsgdmVyYm9zZTogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGdyb3VwSW5kZXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7IGltbWVkaWF0ZTogYW55OyB2ZXJib3NlOiBhbnk7IH0nLlxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBzdGFydEFjdGlvbkdyb3VwKHtcbiAgICAgIHN0b3JlLFxuICAgICAgZXZlbnRJZCxcbiAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgIGltbWVkaWF0ZSxcbiAgICAgIHZlcmJvc2UsXG4gICAgfSk7XG4gICAgaWYgKHZlcmJvc2UgJiYgc3RhcnRlZCkge1xuICAgICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIGFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWQoe2FjdGlvbkxpc3RJZCwgaXNQbGF5aW5nOiAhaW1tZWRpYXRlfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVN0b3BSZXF1ZXN0KFxuICB7YWN0aW9uTGlzdElkfToge2FjdGlvbkxpc3RJZDogQWN0aW9uTGlzdElkfSxcbiAgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZVxuKSB7XG4gIGlmIChhY3Rpb25MaXN0SWQpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBhY3Rpb25MaXN0SWQ6IGFueTsgfScgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ3sgc3RvcmU6IGFueTsgZXZlbnRJZDogYW55OyBldmVudFRhcmdldDogYW55OyBldmVudFN0YXRlS2V5OiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyB9Jy5cbiAgICBzdG9wQWN0aW9uR3JvdXAoe3N0b3JlLCBhY3Rpb25MaXN0SWR9KTtcbiAgfSBlbHNlIHtcbiAgICBzdG9wQWxsQWN0aW9uR3JvdXBzKHtzdG9yZX0pO1xuICB9XG4gIHN0b3BFbmdpbmUoc3RvcmUpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVDbGVhclJlcXVlc3Qoc3RhdGU6IGFueSwgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBzdG9wRW5naW5lKHN0b3JlKTtcbiAgY2xlYXJBbGxTdHlsZXMoe3N0b3JlLCBlbGVtZW50QXBpfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVuZ2luZSh7XG4gIHN0b3JlLFxuICByYXdEYXRhLFxuICBhbGxvd0V2ZW50cyxcbiAgdGVzdE1hbnVhbCxcbn06IHtcbiAgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZTtcbiAgcmF3RGF0YT86IElYMlJhd0RhdGE7XG4gIHRlc3RNYW51YWw/OiBib29sZWFuO1xuICBhbGxvd0V2ZW50cz86IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IHtpeFNlc3Npb259ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgaWYgKHJhd0RhdGEpIHtcbiAgICBzdG9yZS5kaXNwYXRjaChyYXdEYXRhSW1wb3J0ZWQocmF3RGF0YSkpO1xuICB9XG4gIGlmICghaXhTZXNzaW9uLmFjdGl2ZSkge1xuICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgc2Vzc2lvbkluaXRpYWxpemVkKHtcbiAgICAgICAgaGFzQm91bmRhcnlOb2RlczogQm9vbGVhbihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEJPVU5EQVJZX1NFTEVDVE9SKSksXG4gICAgICAgIHJlZHVjZWRNb3Rpb246XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2YtaXgtdmFjYXRpb24nKSAmJlxuICAgICAgICAgIHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbiknKS5tYXRjaGVzLFxuICAgICAgfSlcbiAgICApO1xuICAgIGlmIChhbGxvd0V2ZW50cykge1xuICAgICAgYmluZEV2ZW50cyhzdG9yZSk7XG4gICAgICBhZGREb2N1bWVudENsYXNzKCk7XG5cbiAgICAgIGlmIChzdG9yZS5nZXRTdGF0ZSgpLml4U2Vzc2lvbi5oYXNEZWZpbmVkTWVkaWFRdWVyaWVzKSB7XG4gICAgICAgIG9ic2VydmVNZWRpYVF1ZXJ5Q2hhbmdlKHN0b3JlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RvcmUuZGlzcGF0Y2goc2Vzc2lvblN0YXJ0ZWQoKSk7XG4gICAgc3RhcnRSZW5kZXJMb29wKHN0b3JlLCB0ZXN0TWFudWFsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGREb2N1bWVudENsYXNzKCkge1xuICBjb25zdCB7ZG9jdW1lbnRFbGVtZW50fSA9IGRvY3VtZW50O1xuICBpZiAoZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKFdfTU9EX0lYKSA9PT0gLTEpIHtcbiAgICBkb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lICs9IGAgJHtXX01PRF9JWH1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UmVuZGVyTG9vcChzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlLCB0ZXN0TWFudWFsPzogYm9vbGVhbikge1xuICBjb25zdCBoYW5kbGVGcmFtZSA9IChub3c6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHtpeFNlc3Npb24sIGl4UGFyYW1ldGVyc30gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGlmIChpeFNlc3Npb24uYWN0aXZlKSB7XG4gICAgICBzdG9yZS5kaXNwYXRjaChhbmltYXRpb25GcmFtZUNoYW5nZWQobm93LCBpeFBhcmFtZXRlcnMpKTtcbiAgICAgIGlmICh0ZXN0TWFudWFsKSB7XG4gICAgICAgIG9ic2VydmVPbmVSZW5kZXJUaWNrKHN0b3JlLCBoYW5kbGVGcmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaGFuZGxlRnJhbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgaGFuZGxlRnJhbWUod2luZG93LnBlcmZvcm1hbmNlLm5vdygpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BFbmdpbmUoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBjb25zdCB7aXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGlmIChpeFNlc3Npb24uYWN0aXZlKSB7XG4gICAgY29uc3Qge2V2ZW50TGlzdGVuZXJzfSA9IGl4U2Vzc2lvbjtcbiAgICBldmVudExpc3RlbmVycy5mb3JFYWNoKGNsZWFyRXZlbnRMaXN0ZW5lcik7XG4gICAgY2xlYXJPYmplY3RDYWNoZSgpO1xuICAgIHN0b3JlLmRpc3BhdGNoKHNlc3Npb25TdG9wcGVkKCkpO1xuICB9XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3RhcmdldCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2xpc3RlbmVyUGFyYW1zJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gY2xlYXJFdmVudExpc3RlbmVyKHt0YXJnZXQsIGxpc3RlbmVyUGFyYW1zfSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXNwcmVhZFxuICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0YXJnZXQsIGxpc3RlbmVyUGFyYW1zKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlR3JvdXBJbnN0YW5jZXMoe1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgc3RvcmUsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50U3RhdGVLZXknIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGV2ZW50U3RhdGVLZXksXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50VGFyZ2V0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBldmVudFRhcmdldCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRJZCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgZXZlbnRJZCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRDb25maWcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGV2ZW50Q29uZmlnLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25MaXN0SWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkxpc3RJZCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAncGFyYW1ldGVyR3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHBhcmFtZXRlckdyb3VwLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzbW9vdGhpbmcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHNtb290aGluZyxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAncmVzdGluZ1ZhbHVlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICByZXN0aW5nVmFsdWUsXG59KSB7XG4gIGNvbnN0IHtpeERhdGEsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcbiAgY29uc3QgZXZlbnQgPSBldmVudHNbZXZlbnRJZF07XG4gIGNvbnN0IHtldmVudFR5cGVJZH0gPSBldmVudDtcbiAgY29uc3QgdGFyZ2V0Q2FjaGU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgaW5zdGFuY2VBY3Rpb25Hcm91cHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgaW5zdGFuY2VDb25maWdzOiBBcnJheTxcbiAgICB8IGFueVxuICAgIHwge1xuICAgICAgICBlbGVtZW50OiBIVE1MRWxlbWVudCB8IGFueTtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB9XG4gID4gPSBbXTtcblxuICBjb25zdCB7Y29udGludW91c0FjdGlvbkdyb3Vwc30gPSBwYXJhbWV0ZXJHcm91cDtcbiAgbGV0IHtpZDogcGFyYW1ldGVySWR9ID0gcGFyYW1ldGVyR3JvdXA7XG4gIGlmIChzaG91bGROYW1lc3BhY2VFdmVudFBhcmFtZXRlcihldmVudFR5cGVJZCwgZXZlbnRDb25maWcpKSB7XG4gICAgcGFyYW1ldGVySWQgPSBnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQoZXZlbnRTdGF0ZUtleSwgcGFyYW1ldGVySWQpO1xuICB9XG5cbiAgLy8gTGltaXQgYWZmZWN0ZWQgZWxlbWVudHMgd2hlbiBldmVudCB0YXJnZXQgaXMgd2l0aGluIGEgYm91bmRhcnkgbm9kZVxuICBjb25zdCBldmVudEVsZW1lbnRSb290ID1cbiAgICBpeFNlc3Npb24uaGFzQm91bmRhcnlOb2RlcyAmJiBldmVudFRhcmdldFxuICAgICAgPyBlbGVtZW50QXBpLmdldENsb3Nlc3RFbGVtZW50KGV2ZW50VGFyZ2V0LCBCT1VOREFSWV9TRUxFQ1RPUilcbiAgICAgIDogbnVsbDtcblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25Hcm91cCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgY29udGludW91c0FjdGlvbkdyb3Vwcy5mb3JFYWNoKChhY3Rpb25Hcm91cCkgPT4ge1xuICAgIGNvbnN0IHtrZXlmcmFtZSwgYWN0aW9uSXRlbXN9ID0gYWN0aW9uR3JvdXA7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25JdGVtJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIGFjdGlvbkl0ZW1zLmZvckVhY2goKGFjdGlvbkl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHthY3Rpb25UeXBlSWR9ID0gYWN0aW9uSXRlbTtcbiAgICAgIGNvbnN0IHt0YXJnZXR9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50Um9vdCA9IHRhcmdldC5ib3VuZGFyeU1vZGUgPyBldmVudEVsZW1lbnRSb290IDogbnVsbDtcblxuICAgICAgY29uc3Qga2V5ID0gc3RyaW5naWZ5VGFyZ2V0KHRhcmdldCkgKyBDT0xPTl9ERUxJTUlURVIgKyBhY3Rpb25UeXBlSWQ7XG4gICAgICBpbnN0YW5jZUFjdGlvbkdyb3Vwc1trZXldID0gYXBwZW5kQWN0aW9uSXRlbShcbiAgICAgICAgaW5zdGFuY2VBY3Rpb25Hcm91cHNba2V5XSxcbiAgICAgICAga2V5ZnJhbWUsXG4gICAgICAgIGFjdGlvbkl0ZW1cbiAgICAgICk7XG5cbiAgICAgIGlmICghdGFyZ2V0Q2FjaGVba2V5XSkge1xuICAgICAgICB0YXJnZXRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb25JdGVtO1xuICAgICAgICBnZXRBZmZlY3RlZEVsZW1lbnRzKHtcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgICAgZWxlbWVudFJvb3QsXG4gICAgICAgICAgZWxlbWVudEFwaSxcbiAgICAgICAgfSkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGluc3RhbmNlQ29uZmlncy5wdXNoKHtlbGVtZW50LCBrZXl9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGluc3RhbmNlQ29uZmlncy5mb3JFYWNoKCh7ZWxlbWVudCwga2V5fSkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbkdyb3VwcyA9IGluc3RhbmNlQWN0aW9uR3JvdXBzW2tleV07XG4gICAgY29uc3QgYWN0aW9uSXRlbSA9IGdldChhY3Rpb25Hcm91cHMsIGBbMF0uYWN0aW9uSXRlbXNbMF1gLCB7fSk7XG4gICAgY29uc3Qge2FjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuICAgIGNvbnN0IHNob3VsZFVzZVBsdWdpbiA9XG4gICAgICAvLyBJZiBpdCdzIHRhcmdldGVkIGJ5IGNsYXNzLCBkb24ndCBxdWVyeSB0aGUgZWxlbWVudCBieSBwbHVnaW5FbGVtZW50SWRcbiAgICAgIGFjdGlvblR5cGVJZCA9PT0gQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fUklWRVxuICAgICAgICA/IChhY3Rpb25JdGVtLmNvbmZpZz8udGFyZ2V0Py5zZWxlY3Rvckd1aWRzIHx8IFtdKS5sZW5ndGggPT09IDBcbiAgICAgICAgOiBpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKTtcblxuICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gc2hvdWxkVXNlUGx1Z2luXG4gICAgICA/IGNyZWF0ZVBsdWdpbkluc3RhbmNlKGFjdGlvblR5cGVJZCk/LihlbGVtZW50LCBhY3Rpb25JdGVtKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gZ2V0RGVzdGluYXRpb25WYWx1ZXMoXG4gICAgICB7ZWxlbWVudCwgYWN0aW9uSXRlbSwgZWxlbWVudEFwaX0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBwbHVnaW5JbnN0YW5jZVxuICAgICk7XG4gICAgY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgc3RvcmUsXG4gICAgICBlbGVtZW50LFxuICAgICAgZXZlbnRJZCxcbiAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIGNvbnRpbnVvdXM6IHRydWUsXG4gICAgICBwYXJhbWV0ZXJJZCxcbiAgICAgIGFjdGlvbkdyb3VwcyxcbiAgICAgIHNtb290aGluZyxcbiAgICAgIHJlc3RpbmdWYWx1ZSxcbiAgICAgIHBsdWdpbkluc3RhbmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQWN0aW9uSXRlbShhY3Rpb25Hcm91cHMgPSBbXSwga2V5ZnJhbWU6IGFueSwgYWN0aW9uSXRlbTogYW55KSB7XG4gIGNvbnN0IG5ld0FjdGlvbkdyb3VwcyA9IFsuLi5hY3Rpb25Hcm91cHNdO1xuICBsZXQgZ3JvdXBJbmRleDtcbiAgbmV3QWN0aW9uR3JvdXBzLnNvbWUoKGdyb3VwLCBpbmRleCkgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAna2V5ZnJhbWUnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgICBpZiAoZ3JvdXAua2V5ZnJhbWUgPT09IGtleWZyYW1lKSB7XG4gICAgICBncm91cEluZGV4ID0gaW5kZXg7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbiAgaWYgKGdyb3VwSW5kZXggPT0gbnVsbCkge1xuICAgIGdyb3VwSW5kZXggPSBuZXdBY3Rpb25Hcm91cHMubGVuZ3RoO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICd7IGtleWZyYW1lOiBhbnk7IGFjdGlvbkl0ZW1zOiBuZXZlcltdOyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInLlxuICAgIG5ld0FjdGlvbkdyb3Vwcy5wdXNoKHtcbiAgICAgIGtleWZyYW1lLFxuICAgICAgYWN0aW9uSXRlbXM6IFtdLFxuICAgIH0pO1xuICB9XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnYWN0aW9uSXRlbXMnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgbmV3QWN0aW9uR3JvdXBzW2dyb3VwSW5kZXhdLmFjdGlvbkl0ZW1zLnB1c2goYWN0aW9uSXRlbSk7XG4gIHJldHVybiBuZXdBY3Rpb25Hcm91cHM7XG59XG5cbmZ1bmN0aW9uIGJpbmRFdmVudHMoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBjb25zdCB7aXhEYXRhfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtldmVudFR5cGVNYXB9ID0gaXhEYXRhO1xuXG4gIHVwZGF0ZVZpZXdwb3J0V2lkdGgoc3RvcmUpO1xuXG4gIGZvckVhY2goZXZlbnRUeXBlTWFwLCAoZXZlbnRzLCBrZXkpID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdzdHJpbmcnIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAneyBTTElERVJfQUNUSVZFOiB7IGhhbmRsZXI6IChvcHRpb25zOiBhbnksIHN0YXRlOiBhbnkpID0+IGFueTsgdHlwZXM6IHN0cmluZzsgfTsgU0xJREVSX0lOQUNUSVZFOiB7IGhhbmRsZXI6IChvcHRpb25zOiBhbnksIHN0YXRlOiBhbnkpID0+IGFueTsgdHlwZXM6IHN0cmluZzsgfTsgRFJPUERPV05fT1BFTjogeyBoYW5kbGVyOiAob3B0aW9uczogYW55LCBzdGF0ZTogYW55KSA9PiBhbnk7IHR5cGVzOiBzdHJpbmc7IH07IC4uLiAyMSBtb3JlIC4uLjsgUEFHRV9TVEFSVDogeyAuLi47IH07IH0nLlxuICAgIGNvbnN0IGxvZ2ljID0gSVgyVmFuaWxsYUV2ZW50c1trZXldO1xuICAgIGlmICghbG9naWMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgSVgyIGV2ZW50IHR5cGUgbm90IGNvbmZpZ3VyZWQ6ICR7a2V5fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBiaW5kRXZlbnRUeXBlKHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2xvZ2ljJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgICAgbG9naWMsXG4gICAgICBzdG9yZSxcbiAgICAgIGV2ZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3Qge2l4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBpZiAoaXhTZXNzaW9uLmV2ZW50TGlzdGVuZXJzLmxlbmd0aCkge1xuICAgIGJpbmRSZXNpemVFdmVudHMoc3RvcmUpO1xuICB9XG59XG5cbmNvbnN0IFdJTkRPV19SRVNJWkVfRVZFTlRTID0gWydyZXNpemUnLCAnb3JpZW50YXRpb25jaGFuZ2UnXTtcblxuZnVuY3Rpb24gYmluZFJlc2l6ZUV2ZW50cyhzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlKSB7XG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICB1cGRhdGVWaWV3cG9ydFdpZHRoKHN0b3JlKTtcbiAgfTtcbiAgV0lORE9XX1JFU0laRV9FVkVOVFMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZVJlc2l6ZSk7XG4gICAgc3RvcmUuZGlzcGF0Y2goZXZlbnRMaXN0ZW5lckFkZGVkKHdpbmRvdywgW3R5cGUsIGhhbmRsZVJlc2l6ZV0pKTtcbiAgfSk7XG4gIGhhbmRsZVJlc2l6ZSgpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVWaWV3cG9ydFdpZHRoKHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUpIHtcbiAgY29uc3Qge2l4U2Vzc2lvbiwgaXhEYXRhfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gIGlmICh3aWR0aCAhPT0gaXhTZXNzaW9uLnZpZXdwb3J0V2lkdGgpIHtcbiAgICBjb25zdCB7bWVkaWFRdWVyaWVzfSA9IGl4RGF0YTtcbiAgICBzdG9yZS5kaXNwYXRjaCh2aWV3cG9ydFdpZHRoQ2hhbmdlZCh7d2lkdGgsIG1lZGlhUXVlcmllc30pKTtcbiAgfVxufVxuXG5jb25zdCBtYXBGb3VuZFZhbHVlcyA9IChcbiAgb2JqZWN0OiBhbnksXG4gIGl0ZXJhdGVlOiAoZXZlbnQ/OiBhbnkpID0+IEFycmF5PEhUTUxFbGVtZW50IHwgYW55PlxuKSA9PiBvbWl0QnkobWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpLCBpc0VtcHR5KTtcblxuY29uc3QgZm9yRWFjaEV2ZW50VGFyZ2V0ID0gKFxuICBldmVudFRhcmdldHM6IGFueSxcbiAgZXZlbnRDYWxsYmFjazogKGVsZW1lbnQ6IGFueSwgZXZlbnRJZDogYW55LCBldmVudFN0YXRlS2V5OiBzdHJpbmcpID0+IHZvaWRcbikgPT4ge1xuICBmb3JFYWNoKGV2ZW50VGFyZ2V0cywgKGVsZW1lbnRzLCBldmVudElkKSA9PiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2luZGV4JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBldmVudFN0YXRlS2V5ID0gZXZlbnRJZCArIENPTE9OX0RFTElNSVRFUiArIGluZGV4O1xuICAgICAgZXZlbnRDYWxsYmFjayhlbGVtZW50LCBldmVudElkLCBldmVudFN0YXRlS2V5KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRBZmZlY3RlZEZvckV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgY29uc3QgY29uZmlnID0ge3RhcmdldDogZXZlbnQudGFyZ2V0LCB0YXJnZXRzOiBldmVudC50YXJnZXRzfSBhcyBjb25zdDtcbiAgcmV0dXJuIGdldEFmZmVjdGVkRWxlbWVudHMoe2NvbmZpZywgZWxlbWVudEFwaX0pO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnbG9naWMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50cycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmZ1bmN0aW9uIGJpbmRFdmVudFR5cGUoe2xvZ2ljLCBzdG9yZSwgZXZlbnRzfToge3N0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmV9KSB7XG4gIGluamVjdEJlaGF2aW9yQ1NTRml4ZXMoZXZlbnRzKTtcbiAgY29uc3Qge3R5cGVzOiBldmVudFR5cGVzLCBoYW5kbGVyOiBldmVudEhhbmRsZXJ9ID0gbG9naWM7XG4gIGNvbnN0IHtpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3Qge2FjdGlvbkxpc3RzfSA9IGl4RGF0YTtcbiAgY29uc3QgZXZlbnRUYXJnZXRzID0gbWFwRm91bmRWYWx1ZXMoZXZlbnRzLCBnZXRBZmZlY3RlZEZvckV2ZW50KTtcblxuICBpZiAoIXNpemUoZXZlbnRUYXJnZXRzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvckVhY2goZXZlbnRUYXJnZXRzLCAoZWxlbWVudHMsIGtleSkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2tleV07XG4gICAgY29uc3Qge1xuICAgICAgYWN0aW9uOiBldmVudEFjdGlvbixcbiAgICAgIGlkOiBldmVudElkLFxuICAgICAgbWVkaWFRdWVyaWVzID0gaXhEYXRhLm1lZGlhUXVlcnlLZXlzLFxuICAgIH0gPSBldmVudDtcbiAgICBjb25zdCB7YWN0aW9uTGlzdElkfSA9IGV2ZW50QWN0aW9uLmNvbmZpZztcblxuICAgIGlmICghbWVkaWFRdWVyaWVzRXF1YWwobWVkaWFRdWVyaWVzLCBpeERhdGEubWVkaWFRdWVyeUtleXMpKSB7XG4gICAgICBzdG9yZS5kaXNwYXRjaChtZWRpYVF1ZXJpZXNEZWZpbmVkKCkpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGV2ZW50QWN0aW9uLmFjdGlvblR5cGVJZCA9PT0gQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OXG4gICAgKSB7XG4gICAgICBjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShldmVudC5jb25maWcpXG4gICAgICAgID8gZXZlbnQuY29uZmlnXG4gICAgICAgIDogW2V2ZW50LmNvbmZpZ107XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2V2ZW50Q29uZmlnJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgICAgY29uZmlncy5mb3JFYWNoKChldmVudENvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCB7Y29udGludW91c1BhcmFtZXRlckdyb3VwSWR9ID0gZXZlbnRDb25maWc7XG4gICAgICAgIGNvbnN0IHBhcmFtR3JvdXBzID0gZ2V0KFxuICAgICAgICAgIGFjdGlvbkxpc3RzLFxuICAgICAgICAgIGAke2FjdGlvbkxpc3RJZH0uY29udGludW91c1BhcmFtZXRlckdyb3Vwc2AsXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyR3JvdXAgPSBmaW5kKFxuICAgICAgICAgIHBhcmFtR3JvdXBzLFxuICAgICAgICAgICh7aWR9KSA9PiBpZCA9PT0gY29udGludW91c1BhcmFtZXRlckdyb3VwSWRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc21vb3RoaW5nID0gKGV2ZW50Q29uZmlnLnNtb290aGluZyB8fCAwKSAvIDEwMDtcbiAgICAgICAgY29uc3QgcmVzdGluZ1ZhbHVlID0gKGV2ZW50Q29uZmlnLnJlc3RpbmdTdGF0ZSB8fCAwKSAvIDEwMDtcblxuICAgICAgICBpZiAoIXBhcmFtZXRlckdyb3VwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZXZlbnRUYXJnZXQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnRTdGF0ZUtleSA9IGV2ZW50SWQgKyBDT0xPTl9ERUxJTUlURVIgKyBpbmRleDtcbiAgICAgICAgICBjcmVhdGVHcm91cEluc3RhbmNlcyh7XG4gICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgICAgIGV2ZW50SWQsXG4gICAgICAgICAgICBldmVudENvbmZpZyxcbiAgICAgICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgICAgIHBhcmFtZXRlckdyb3VwLFxuICAgICAgICAgICAgc21vb3RoaW5nLFxuICAgICAgICAgICAgcmVzdGluZ1ZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGV2ZW50QWN0aW9uLmFjdGlvblR5cGVJZCA9PT0gQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX1NUQVJUX0FDVElPTiB8fFxuICAgICAgaXNRdWlja0VmZmVjdChldmVudEFjdGlvbi5hY3Rpb25UeXBlSWQpXG4gICAgKSB7XG4gICAgICByZW5kZXJJbml0aWFsR3JvdXAoe3N0b3JlLCBhY3Rpb25MaXN0SWQsIGV2ZW50SWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUV2ZW50ID0gKG5hdGl2ZUV2ZW50OiBhbnkpID0+IHtcbiAgICBjb25zdCB7aXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgZm9yRWFjaEV2ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0cywgKGVsZW1lbnQsIGV2ZW50SWQsIGV2ZW50U3RhdGVLZXkpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2V2ZW50SWRdO1xuICAgICAgY29uc3Qgb2xkU3RhdGUgPSBpeFNlc3Npb24uZXZlbnRTdGF0ZVtldmVudFN0YXRlS2V5XTtcbiAgICAgIGNvbnN0IHthY3Rpb246IGV2ZW50QWN0aW9uLCBtZWRpYVF1ZXJpZXMgPSBpeERhdGEubWVkaWFRdWVyeUtleXN9ID0gZXZlbnQ7XG4gICAgICAvLyBCeXBhc3MgZXZlbnQgaGFuZGxlciBpZiBjdXJyZW50IG1lZGlhIHF1ZXJ5IGlzIG5vdCBsaXN0ZWQgaW4gZXZlbnQgY29uZmlnXG4gICAgICBpZiAoIXNob3VsZEFsbG93TWVkaWFRdWVyeShtZWRpYVF1ZXJpZXMsIGl4U2Vzc2lvbi5tZWRpYVF1ZXJ5S2V5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBoYW5kbGVFdmVudFdpdGhDb25maWcgPSAoZXZlbnRDb25maWcgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IGV2ZW50SGFuZGxlcihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGV2ZW50Q29uZmlnLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBldmVudFN0YXRlS2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb2xkU3RhdGVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwobmV3U3RhdGUsIG9sZFN0YXRlKSkge1xuICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGV2ZW50U3RhdGVDaGFuZ2VkKGV2ZW50U3RhdGVLZXksIG5ld1N0YXRlKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50QWN0aW9uLmFjdGlvblR5cGVJZCA9PT0gQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoZXZlbnQuY29uZmlnKVxuICAgICAgICAgID8gZXZlbnQuY29uZmlnXG4gICAgICAgICAgOiBbZXZlbnQuY29uZmlnXTtcbiAgICAgICAgY29uZmlncy5mb3JFYWNoKGhhbmRsZUV2ZW50V2l0aENvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVFdmVudFdpdGhDb25maWcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVFdmVudFRocm90dGxlZCA9IHRocm90dGxlKGhhbmRsZUV2ZW50LCBUSFJPVFRMRURfRVZFTlRfV0FJVCk7XG5cbiAgY29uc3QgYWRkTGlzdGVuZXJzID0gKHtcbiAgICB0YXJnZXQgPSBkb2N1bWVudCxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICd0eXBlcycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICB0eXBlcyxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzaG91bGRUaHJvdHRsZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICB0aHJvdHRsZTogc2hvdWxkVGhyb3R0bGUsXG4gIH0pID0+IHtcbiAgICB0eXBlc1xuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3R5cGUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgICAuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyRnVuYyA9IHNob3VsZFRocm90dGxlID8gaGFuZGxlRXZlbnRUaHJvdHRsZWQgOiBoYW5kbGVFdmVudDtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlckZ1bmMpO1xuICAgICAgICBzdG9yZS5kaXNwYXRjaChldmVudExpc3RlbmVyQWRkZWQodGFyZ2V0LCBbdHlwZSwgaGFuZGxlckZ1bmNdKSk7XG4gICAgICB9KTtcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShldmVudFR5cGVzKSkge1xuICAgIGV2ZW50VHlwZXMuZm9yRWFjaChhZGRMaXN0ZW5lcnMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudFR5cGVzID09PSAnc3RyaW5nJykge1xuICAgIGFkZExpc3RlbmVycyhsb2dpYyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmplY3RzIENTUyBpbnRvIHRoZSBkb2N1bWVudCB0byBmaXggYmVoYXZpb3IgaXNzdWVzIGFjcm9zc1xuICogZGlmZmVyZW50IGRldmljZXMuXG4gKi9cblxuZnVuY3Rpb24gaW5qZWN0QmVoYXZpb3JDU1NGaXhlcyhldmVudHM6IGFueSkge1xuICBpZiAoIUlTX01PQklMRV9TQUZBUkkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbmplY3RlZFNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGxldCBjc3NUZXh0ID0gJyc7XG4gIGZvciAoY29uc3QgZXZlbnRJZCBpbiBldmVudHMpIHtcbiAgICBjb25zdCB7ZXZlbnRUeXBlSWQsIHRhcmdldH0gPSBldmVudHNbZXZlbnRJZF07XG5cbiAgICBjb25zdCBzZWxlY3RvciA9IGVsZW1lbnRBcGkuZ2V0UXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICdudWxsJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLlxuICAgIGlmIChpbmplY3RlZFNlbGVjdG9yc1tzZWxlY3Rvcl0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIFwiY3Vyc29yOiBwb2ludGVyXCIgc3R5bGUgcnVsZSB0byBlbnN1cmUgdGhhdCBDTElDSyBldmVudHMgZ2V0IGZpcmVkIGZvciBJT1MgZGV2aWNlc1xuICAgIGlmIChcbiAgICAgIGV2ZW50VHlwZUlkID09PSBFdmVudFR5cGVDb25zdHMuTU9VU0VfQ0xJQ0sgfHxcbiAgICAgIGV2ZW50VHlwZUlkID09PSBFdmVudFR5cGVDb25zdHMuTU9VU0VfU0VDT05EX0NMSUNLXG4gICAgKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTM4IC0gVHlwZSAnbnVsbCcgY2Fubm90IGJlIHVzZWQgYXMgYW4gaW5kZXggdHlwZS5cbiAgICAgIGluamVjdGVkU2VsZWN0b3JzW3NlbGVjdG9yXSA9IHRydWU7XG4gICAgICBjc3NUZXh0ICs9XG4gICAgICAgIHNlbGVjdG9yICtcbiAgICAgICAgJ3snICtcbiAgICAgICAgJ2N1cnNvcjogcG9pbnRlcjsnICtcbiAgICAgICAgJ3RvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOycgK1xuICAgICAgICAnfSc7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNzc1RleHQpIHtcbiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckluaXRpYWxHcm91cCh7XG4gIHN0b3JlLFxuICBhY3Rpb25MaXN0SWQsXG4gIGV2ZW50SWQsXG59OiB7XG4gIHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmU7XG4gIGFjdGlvbkxpc3RJZDogbnVtYmVyO1xuICBldmVudElkOiBudW1iZXI7XG59KSB7XG4gIGNvbnN0IHtpeERhdGEsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7YWN0aW9uTGlzdHMsIGV2ZW50c30gPSBpeERhdGE7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ4IC0gJ2V2ZW50cycgaXMgcG9zc2libHkgJ3VuZGVmaW5lZCcuXG4gIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2V2ZW50SWRdO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0OCAtICdhY3Rpb25MaXN0cycgaXMgcG9zc2libHkgJ3VuZGVmaW5lZCcuXG4gIGNvbnN0IGFjdGlvbkxpc3QgPSBhY3Rpb25MaXN0c1thY3Rpb25MaXN0SWRdO1xuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBQcm9wZXJ0eSAndXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdBY3Rpb25MaXN0VHlwZScuXG4gIGlmIChhY3Rpb25MaXN0ICYmIGFjdGlvbkxpc3QudXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlKSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlSXRlbXMgPSBnZXQoXG4gICAgICBhY3Rpb25MaXN0LFxuICAgICAgJ2FjdGlvbkl0ZW1Hcm91cHNbMF0uYWN0aW9uSXRlbXMnLFxuICAgICAgW11cbiAgICApO1xuXG4gICAgLy8gQnlwYXNzIGluaXRpYWwgc3RhdGUgcmVuZGVyIGlmIGN1cnJlbnQgbWVkaWEgcXVlcnkgaXMgbm90IGxpc3RlZCBpbiBldmVudCBjb25maWdcbiAgICBjb25zdCBtZWRpYVF1ZXJpZXMgPSBnZXQoZXZlbnQsICdtZWRpYVF1ZXJpZXMnLCBpeERhdGEubWVkaWFRdWVyeUtleXMpO1xuICAgIGlmICghc2hvdWxkQWxsb3dNZWRpYVF1ZXJ5KG1lZGlhUXVlcmllcywgaXhTZXNzaW9uLm1lZGlhUXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5pdGlhbFN0YXRlSXRlbXMuZm9yRWFjaCgoYWN0aW9uSXRlbSkgPT4ge1xuICAgICAgY29uc3Qge2NvbmZpZzogaXRlbUNvbmZpZywgYWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBjb25zdCBjb25maWcgPVxuICAgICAgICAvLyBXaGVuIHVzZUV2ZW50VGFyZ2V0IGlzIGV4cGxpY2l0bHkgdHJ1ZSwgdXNlIGV2ZW50IHRhcmdldC90YXJnZXRzIHRvIHF1ZXJ5IGVsZW1lbnRzXG4gICAgICAgIC8vIEhvd2V2ZXIsIHNraXAgdGhpcyBjb25kaXRpb24gd2hlbiBvYmplY3RJZCBpcyBkZWZpbmVkXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBQcm9wZXJ0eSAndGFyZ2V0JyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICduZXZlcicuXG4gICAgICAgIGl0ZW1Db25maWc/LnRhcmdldD8udXNlRXZlbnRUYXJnZXQgPT09IHRydWUgJiZcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFByb3BlcnR5ICd0YXJnZXQnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgICAgICAgaXRlbUNvbmZpZz8udGFyZ2V0Py5vYmplY3RJZCA9PSBudWxsXG4gICAgICAgICAgPyAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0OCAtICdldmVudCcgaXMgcG9zc2libHkgJ3VuZGVmaW5lZCcuXG4gICAgICAgICAgICB7dGFyZ2V0OiBldmVudC50YXJnZXQsIHRhcmdldHM6IGV2ZW50LnRhcmdldHN9XG4gICAgICAgICAgOiBpdGVtQ29uZmlnO1xuICAgICAgY29uc3QgaXRlbUVsZW1lbnRzID0gZ2V0QWZmZWN0ZWRFbGVtZW50cyh7Y29uZmlnLCBldmVudCwgZWxlbWVudEFwaX0pO1xuICAgICAgY29uc3Qgc2hvdWxkVXNlUGx1Z2luID0gaXNQbHVnaW5UeXBlKGFjdGlvblR5cGVJZCk7XG5cbiAgICAgIGl0ZW1FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gc2hvdWxkVXNlUGx1Z2luXG4gICAgICAgICAgPyBjcmVhdGVQbHVnaW5JbnN0YW5jZShhY3Rpb25UeXBlSWQpPy4oZWxlbWVudCwgYWN0aW9uSXRlbSlcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNyZWF0ZUluc3RhbmNlKHtcbiAgICAgICAgICBkZXN0aW5hdGlvbjogZ2V0RGVzdGluYXRpb25WYWx1ZXMoXG4gICAgICAgICAgICB7ZWxlbWVudCwgYWN0aW9uSXRlbSwgZWxlbWVudEFwaX0sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBwbHVnaW5JbnN0YW5jZVxuICAgICAgICAgICksXG4gICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgICBhY3Rpb25JdGVtLFxuICAgICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgICBwbHVnaW5JbnN0YW5jZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcEFsbEFjdGlvbkdyb3Vwcyh7c3RvcmV9OiB7c3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZX0pIHtcbiAgY29uc3Qge2l4SW5zdGFuY2VzfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGZvckVhY2goaXhJbnN0YW5jZXMsIChpbnN0YW5jZSkgPT4ge1xuICAgIGlmICghaW5zdGFuY2UuY29udGludW91cykge1xuICAgICAgY29uc3Qge2FjdGlvbkxpc3RJZCwgdmVyYm9zZX0gPSBpbnN0YW5jZTtcbiAgICAgIHJlbW92ZUluc3RhbmNlKGluc3RhbmNlLCBzdG9yZSk7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkKHthY3Rpb25MaXN0SWQsIGlzUGxheWluZzogZmFsc2V9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wQWN0aW9uR3JvdXAoe1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgc3RvcmUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBldmVudElkLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgZXZlbnRUYXJnZXQsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBldmVudFN0YXRlS2V5LFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25MaXN0SWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkxpc3RJZCxcbn0pIHtcbiAgY29uc3Qge2l4SW5zdGFuY2VzLCBpeFNlc3Npb259ID0gc3RvcmUuZ2V0U3RhdGUoKTtcblxuICAvLyBDaGVjayBmb3IgZWxlbWVudCBib3VuZGFyeSBiZWZvcmUgc3RvcHBpbmcgZW5naW5lIGluc3RhbmNlc1xuICBjb25zdCBldmVudEVsZW1lbnRSb290ID1cbiAgICBpeFNlc3Npb24uaGFzQm91bmRhcnlOb2RlcyAmJiBldmVudFRhcmdldFxuICAgICAgPyBlbGVtZW50QXBpLmdldENsb3Nlc3RFbGVtZW50KGV2ZW50VGFyZ2V0LCBCT1VOREFSWV9TRUxFQ1RPUilcbiAgICAgIDogbnVsbDtcblxuICBmb3JFYWNoKGl4SW5zdGFuY2VzLCAoaW5zdGFuY2UpID0+IHtcbiAgICBjb25zdCBib3VuZGFyeU1vZGUgPSBnZXQoaW5zdGFuY2UsICdhY3Rpb25JdGVtLmNvbmZpZy50YXJnZXQuYm91bmRhcnlNb2RlJyk7XG4gICAgLy8gVmFsaWRhdGUgZXZlbnQga2V5IGlmIGV2ZW50U3RhdGVLZXkgd2FzIHByb3ZpZGVkLCBvdGhlcndpc2UgZGVmYXVsdCB0byB0cnVlXG4gICAgY29uc3QgdmFsaWRFdmVudEtleSA9IGV2ZW50U3RhdGVLZXlcbiAgICAgID8gaW5zdGFuY2UuZXZlbnRTdGF0ZUtleSA9PT0gZXZlbnRTdGF0ZUtleVxuICAgICAgOiB0cnVlO1xuICAgIC8vIFJlbW92ZSBlbmdpbmUgaW5zdGFuY2VzIHRoYXQgbWF0Y2ggdGhlIHJlcXVpcmVkIGlkc1xuICAgIGlmIChcbiAgICAgIGluc3RhbmNlLmFjdGlvbkxpc3RJZCA9PT0gYWN0aW9uTGlzdElkICYmXG4gICAgICBpbnN0YW5jZS5ldmVudElkID09PSBldmVudElkICYmXG4gICAgICB2YWxpZEV2ZW50S2V5XG4gICAgKSB7XG4gICAgICAvLyBBdm9pZCByZW1vdmFsIHdoZW4gcm9vdCBib3VuZGFyeSBkb2VzIG5vdCBjb250YWluIGluc3RhbmNlIGVsZW1lbnRcbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnRFbGVtZW50Um9vdCAmJlxuICAgICAgICBib3VuZGFyeU1vZGUgJiZcbiAgICAgICAgIWVsZW1lbnRBcGkuZWxlbWVudENvbnRhaW5zKGV2ZW50RWxlbWVudFJvb3QsIGluc3RhbmNlLmVsZW1lbnQpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3ZlSW5zdGFuY2UoaW5zdGFuY2UsIHN0b3JlKTtcbiAgICAgIGlmIChpbnN0YW5jZS52ZXJib3NlKSB7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIGFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWQoe2FjdGlvbkxpc3RJZCwgaXNQbGF5aW5nOiBmYWxzZX0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0QWN0aW9uR3JvdXAoe1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgc3RvcmUsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50SWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGV2ZW50SWQsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBldmVudFRhcmdldCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGV2ZW50U3RhdGVLZXksXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2FjdGlvbkxpc3RJZCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgYWN0aW9uTGlzdElkLFxuICBncm91cEluZGV4ID0gMCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGltbWVkaWF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHZlcmJvc2UsXG59KSB7XG4gIGNvbnN0IHtpeERhdGEsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcbiAgY29uc3QgZXZlbnQgPSBldmVudHNbZXZlbnRJZF0gfHwge307XG4gIGNvbnN0IHttZWRpYVF1ZXJpZXMgPSBpeERhdGEubWVkaWFRdWVyeUtleXN9ID0gZXZlbnQ7XG4gIGNvbnN0IGFjdGlvbkxpc3QgPSBnZXQoaXhEYXRhLCBgYWN0aW9uTGlzdHMuJHthY3Rpb25MaXN0SWR9YCwge30pO1xuICBjb25zdCB7YWN0aW9uSXRlbUdyb3VwcywgdXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlfSA9IGFjdGlvbkxpc3Q7XG4gIC8vIEFib3J0IHBsYXliYWNrIGlmIG5vIGFjdGlvbiBncm91cHNcbiAgaWYgKCFhY3Rpb25JdGVtR3JvdXBzIHx8ICFhY3Rpb25JdGVtR3JvdXBzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBSZXNldCB0byBmaXJzdCBncm91cCB3aGVuIGV2ZW50IGxvb3AgaXMgY29uZmlndXJlZFxuICBpZiAoZ3JvdXBJbmRleCA+PSBhY3Rpb25JdGVtR3JvdXBzLmxlbmd0aCAmJiBnZXQoZXZlbnQsICdjb25maWcubG9vcCcpKSB7XG4gICAgZ3JvdXBJbmRleCA9IDA7XG4gIH1cbiAgLy8gU2tpcCBpbml0aWFsIHN0YXRlIGdyb3VwIGR1cmluZyBhY3Rpb24gbGlzdCBwbGF5YmFjaywgYXMgaXQgc2hvdWxkIGFscmVhZHkgYmUgYXBwbGllZFxuICBpZiAoZ3JvdXBJbmRleCA9PT0gMCAmJiB1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGUpIHtcbiAgICBncm91cEluZGV4Kys7XG4gIH1cbiAgLy8gSWRlbnRpZnkgZmlyc3QgYW5pbWF0ZWQgZ3JvdXAgYW5kIGFwcGx5IHRoZSBpbml0aWFsIFF1aWNrRWZmZWN0IGRlbGF5XG4gIGNvbnN0IGlzRmlyc3RHcm91cCA9XG4gICAgZ3JvdXBJbmRleCA9PT0gMCB8fCAoZ3JvdXBJbmRleCA9PT0gMSAmJiB1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGUpO1xuICBjb25zdCBpbnN0YW5jZURlbGF5ID1cbiAgICBpc0ZpcnN0R3JvdXAgJiYgaXNRdWlja0VmZmVjdChldmVudC5hY3Rpb24/LmFjdGlvblR5cGVJZClcbiAgICAgID8gZXZlbnQuY29uZmlnLmRlbGF5XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAvLyBBYm9ydCBwbGF5YmFjayBpZiBubyBhY3Rpb24gaXRlbXMgZXhpc3QgYXQgZ3JvdXAgaW5kZXhcbiAgY29uc3QgYWN0aW9uSXRlbXMgPSBnZXQoYWN0aW9uSXRlbUdyb3VwcywgW2dyb3VwSW5kZXgsICdhY3Rpb25JdGVtcyddLCBbXSk7XG4gIGlmICghYWN0aW9uSXRlbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIEFib3J0IHBsYXliYWNrIGlmIGN1cnJlbnQgbWVkaWEgcXVlcnkgaXMgbm90IGxpc3RlZCBpbiBldmVudCBjb25maWdcbiAgaWYgKCFzaG91bGRBbGxvd01lZGlhUXVlcnkobWVkaWFRdWVyaWVzLCBpeFNlc3Npb24ubWVkaWFRdWVyeUtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gTGltaXQgYWZmZWN0ZWQgZWxlbWVudHMgd2hlbiBldmVudCB0YXJnZXQgaXMgd2l0aGluIGEgYm91bmRhcnkgbm9kZVxuICBjb25zdCBldmVudEVsZW1lbnRSb290ID1cbiAgICBpeFNlc3Npb24uaGFzQm91bmRhcnlOb2RlcyAmJiBldmVudFRhcmdldFxuICAgICAgPyBlbGVtZW50QXBpLmdldENsb3Nlc3RFbGVtZW50KGV2ZW50VGFyZ2V0LCBCT1VOREFSWV9TRUxFQ1RPUilcbiAgICAgIDogbnVsbDtcblxuICBjb25zdCBjYXJyaWVySW5kZXggPSBnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleChhY3Rpb25JdGVtcyk7XG4gIGxldCBncm91cFN0YXJ0UmVzdWx0ID0gZmFsc2U7XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnYWN0aW9uSXRlbScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkluZGV4JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBhY3Rpb25JdGVtcy5mb3JFYWNoKChhY3Rpb25JdGVtLCBhY3Rpb25JbmRleCkgPT4ge1xuICAgIGNvbnN0IHtjb25maWcsIGFjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuICAgIGNvbnN0IHNob3VsZFVzZVBsdWdpbiA9IGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpO1xuICAgIGNvbnN0IHt0YXJnZXR9ID0gY29uZmlnO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRSb290ID0gdGFyZ2V0LmJvdW5kYXJ5TW9kZSA/IGV2ZW50RWxlbWVudFJvb3QgOiBudWxsO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0QWZmZWN0ZWRFbGVtZW50cyh7XG4gICAgICBjb25maWcsXG4gICAgICBldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgZWxlbWVudFJvb3QsXG4gICAgICBlbGVtZW50QXBpLFxuICAgIH0pO1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGVsZW1lbnRJbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSBzaG91bGRVc2VQbHVnaW5cbiAgICAgICAgPyBjcmVhdGVQbHVnaW5JbnN0YW5jZShhY3Rpb25UeXBlSWQpPy4oZWxlbWVudCwgYWN0aW9uSXRlbSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgcGx1Z2luRHVyYXRpb24gPSBzaG91bGRVc2VQbHVnaW5cbiAgICAgICAgPyBnZXRQbHVnaW5EdXJhdGlvbihhY3Rpb25UeXBlSWQpKGVsZW1lbnQsIGFjdGlvbkl0ZW0pXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGdyb3VwU3RhcnRSZXN1bHQgPSB0cnVlO1xuICAgICAgY29uc3QgaXNDYXJyaWVyID0gY2FycmllckluZGV4ID09PSBhY3Rpb25JbmRleCAmJiBlbGVtZW50SW5kZXggPT09IDA7XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh7ZWxlbWVudCwgYWN0aW9uSXRlbX0pO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBnZXREZXN0aW5hdGlvblZhbHVlcyhcbiAgICAgICAge2VsZW1lbnQsIGFjdGlvbkl0ZW0sIGVsZW1lbnRBcGl9LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgcGx1Z2luSW5zdGFuY2VcbiAgICAgICk7XG5cbiAgICAgIGNyZWF0ZUluc3RhbmNlKHtcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICAgIGV2ZW50SWQsXG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICBldmVudFN0YXRlS2V5LFxuICAgICAgICBhY3Rpb25MaXN0SWQsXG4gICAgICAgIGdyb3VwSW5kZXgsXG4gICAgICAgIGlzQ2FycmllcixcbiAgICAgICAgY29tcHV0ZWRTdHlsZSxcbiAgICAgICAgZGVzdGluYXRpb24sXG4gICAgICAgIGltbWVkaWF0ZSxcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgcGx1Z2luSW5zdGFuY2UsXG4gICAgICAgIHBsdWdpbkR1cmF0aW9uLFxuICAgICAgICBpbnN0YW5jZURlbGF5LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZ3JvdXBTdGFydFJlc3VsdDtcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnb3B0aW9ucycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgY29uc3Qge3N0b3JlLCBjb21wdXRlZFN0eWxlLCAuLi5yZXN0fSA9IG9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGFjdGlvbkl0ZW0sXG5cbiAgICBpbW1lZGlhdGUsXG4gICAgcGx1Z2luSW5zdGFuY2UsXG5cbiAgICBjb250aW51b3VzLFxuXG4gICAgcmVzdGluZ1ZhbHVlLFxuICAgIGV2ZW50SWQsXG4gIH0gPSByZXN0O1xuICBjb25zdCBhdXRvU3RhcnQgPSAhY29udGludW91cztcbiAgY29uc3QgaW5zdGFuY2VJZCA9IGdldEluc3RhbmNlSWQoKTtcblxuICBjb25zdCB7aXhFbGVtZW50cywgaXhTZXNzaW9uLCBpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3QgZWxlbWVudElkID0gZ2V0RWxlbWVudElkKGl4RWxlbWVudHMsIGVsZW1lbnQpO1xuICBjb25zdCB7cmVmU3RhdGV9ID0gaXhFbGVtZW50c1tlbGVtZW50SWRdIHx8IHt9O1xuICBjb25zdCByZWZUeXBlID0gZWxlbWVudEFwaS5nZXRSZWZUeXBlKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHNraXBNb3Rpb24gPVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7IHJlYWRvbmx5IFRSQU5TRk9STV9NT1ZFOiB0cnVlOyByZWFkb25seSBUUkFOU0ZPUk1fU0NBTEU6IHRydWU7IHJlYWRvbmx5IFRSQU5TRk9STV9ST1RBVEU6IHRydWU7IHJlYWRvbmx5IFRSQU5TRk9STV9TS0VXOiB0cnVlOyByZWFkb25seSBTVFlMRV9TSVpFOiB0cnVlOyByZWFkb25seSBTVFlMRV9GSUxURVI6IHRydWU7IHJlYWRvbmx5IFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiB0cnVlOyB9Jy5cbiAgICBpeFNlc3Npb24ucmVkdWNlZE1vdGlvbiAmJiBSZWR1Y2VkTW90aW9uVHlwZXNbYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWRdO1xuICBsZXQgc2tpcFRvVmFsdWU7XG4gIGlmIChza2lwTW90aW9uICYmIGNvbnRpbnVvdXMpIHtcbiAgICBzd2l0Y2ggKGl4RGF0YS5ldmVudHNbZXZlbnRJZF0/LmV2ZW50VHlwZUlkKSB7XG4gICAgICBjYXNlIEV2ZW50VHlwZUNvbnN0cy5NT1VTRV9NT1ZFOlxuICAgICAgY2FzZSBFdmVudFR5cGVDb25zdHMuTU9VU0VfTU9WRV9JTl9WSUVXUE9SVDpcbiAgICAgICAgc2tpcFRvVmFsdWUgPSByZXN0aW5nVmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2tpcFRvVmFsdWUgPSAwLjU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9yaWdpbiA9IGdldEluc3RhbmNlT3JpZ2luKFxuICAgIGVsZW1lbnQsXG4gICAgcmVmU3RhdGUsXG4gICAgY29tcHV0ZWRTdHlsZSxcbiAgICBhY3Rpb25JdGVtLFxuICAgIGVsZW1lbnRBcGksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwbHVnaW5JbnN0YW5jZVxuICApO1xuXG4gIHN0b3JlLmRpc3BhdGNoKFxuICAgIGluc3RhbmNlQWRkZWQoe1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIGVsZW1lbnRJZCxcbiAgICAgIG9yaWdpbixcbiAgICAgIHJlZlR5cGUsXG4gICAgICBza2lwTW90aW9uLFxuICAgICAgc2tpcFRvVmFsdWUsXG4gICAgICAuLi5yZXN0LFxuICAgIH0pXG4gICk7XG5cbiAgZGlzcGF0Y2hDdXN0b21FdmVudChkb2N1bWVudC5ib2R5LCAnaXgyLWFuaW1hdGlvbi1zdGFydGVkJywgaW5zdGFuY2VJZCk7XG5cbiAgaWYgKGltbWVkaWF0ZSkge1xuICAgIHJlbmRlckltbWVkaWF0ZUluc3RhbmNlKHN0b3JlLCBpbnN0YW5jZUlkKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2l4SW5zdGFuY2VzJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIHNlbGVjdDogKHtpeEluc3RhbmNlc30pID0+IGl4SW5zdGFuY2VzW2luc3RhbmNlSWRdLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVJbnN0YW5jZUNoYW5nZSxcbiAgfSk7XG5cbiAgaWYgKGF1dG9TdGFydCkge1xuICAgIHN0b3JlLmRpc3BhdGNoKGluc3RhbmNlU3RhcnRlZChpbnN0YW5jZUlkLCBpeFNlc3Npb24udGljaykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUluc3RhbmNlKGluc3RhbmNlOiBhbnksIHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUpIHtcbiAgZGlzcGF0Y2hDdXN0b21FdmVudChkb2N1bWVudC5ib2R5LCAnaXgyLWFuaW1hdGlvbi1zdG9wcGluZycsIHtcbiAgICBpbnN0YW5jZUlkOiBpbnN0YW5jZS5pZCxcbiAgICBzdGF0ZTogc3RvcmUuZ2V0U3RhdGUoKSxcbiAgfSk7XG4gIGNvbnN0IHtlbGVtZW50SWQsIGFjdGlvbkl0ZW19ID0gaW5zdGFuY2U7XG4gIGNvbnN0IHtpeEVsZW1lbnRzfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtyZWYsIHJlZlR5cGV9ID0gaXhFbGVtZW50c1tlbGVtZW50SWRdIHx8IHt9O1xuICBpZiAocmVmVHlwZSA9PT0gSFRNTF9FTEVNRU5UKSB7XG4gICAgY2xlYW51cEhUTUxFbGVtZW50KHJlZiwgYWN0aW9uSXRlbSwgZWxlbWVudEFwaSk7XG4gIH1cbiAgc3RvcmUuZGlzcGF0Y2goaW5zdGFuY2VSZW1vdmVkKGluc3RhbmNlLmlkKSk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ3VzdG9tRXZlbnQoXG4gIGVsZW1lbnQ6IG51bGwgfCBIVE1MRWxlbWVudCxcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIGRldGFpbDpcbiAgICB8IHN0cmluZ1xuICAgIHwge1xuICAgICAgICBpbnN0YW5jZUlkOiBhbnk7XG4gICAgICAgIHN0YXRlOiBhbnk7XG4gICAgICB9XG4pIHtcbiAgY29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcbiAgZXZlbnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgdHJ1ZSwgZGV0YWlsKTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMTgwNDcgLSAnZWxlbWVudCcgaXMgcG9zc2libHkgJ251bGwnLlxuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJJbW1lZGlhdGVJbnN0YW5jZShcbiAgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSxcbiAgaW5zdGFuY2VJZDogc3RyaW5nXG4pIHtcbiAgY29uc3Qge2l4UGFyYW1ldGVyc30gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBzdG9yZS5kaXNwYXRjaChpbnN0YW5jZVN0YXJ0ZWQoaW5zdGFuY2VJZCwgMCkpO1xuICBzdG9yZS5kaXNwYXRjaChhbmltYXRpb25GcmFtZUNoYW5nZWQocGVyZm9ybWFuY2Uubm93KCksIGl4UGFyYW1ldGVycykpO1xuICBjb25zdCB7aXhJbnN0YW5jZXN9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgaGFuZGxlSW5zdGFuY2VDaGFuZ2UoaXhJbnN0YW5jZXNbaW5zdGFuY2VJZF0sIHN0b3JlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlSW5zdGFuY2VDaGFuZ2UoaW5zdGFuY2U6IGFueSwgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBjb25zdCB7XG4gICAgYWN0aXZlLFxuICAgIGNvbnRpbnVvdXMsXG4gICAgY29tcGxldGUsXG4gICAgZWxlbWVudElkLFxuICAgIGFjdGlvbkl0ZW0sXG4gICAgYWN0aW9uVHlwZUlkLFxuICAgIHJlbmRlclR5cGUsXG4gICAgY3VycmVudCxcbiAgICBncm91cEluZGV4LFxuICAgIGV2ZW50SWQsXG4gICAgZXZlbnRUYXJnZXQsXG4gICAgZXZlbnRTdGF0ZUtleSxcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgaXNDYXJyaWVyLFxuICAgIHN0eWxlUHJvcCxcbiAgICB2ZXJib3NlLFxuICAgIHBsdWdpbkluc3RhbmNlLFxuICB9ID0gaW5zdGFuY2U7XG5cbiAgLy8gQnlwYXNzIHJlbmRlciBpZiBjdXJyZW50IG1lZGlhIHF1ZXJ5IGlzIG5vdCBsaXN0ZWQgaW4gZXZlbnQgY29uZmlnXG4gIGNvbnN0IHtpeERhdGEsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcbiAgY29uc3QgZXZlbnQgPSBldmVudHMgJiYgZXZlbnRzW2V2ZW50SWRdID8gZXZlbnRzW2V2ZW50SWRdIDoge307XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSAgUHJvcGVydHkgJ21lZGlhUXVlcmllcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30gfCB1bmRlZmluZWQnLlxuICBjb25zdCB7bWVkaWFRdWVyaWVzID0gaXhEYXRhLm1lZGlhUXVlcnlLZXlzfSA9IGV2ZW50O1xuICBpZiAoIXNob3VsZEFsbG93TWVkaWFRdWVyeShtZWRpYVF1ZXJpZXMsIGl4U2Vzc2lvbi5tZWRpYVF1ZXJ5S2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb250aW51b3VzIHx8IGFjdGl2ZSB8fCBjb21wbGV0ZSkge1xuICAgIGlmIChjdXJyZW50IHx8IChyZW5kZXJUeXBlID09PSBSRU5ERVJfR0VORVJBTCAmJiBjb21wbGV0ZSkpIHtcbiAgICAgIC8vIFJlbmRlciBjdXJyZW50IHZhbHVlcyB0byByZWYgc3RhdGUgYW5kIGdyYWIgbGF0ZXN0XG4gICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgZWxlbWVudFN0YXRlQ2hhbmdlZChlbGVtZW50SWQsIGFjdGlvblR5cGVJZCwgY3VycmVudCwgYWN0aW9uSXRlbSlcbiAgICAgICk7XG4gICAgICBjb25zdCB7aXhFbGVtZW50c30gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgY29uc3Qge3JlZiwgcmVmVHlwZSwgcmVmU3RhdGV9ID0gaXhFbGVtZW50c1tlbGVtZW50SWRdIHx8IHt9O1xuICAgICAgY29uc3QgYWN0aW9uU3RhdGUgPSByZWZTdGF0ZSAmJiByZWZTdGF0ZVthY3Rpb25UeXBlSWRdO1xuXG4gICAgICAvLyBSZW5kZXIgSFRNTCBhbmQgcGx1Z2luIGVsZW1lbnRzXG4gICAgICBpZiAocmVmVHlwZSA9PT0gSFRNTF9FTEVNRU5UIHx8IGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpKSB7XG4gICAgICAgIHJlbmRlckhUTUxFbGVtZW50KFxuICAgICAgICAgIHJlZixcbiAgICAgICAgICByZWZTdGF0ZSxcbiAgICAgICAgICBhY3Rpb25TdGF0ZSxcbiAgICAgICAgICBldmVudElkLFxuICAgICAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICAgICAgc3R5bGVQcm9wLFxuICAgICAgICAgIGVsZW1lbnRBcGksXG4gICAgICAgICAgcmVuZGVyVHlwZSxcbiAgICAgICAgICBwbHVnaW5JbnN0YW5jZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb21wbGV0ZSkge1xuICAgICAgaWYgKGlzQ2Fycmllcikge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGdyb3VwSW5kZXg6IGFueTsgdmVyYm9zZTogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGdyb3VwSW5kZXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7IGltbWVkaWF0ZTogYW55OyB2ZXJib3NlOiBhbnk7IH0nLlxuICAgICAgICBjb25zdCBzdGFydGVkID0gc3RhcnRBY3Rpb25Hcm91cCh7XG4gICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgICBldmVudFN0YXRlS2V5LFxuICAgICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgICBncm91cEluZGV4OiBncm91cEluZGV4ICsgMSxcbiAgICAgICAgICB2ZXJib3NlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHZlcmJvc2UgJiYgIXN0YXJ0ZWQpIHtcbiAgICAgICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgIGFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWQoe2FjdGlvbkxpc3RJZCwgaXNQbGF5aW5nOiBmYWxzZX0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZW1vdmVJbnN0YW5jZShpbnN0YW5jZSwgc3RvcmUpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbIm9ic2VydmVSZXF1ZXN0cyIsInN0YXJ0QWN0aW9uR3JvdXAiLCJzdGFydEVuZ2luZSIsInN0b3BBY3Rpb25Hcm91cCIsInN0b3BBbGxBY3Rpb25Hcm91cHMiLCJzdG9wRW5naW5lIiwiUXVpY2tFZmZlY3RzSWRMaXN0IiwiT2JqZWN0Iiwia2V5cyIsIlF1aWNrRWZmZWN0SWRzIiwiaXNRdWlja0VmZmVjdCIsImFjdGlvblR5cGVJZCIsImluY2x1ZGVzIiwiQ09MT05fREVMSU1JVEVSIiwiQk9VTkRBUllfU0VMRUNUT1IiLCJIVE1MX0VMRU1FTlQiLCJSRU5ERVJfR0VORVJBTCIsIldfTU9EX0lYIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiZ2V0QWZmZWN0ZWRFbGVtZW50cyIsImdldEVsZW1lbnRJZCIsImdldERlc3RpbmF0aW9uVmFsdWVzIiwib2JzZXJ2ZVN0b3JlIiwiZ2V0SW5zdGFuY2VJZCIsInJlbmRlckhUTUxFbGVtZW50IiwiY2xlYXJBbGxTdHlsZXMiLCJnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleCIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRJbnN0YW5jZU9yaWdpbiIsInJlZHVjZUxpc3RUb0dyb3VwIiwic2hvdWxkTmFtZXNwYWNlRXZlbnRQYXJhbWV0ZXIiLCJnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQiLCJzaG91bGRBbGxvd01lZGlhUXVlcnkiLCJjbGVhbnVwSFRNTEVsZW1lbnQiLCJjbGVhck9iamVjdENhY2hlIiwic3RyaW5naWZ5VGFyZ2V0IiwibWVkaWFRdWVyaWVzRXF1YWwiLCJzaGFsbG93RXF1YWwiLCJJWDJWYW5pbGxhVXRpbHMiLCJpc1BsdWdpblR5cGUiLCJjcmVhdGVQbHVnaW5JbnN0YW5jZSIsImdldFBsdWdpbkR1cmF0aW9uIiwiSVgyVmFuaWxsYVBsdWdpbnMiLCJ1YSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIklTX01PQklMRV9TQUZBUkkiLCJtYXRjaCIsIlRIUk9UVExFRF9FVkVOVF9XQUlUIiwic3RvcmUiLCJzZWxlY3QiLCJpeFJlcXVlc3QiLCJwcmV2aWV3Iiwib25DaGFuZ2UiLCJoYW5kbGVQcmV2aWV3UmVxdWVzdCIsInBsYXliYWNrIiwiaGFuZGxlUGxheWJhY2tSZXF1ZXN0Iiwic3RvcCIsImhhbmRsZVN0b3BSZXF1ZXN0IiwiY2xlYXIiLCJoYW5kbGVDbGVhclJlcXVlc3QiLCJvYnNlcnZlTWVkaWFRdWVyeUNoYW5nZSIsIml4U2Vzc2lvbiIsIm1lZGlhUXVlcnlLZXkiLCJlbGVtZW50QXBpIiwiYWxsb3dFdmVudHMiLCJkaXNwYXRjaFBhZ2VVcGRhdGVFdmVudCIsIm9ic2VydmVPbmVSZW5kZXJUaWNrIiwib25UaWNrIiwidW5zdWJzY3JpYmUiLCJ0aWNrIiwicmF3RGF0YSIsImRlZmVyIiwic3RhcnQiLCJzZXRUaW1lb3V0IiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJhY3Rpb25MaXN0SWQiLCJhY3Rpb25JdGVtSWQiLCJldmVudElkIiwiaW1tZWRpYXRlIiwidGVzdE1hbnVhbCIsInZlcmJvc2UiLCJhY3Rpb25MaXN0IiwiYWN0aW9uTGlzdHMiLCJBY3Rpb25UeXBlQ29uc3RzIiwiR0VORVJBTF9TVEFSVF9BQ1RJT04iLCJyZW5kZXJJbml0aWFsR3JvdXAiLCJzdGFydGVkIiwiZGlzcGF0Y2giLCJhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkIiwiaXNQbGF5aW5nIiwic3RhdGUiLCJnZXRTdGF0ZSIsInJhd0RhdGFJbXBvcnRlZCIsImFjdGl2ZSIsInNlc3Npb25Jbml0aWFsaXplZCIsImhhc0JvdW5kYXJ5Tm9kZXMiLCJCb29sZWFuIiwicXVlcnlTZWxlY3RvciIsInJlZHVjZWRNb3Rpb24iLCJib2R5IiwiaGFzQXR0cmlidXRlIiwid2luZG93IiwibWF0Y2hNZWRpYSIsIm1hdGNoZXMiLCJiaW5kRXZlbnRzIiwiYWRkRG9jdW1lbnRDbGFzcyIsImhhc0RlZmluZWRNZWRpYVF1ZXJpZXMiLCJzZXNzaW9uU3RhcnRlZCIsInN0YXJ0UmVuZGVyTG9vcCIsImRvY3VtZW50RWxlbWVudCIsImNsYXNzTmFtZSIsImluZGV4T2YiLCJoYW5kbGVGcmFtZSIsIm5vdyIsIml4UGFyYW1ldGVycyIsImFuaW1hdGlvbkZyYW1lQ2hhbmdlZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBlcmZvcm1hbmNlIiwiZXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiY2xlYXJFdmVudExpc3RlbmVyIiwic2Vzc2lvblN0b3BwZWQiLCJ0YXJnZXQiLCJsaXN0ZW5lclBhcmFtcyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhcHBseSIsImNyZWF0ZUdyb3VwSW5zdGFuY2VzIiwiZXZlbnRTdGF0ZUtleSIsImV2ZW50VGFyZ2V0IiwiZXZlbnRDb25maWciLCJwYXJhbWV0ZXJHcm91cCIsInNtb290aGluZyIsInJlc3RpbmdWYWx1ZSIsIml4RGF0YSIsImV2ZW50cyIsImV2ZW50IiwiZXZlbnRUeXBlSWQiLCJ0YXJnZXRDYWNoZSIsImluc3RhbmNlQWN0aW9uR3JvdXBzIiwiaW5zdGFuY2VDb25maWdzIiwiY29udGludW91c0FjdGlvbkdyb3VwcyIsImlkIiwicGFyYW1ldGVySWQiLCJldmVudEVsZW1lbnRSb290IiwiZ2V0Q2xvc2VzdEVsZW1lbnQiLCJhY3Rpb25Hcm91cCIsImtleWZyYW1lIiwiYWN0aW9uSXRlbXMiLCJhY3Rpb25JdGVtIiwiY29uZmlnIiwiZWxlbWVudFJvb3QiLCJib3VuZGFyeU1vZGUiLCJrZXkiLCJhcHBlbmRBY3Rpb25JdGVtIiwiZWxlbWVudCIsInB1c2giLCJhY3Rpb25Hcm91cHMiLCJnZXQiLCJzaG91bGRVc2VQbHVnaW4iLCJQTFVHSU5fUklWRSIsInNlbGVjdG9yR3VpZHMiLCJsZW5ndGgiLCJwbHVnaW5JbnN0YW5jZSIsImRlc3RpbmF0aW9uIiwiY3JlYXRlSW5zdGFuY2UiLCJjb250aW51b3VzIiwibmV3QWN0aW9uR3JvdXBzIiwiZ3JvdXBJbmRleCIsInNvbWUiLCJncm91cCIsImluZGV4IiwiZXZlbnRUeXBlTWFwIiwidXBkYXRlVmlld3BvcnRXaWR0aCIsImxvZ2ljIiwiSVgyVmFuaWxsYUV2ZW50cyIsImNvbnNvbGUiLCJ3YXJuIiwiYmluZEV2ZW50VHlwZSIsImJpbmRSZXNpemVFdmVudHMiLCJXSU5ET1dfUkVTSVpFX0VWRU5UUyIsImhhbmRsZVJlc2l6ZSIsInR5cGUiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnRMaXN0ZW5lckFkZGVkIiwid2lkdGgiLCJpbm5lcldpZHRoIiwidmlld3BvcnRXaWR0aCIsIm1lZGlhUXVlcmllcyIsInZpZXdwb3J0V2lkdGhDaGFuZ2VkIiwibWFwRm91bmRWYWx1ZXMiLCJvYmplY3QiLCJpdGVyYXRlZSIsIm9taXRCeSIsIm1hcFZhbHVlcyIsImlzRW1wdHkiLCJmb3JFYWNoRXZlbnRUYXJnZXQiLCJldmVudFRhcmdldHMiLCJldmVudENhbGxiYWNrIiwiZWxlbWVudHMiLCJnZXRBZmZlY3RlZEZvckV2ZW50IiwidGFyZ2V0cyIsImluamVjdEJlaGF2aW9yQ1NTRml4ZXMiLCJ0eXBlcyIsImV2ZW50VHlwZXMiLCJoYW5kbGVyIiwiZXZlbnRIYW5kbGVyIiwic2l6ZSIsImFjdGlvbiIsImV2ZW50QWN0aW9uIiwibWVkaWFRdWVyeUtleXMiLCJtZWRpYVF1ZXJpZXNEZWZpbmVkIiwiR0VORVJBTF9DT05USU5VT1VTX0FDVElPTiIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCIsInBhcmFtR3JvdXBzIiwiZmluZCIsInJlc3RpbmdTdGF0ZSIsImhhbmRsZUV2ZW50IiwibmF0aXZlRXZlbnQiLCJvbGRTdGF0ZSIsImV2ZW50U3RhdGUiLCJoYW5kbGVFdmVudFdpdGhDb25maWciLCJuZXdTdGF0ZSIsImV2ZW50U3RhdGVDaGFuZ2VkIiwiaGFuZGxlRXZlbnRUaHJvdHRsZWQiLCJ0aHJvdHRsZSIsImFkZExpc3RlbmVycyIsInNob3VsZFRocm90dGxlIiwic3BsaXQiLCJmaWx0ZXIiLCJoYW5kbGVyRnVuYyIsImluamVjdGVkU2VsZWN0b3JzIiwiY3NzVGV4dCIsInNlbGVjdG9yIiwiZ2V0UXVlcnlTZWxlY3RvciIsIkV2ZW50VHlwZUNvbnN0cyIsIk1PVVNFX0NMSUNLIiwiTU9VU0VfU0VDT05EX0NMSUNLIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJhcHBlbmRDaGlsZCIsInVzZUZpcnN0R3JvdXBBc0luaXRpYWxTdGF0ZSIsImluaXRpYWxTdGF0ZUl0ZW1zIiwiaXRlbUNvbmZpZyIsInVzZUV2ZW50VGFyZ2V0Iiwib2JqZWN0SWQiLCJpdGVtRWxlbWVudHMiLCJpeEluc3RhbmNlcyIsImluc3RhbmNlIiwicmVtb3ZlSW5zdGFuY2UiLCJ2YWxpZEV2ZW50S2V5IiwiZWxlbWVudENvbnRhaW5zIiwiYWN0aW9uSXRlbUdyb3VwcyIsImlzRmlyc3RHcm91cCIsImluc3RhbmNlRGVsYXkiLCJkZWxheSIsInVuZGVmaW5lZCIsImNhcnJpZXJJbmRleCIsImdyb3VwU3RhcnRSZXN1bHQiLCJhY3Rpb25JbmRleCIsImVsZW1lbnRJbmRleCIsInBsdWdpbkR1cmF0aW9uIiwiaXNDYXJyaWVyIiwiY29tcHV0ZWRTdHlsZSIsIm9wdGlvbnMiLCJyZXN0IiwiYXV0b1N0YXJ0IiwiaW5zdGFuY2VJZCIsIml4RWxlbWVudHMiLCJlbGVtZW50SWQiLCJyZWZTdGF0ZSIsInJlZlR5cGUiLCJnZXRSZWZUeXBlIiwic2tpcE1vdGlvbiIsIlJlZHVjZWRNb3Rpb25UeXBlcyIsInNraXBUb1ZhbHVlIiwiTU9VU0VfTU9WRSIsIk1PVVNFX01PVkVfSU5fVklFV1BPUlQiLCJvcmlnaW4iLCJpbnN0YW5jZUFkZGVkIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsInJlbmRlckltbWVkaWF0ZUluc3RhbmNlIiwiaGFuZGxlSW5zdGFuY2VDaGFuZ2UiLCJpbnN0YW5jZVN0YXJ0ZWQiLCJyZWYiLCJpbnN0YW5jZVJlbW92ZWQiLCJldmVudE5hbWUiLCJkZXRhaWwiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b21FdmVudCIsImNvbXBsZXRlIiwicmVuZGVyVHlwZSIsImN1cnJlbnQiLCJzdHls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 }), 8955: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "default", ({ enumerable: true, get: function() { return _default; } })); const _flow = /*#__PURE__*/ _interop_require_default(__webpack_require__(5801)); const _get = /*#__PURE__*/ _interop_require_default(__webpack_require__(4738)); const _clamp = /*#__PURE__*/ _interop_require_default(__webpack_require__(3789)); const _sharedconstants = __webpack_require__(7087); const _IX2VanillaEngine = __webpack_require__(1970); const _IX2EngineActions = __webpack_require__(3946); const _shared = __webpack_require__(9468); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const { MOUSE_CLICK, MOUSE_SECOND_CLICK, MOUSE_DOWN, MOUSE_UP, MOUSE_OVER, MOUSE_OUT, DROPDOWN_CLOSE, DROPDOWN_OPEN, SLIDER_ACTIVE, SLIDER_INACTIVE, TAB_ACTIVE, TAB_INACTIVE, NAVBAR_CLOSE, NAVBAR_OPEN, MOUSE_MOVE, PAGE_SCROLL_DOWN, SCROLL_INTO_VIEW, SCROLL_OUT_OF_VIEW, PAGE_SCROLL_UP, SCROLLING_IN_VIEW, PAGE_FINISH, ECOMMERCE_CART_CLOSE, ECOMMERCE_CART_OPEN, PAGE_START, PAGE_SCROLL } = _sharedconstants.EventTypeConsts; const COMPONENT_ACTIVE = 'COMPONENT_ACTIVE'; const COMPONENT_INACTIVE = 'COMPONENT_INACTIVE'; const { COLON_DELIMITER } = _sharedconstants.IX2EngineConstants; const { getNamespacedParameterId } = _shared.IX2VanillaUtils; const composableFilter = (predicate)=>(options)=>{ if (typeof options === 'object' && predicate(options)) { return true; } return options; }; const isElement = composableFilter(({ element, nativeEvent })=>{ return element === nativeEvent.target; }); const containsElement = composableFilter(({ element, nativeEvent })=>{ return element.contains(nativeEvent.target); }); const isOrContainsElement = (0, _flow.default)([ isElement, containsElement ]); const getAutoStopEvent = (store, autoStopEventId)=>{ if (autoStopEventId) { const { ixData } = store.getState(); const { events } = ixData; const eventToStop = events[autoStopEventId]; // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ readonly PAGE_START: "PAGE_START"; readonly PAGE_FINISH: "PAGE_FINISH"; }'. if (eventToStop && !AUTO_STOP_DISABLED_EVENTS[eventToStop.eventTypeId]) { return eventToStop; } } return null; }; // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type. const hasAutoStopEvent = ({ store, event })=>{ const { action: eventAction } = event; const { autoStopEventId } = eventAction.config; return Boolean(getAutoStopEvent(store, autoStopEventId)); }; // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'eventStateKey' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. const actionGroupCreator = ({ store, event, element, eventStateKey }, state)=>{ const { action: eventAction, id: eventId } = event; const { actionListId, autoStopEventId } = eventAction.config; const eventToStop = getAutoStopEvent(store, autoStopEventId); if (eventToStop) { (0, _IX2VanillaEngine.stopActionGroup)({ store, eventId: autoStopEventId, eventTarget: element, eventStateKey: autoStopEventId + COLON_DELIMITER + eventStateKey.split(COLON_DELIMITER)[1], actionListId: (0, _get.default)(eventToStop, 'action.config.actionListId') }); } (0, _IX2VanillaEngine.stopActionGroup)({ store, eventId, eventTarget: element, eventStateKey, actionListId }); // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'. (0, _IX2VanillaEngine.startActionGroup)({ store, eventId, eventTarget: element, eventStateKey, actionListId }); return state; }; // @ts-expect-error - TS7006 - Parameter 'filter' implicitly has an 'any' type. | TS7006 - Parameter 'handler' implicitly has an 'any' type. const withFilter = (filter, handler)=>(options, state)=>filter(options, state) === true ? handler(options, state) : state; const baseActionGroupOptions = { handler: withFilter(isOrContainsElement, actionGroupCreator) }; const baseActivityActionGroupOptions = { ...baseActionGroupOptions, types: [ COMPONENT_ACTIVE, COMPONENT_INACTIVE ].join(' ') }; const SCROLL_EVENT_TYPES = [ { target: window, types: 'resize orientationchange', throttle: true }, { target: document, types: 'scroll wheel readystatechange IX2_PAGE_UPDATE', throttle: true } ]; const MOUSE_OVER_OUT_TYPES = 'mouseover mouseout'; const baseScrollActionGroupOptions = { types: SCROLL_EVENT_TYPES }; const AUTO_STOP_DISABLED_EVENTS = { PAGE_START, PAGE_FINISH }; const getDocumentState = (()=>{ const supportOffset = window.pageXOffset !== undefined; const isCSS1Compat = document.compatMode === 'CSS1Compat'; const rootElement = isCSS1Compat ? document.documentElement : document.body; return ()=>({ scrollLeft: supportOffset ? window.pageXOffset : rootElement.scrollLeft, scrollTop: supportOffset ? window.pageYOffset : rootElement.scrollTop, // required to remove elasticity in Safari scrolling. stiffScrollTop: (0, _clamp.default)(supportOffset ? window.pageYOffset : rootElement.scrollTop, 0, rootElement.scrollHeight - window.innerHeight), scrollWidth: rootElement.scrollWidth, scrollHeight: rootElement.scrollHeight, clientWidth: rootElement.clientWidth, clientHeight: rootElement.clientHeight, innerWidth: window.innerWidth, innerHeight: window.innerHeight }); })(); const areBoxesIntersecting = (a, b)=>!(a.left > b.right || a.right < b.left || a.top > b.bottom || a.bottom < b.top); // @ts-expect-error - TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'nativeEvent' implicitly has an 'any' type. const isElementHovered = ({ element, nativeEvent })=>{ const { type, target, relatedTarget } = nativeEvent; const containsTarget = element.contains(target); if (type === 'mouseover' && containsTarget) { return true; } const containsRelated = element.contains(relatedTarget); if (type === 'mouseout' && containsTarget && containsRelated) { return true; } return false; }; const isElementVisible = (options)=>{ const { element, event: { config } } = options; const { clientWidth, clientHeight } = getDocumentState(); const scrollOffsetValue = config.scrollOffsetValue; const scrollOffsetUnit = config.scrollOffsetUnit; const isPX = scrollOffsetUnit === 'PX'; const offsetPadding = isPX ? scrollOffsetValue : clientHeight * (scrollOffsetValue || 0) / 100; return areBoxesIntersecting(element.getBoundingClientRect(), { left: 0, top: offsetPadding, right: clientWidth, bottom: clientHeight - offsetPadding }); }; const whenComponentActiveChange = // @ts-expect-error - TS7006 - Parameter 'handler' implicitly has an 'any' type. (handler)=>(options, oldState)=>{ const { type } = options.nativeEvent; // prettier-ignore const isActive = [ COMPONENT_ACTIVE, COMPONENT_INACTIVE ].indexOf(type) !== -1 ? type === COMPONENT_ACTIVE : oldState.isActive; const newState = { ...oldState, isActive }; if (!oldState || newState.isActive !== oldState.isActive) { return handler(options, newState) || newState; } return newState; }; const whenElementHoverChange = (handler)=>(options, oldState)=>{ const newState = { elementHovered: isElementHovered(options) }; if (oldState ? newState.elementHovered !== oldState.elementHovered : newState.elementHovered) { // @ts-expect-error - TS1345 - An expression of type 'void' cannot be tested for truthiness. return handler(options, newState) || newState; } return newState; }; const whenElementVisibiltyChange = (handler)=>(options, oldState)=>{ const newState = { ...oldState, elementVisible: isElementVisible(options) }; if (oldState ? newState.elementVisible !== oldState.elementVisible : newState.elementVisible) { return handler(options, newState) || newState; } return newState; }; const whenScrollDirectionChange = // @ts-expect-error - TS7006 - Parameter 'handler' implicitly has an 'any' type. (handler)=>(options, oldState = {})=>{ const { stiffScrollTop: scrollTop, scrollHeight, innerHeight } = getDocumentState(); const { event: { config, eventTypeId } } = options; const { scrollOffsetValue, scrollOffsetUnit } = config; const isPX = scrollOffsetUnit === 'PX'; const scrollHeightBounds = scrollHeight - innerHeight; // percent top since innerHeight may change for mobile devices which also changes the scrollTop value. const percentTop = Number((scrollTop / scrollHeightBounds).toFixed(2)); // no state change // @ts-expect-error - TS2339 - Property 'percentTop' does not exist on type '{}'. if (oldState && oldState.percentTop === percentTop) { return oldState; } const scrollTopPadding = (isPX ? scrollOffsetValue : innerHeight * (scrollOffsetValue || 0) / 100) / scrollHeightBounds; let scrollingDown; let scrollDirectionChanged; let anchorTop = 0; if (oldState) { // @ts-expect-error - TS2339 - Property 'percentTop' does not exist on type '{}'. scrollingDown = percentTop > oldState.percentTop; // @ts-expect-error - TS2339 - Property 'scrollingDown' does not exist on type '{}'. scrollDirectionChanged = oldState.scrollingDown !== scrollingDown; // @ts-expect-error - TS2339 - Property 'anchorTop' does not exist on type '{}'. anchorTop = scrollDirectionChanged ? percentTop : oldState.anchorTop; } const inBounds = eventTypeId === PAGE_SCROLL_DOWN ? percentTop >= anchorTop + scrollTopPadding : percentTop <= anchorTop - scrollTopPadding; const newState = { ...oldState, percentTop, inBounds, anchorTop, scrollingDown }; if (oldState && inBounds && // @ts-expect-error - TS2339 - Property 'inBounds' does not exist on type '{}'. (scrollDirectionChanged || newState.inBounds !== oldState.inBounds)) { return handler(options, newState) || newState; } return newState; }; const pointIntersects = (point, rect)=>point.left > rect.left && point.left < rect.right && point.top > rect.top && point.top < rect.bottom; const whenPageLoadFinish = (handler)=>(options, oldState)=>{ const newState = { finished: document.readyState === 'complete' }; if (newState.finished && !(oldState && oldState.finshed)) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. handler(options); } return newState; }; const whenPageLoadStart = (handler)=>(options, oldState)=>{ const newState = { started: true }; if (!oldState) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. handler(options); } return newState; }; const whenClickCountChange = (handler)=>(options, oldState = { clickCount: 0 })=>{ const newState = { clickCount: oldState.clickCount % 2 + 1 }; if (newState.clickCount !== oldState.clickCount) { // @ts-expect-error - TS1345 - An expression of type 'void' cannot be tested for truthiness. return handler(options, newState) || newState; } return newState; }; const getComponentActiveOptions = (allowNestedChildrenEvents = true)=>({ ...baseActivityActionGroupOptions, handler: withFilter(allowNestedChildrenEvents ? isOrContainsElement : isElement, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. whenComponentActiveChange((options, state)=>{ return state.isActive ? baseActionGroupOptions.handler(options, state) : state; })) }); const getComponentInactiveOptions = (allowNestedChildrenEvents = true)=>({ ...baseActivityActionGroupOptions, handler: withFilter(allowNestedChildrenEvents ? isOrContainsElement : isElement, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. whenComponentActiveChange((options, state)=>{ return !state.isActive ? baseActionGroupOptions.handler(options, state) : state; })) }); const scrollIntoOutOfViewOptions = { ...baseScrollActionGroupOptions, handler: whenElementVisibiltyChange((options, state)=>{ const { elementVisible } = state; const { event, store } = options; const { ixData } = store.getState(); const { events } = ixData; // trigger the handler only once if only one of SCROLL_INTO or SCROLL_OUT_OF event types // are registered. if (!events[event.action.config.autoStopEventId] && state.triggered) { return state; } if (event.eventTypeId === SCROLL_INTO_VIEW === elementVisible) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); return { ...state, triggered: true }; } else { return state; } }) }; const MOUSE_OUT_ROUND_THRESHOLD = 0.05; const _default = { [SLIDER_ACTIVE]: getComponentActiveOptions(), [SLIDER_INACTIVE]: getComponentInactiveOptions(), [DROPDOWN_OPEN]: getComponentActiveOptions(), [DROPDOWN_CLOSE]: getComponentInactiveOptions(), // navbar elements may contain nested components in the menu. To prevent activity misfires, only listed for activity // events where the target is the navbar element, and ignore children that dispatch activitiy events. [NAVBAR_OPEN]: getComponentActiveOptions(false), [NAVBAR_CLOSE]: getComponentInactiveOptions(false), [TAB_ACTIVE]: getComponentActiveOptions(), [TAB_INACTIVE]: getComponentInactiveOptions(), [ECOMMERCE_CART_OPEN]: { types: 'ecommerce-cart-open', handler: withFilter(isOrContainsElement, actionGroupCreator) }, [ECOMMERCE_CART_CLOSE]: { types: 'ecommerce-cart-close', handler: withFilter(isOrContainsElement, actionGroupCreator) }, [MOUSE_CLICK]: { types: 'click', handler: withFilter(isOrContainsElement, whenClickCountChange((options, { clickCount })=>{ if (hasAutoStopEvent(options)) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. clickCount === 1 && actionGroupCreator(options); } else { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } })) }, [MOUSE_SECOND_CLICK]: { types: 'click', handler: withFilter(isOrContainsElement, whenClickCountChange((options, { clickCount })=>{ if (clickCount === 2) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } })) }, [MOUSE_DOWN]: { ...baseActionGroupOptions, types: 'mousedown' }, [MOUSE_UP]: { ...baseActionGroupOptions, types: 'mouseup' }, [MOUSE_OVER]: { types: MOUSE_OVER_OUT_TYPES, handler: withFilter(isOrContainsElement, whenElementHoverChange((options, state)=>{ if (state.elementHovered) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } })) }, [MOUSE_OUT]: { types: MOUSE_OVER_OUT_TYPES, handler: withFilter(isOrContainsElement, whenElementHoverChange((options, state)=>{ if (!state.elementHovered) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } })) }, [MOUSE_MOVE]: { types: 'mousemove mouseout scroll', handler: (// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error { store, element, eventConfig, nativeEvent, eventStateKey }, state = { clientX: 0, clientY: 0, pageX: 0, pageY: 0 })=>{ const { basedOn, selectedAxis, continuousParameterGroupId, reverse, restingState = 0 } = eventConfig; const { clientX = state.clientX, clientY = state.clientY, pageX = state.pageX, pageY = state.pageY } = nativeEvent; const isXAxis = selectedAxis === 'X_AXIS'; const isMouseOut = nativeEvent.type === 'mouseout'; let value = restingState / 100; let namespacedParameterId = continuousParameterGroupId; let elementHovered = false; switch(basedOn){ case _sharedconstants.EventBasedOn.VIEWPORT: { value = isXAxis ? Math.min(clientX, window.innerWidth) / window.innerWidth : Math.min(clientY, window.innerHeight) / window.innerHeight; break; } // @ts-expect-error - TS2339 - Property 'PAGE' does not exist on type '{ readonly ELEMENT: "ELEMENT"; readonly VIEWPORT: "VIEWPORT"; }'. case _sharedconstants.EventBasedOn.PAGE: { const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = getDocumentState(); value = isXAxis ? Math.min(scrollLeft + pageX, scrollWidth) / scrollWidth : Math.min(scrollTop + pageY, scrollHeight) / scrollHeight; break; } case _sharedconstants.EventBasedOn.ELEMENT: default: { namespacedParameterId = getNamespacedParameterId(eventStateKey, continuousParameterGroupId); const isMouseEvent = nativeEvent.type.indexOf('mouse') === 0; // Use isOrContainsElement for mouse events since they are fired from the target if (isMouseEvent && isOrContainsElement({ element, nativeEvent }) !== true) { break; } const rect = element.getBoundingClientRect(); const { left, top, width, height } = rect; // Otherwise we'll need to calculate the mouse position from the previous handler state // against the target element's rect if (!isMouseEvent && !pointIntersects({ left: clientX, top: clientY }, rect)) { break; } elementHovered = true; value = isXAxis ? (clientX - left) / width : (clientY - top) / height; break; } } // cover case where the event is a mouse out, but the value is not quite at 100% if (isMouseOut && (value > 1 - MOUSE_OUT_ROUND_THRESHOLD || value < MOUSE_OUT_ROUND_THRESHOLD)) { value = Math.round(value); } // Only update based on element if the mouse is moving over or has just left the element if (basedOn !== _sharedconstants.EventBasedOn.ELEMENT || elementHovered || // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error elementHovered !== state.elementHovered) { value = reverse ? 1 - value : value; store.dispatch((0, _IX2EngineActions.parameterChanged)(namespacedParameterId, value)); } return { elementHovered, clientX, clientY, pageX, pageY }; } }, [PAGE_SCROLL]: { types: SCROLL_EVENT_TYPES, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error handler: ({ store, eventConfig })=>{ const { continuousParameterGroupId, reverse } = eventConfig; const { scrollTop, scrollHeight, clientHeight } = getDocumentState(); let value = scrollTop / (scrollHeight - clientHeight); value = reverse ? 1 - value : value; store.dispatch((0, _IX2EngineActions.parameterChanged)(continuousParameterGroupId, value)); } }, [SCROLLING_IN_VIEW]: { types: SCROLL_EVENT_TYPES, handler: (// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error { element, store, eventConfig, eventStateKey }, state = { scrollPercent: 0 })=>{ const { scrollLeft, scrollTop, scrollWidth, scrollHeight, clientHeight: visibleHeight } = getDocumentState(); const { basedOn, selectedAxis, continuousParameterGroupId, startsEntering, startsExiting, addEndOffset, addStartOffset, addOffsetValue = 0, endOffsetValue = 0 } = eventConfig; const isXAxis = selectedAxis === 'X_AXIS'; if (basedOn === _sharedconstants.EventBasedOn.VIEWPORT) { const value = isXAxis ? scrollLeft / scrollWidth : scrollTop / scrollHeight; if (value !== state.scrollPercent) { store.dispatch((0, _IX2EngineActions.parameterChanged)(continuousParameterGroupId, value)); } return { scrollPercent: value }; } else { const namespacedParameterId = getNamespacedParameterId(eventStateKey, continuousParameterGroupId); const elementRect = element.getBoundingClientRect(); let offsetStartPerc = (addStartOffset ? addOffsetValue : 0) / 100; let offsetEndPerc = (addEndOffset ? endOffsetValue : 0) / 100; // flip the offset percentages depending on start / exit type offsetStartPerc = startsEntering ? offsetStartPerc : 1 - offsetStartPerc; offsetEndPerc = startsExiting ? offsetEndPerc : 1 - offsetEndPerc; const offsetElementTop = elementRect.top + Math.min(elementRect.height * offsetStartPerc, visibleHeight); const offsetElementBottom = elementRect.top + elementRect.height * offsetEndPerc; const offsetHeight = offsetElementBottom - offsetElementTop; const fixedScrollHeight = Math.min(visibleHeight + offsetHeight, scrollHeight); const fixedScrollTop = Math.min(Math.max(0, visibleHeight - offsetElementTop), fixedScrollHeight); const fixedScrollPerc = fixedScrollTop / fixedScrollHeight; if (fixedScrollPerc !== state.scrollPercent) { store.dispatch((0, _IX2EngineActions.parameterChanged)(namespacedParameterId, fixedScrollPerc)); } return { scrollPercent: fixedScrollPerc }; } } }, [SCROLL_INTO_VIEW]: scrollIntoOutOfViewOptions, [SCROLL_OUT_OF_VIEW]: scrollIntoOutOfViewOptions, [PAGE_SCROLL_DOWN]: { ...baseScrollActionGroupOptions, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. handler: whenScrollDirectionChange((options, state)=>{ if (state.scrollingDown) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } }) }, [PAGE_SCROLL_UP]: { ...baseScrollActionGroupOptions, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. handler: whenScrollDirectionChange((options, state)=>{ if (!state.scrollingDown) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } }) }, [PAGE_FINISH]: { types: 'readystatechange IX2_PAGE_UPDATE', handler: withFilter(isElement, whenPageLoadFinish(actionGroupCreator)) }, [PAGE_START]: { types: 'readystatechange IX2_PAGE_UPDATE', handler: withFilter(isElement, whenPageLoadStart(actionGroupCreator)) } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhbmlsbGFFdmVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5pbXBvcnQgZmxvdyBmcm9tICdsb2Rhc2gvZmxvdyc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IGNsYW1wIGZyb20gJ2xvZGFzaC9jbGFtcCc7XG5cbmltcG9ydCB7XG4gIEV2ZW50VHlwZUNvbnN0cyxcbiAgRXZlbnRCYXNlZE9uLFxuICBJWDJFbmdpbmVDb25zdGFudHMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuaW1wb3J0IHtzdG9wQWN0aW9uR3JvdXAsIHN0YXJ0QWN0aW9uR3JvdXB9IGZyb20gJy4vSVgyVmFuaWxsYUVuZ2luZSc7XG5pbXBvcnQge3BhcmFtZXRlckNoYW5nZWR9IGZyb20gJy4uL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5pbXBvcnQge0lYMlZhbmlsbGFVdGlsc30gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZCc7XG5cbmNvbnN0IHtcbiAgTU9VU0VfQ0xJQ0ssXG4gIE1PVVNFX1NFQ09ORF9DTElDSyxcbiAgTU9VU0VfRE9XTixcbiAgTU9VU0VfVVAsXG4gIE1PVVNFX09WRVIsXG4gIE1PVVNFX09VVCxcbiAgRFJPUERPV05fQ0xPU0UsXG4gIERST1BET1dOX09QRU4sXG4gIFNMSURFUl9BQ1RJVkUsXG4gIFNMSURFUl9JTkFDVElWRSxcbiAgVEFCX0FDVElWRSxcbiAgVEFCX0lOQUNUSVZFLFxuICBOQVZCQVJfQ0xPU0UsXG4gIE5BVkJBUl9PUEVOLFxuICBNT1VTRV9NT1ZFLFxuICBQQUdFX1NDUk9MTF9ET1dOLFxuICBTQ1JPTExfSU5UT19WSUVXLFxuICBTQ1JPTExfT1VUX09GX1ZJRVcsXG4gIFBBR0VfU0NST0xMX1VQLFxuICBTQ1JPTExJTkdfSU5fVklFVyxcbiAgUEFHRV9GSU5JU0gsXG4gIEVDT01NRVJDRV9DQVJUX0NMT1NFLFxuICBFQ09NTUVSQ0VfQ0FSVF9PUEVOLFxuICBQQUdFX1NUQVJULFxuICBQQUdFX1NDUk9MTCxcbn0gPSBFdmVudFR5cGVDb25zdHM7XG5cbmNvbnN0IENPTVBPTkVOVF9BQ1RJVkUgPSAnQ09NUE9ORU5UX0FDVElWRSc7XG5jb25zdCBDT01QT05FTlRfSU5BQ1RJVkUgPSAnQ09NUE9ORU5UX0lOQUNUSVZFJztcblxuY29uc3Qge0NPTE9OX0RFTElNSVRFUn0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5cbmNvbnN0IHtnZXROYW1lc3BhY2VkUGFyYW1ldGVySWR9ID0gSVgyVmFuaWxsYVV0aWxzO1xuXG5jb25zdCBjb21wb3NhYmxlRmlsdGVyID1cbiAgKHByZWRpY2F0ZTogKChhcmcxPzogYW55KSA9PiBhbnkpIHwgKChhcmcxPzogYW55KSA9PiBib29sZWFuKSkgPT5cbiAgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgcHJlZGljYXRlKG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG5cbmNvbnN0IGlzRWxlbWVudCA9IGNvbXBvc2FibGVGaWx0ZXIoKHtlbGVtZW50LCBuYXRpdmVFdmVudH0pID0+IHtcbiAgcmV0dXJuIGVsZW1lbnQgPT09IG5hdGl2ZUV2ZW50LnRhcmdldDtcbn0pO1xuXG5jb25zdCBjb250YWluc0VsZW1lbnQgPSBjb21wb3NhYmxlRmlsdGVyKCh7ZWxlbWVudCwgbmF0aXZlRXZlbnR9KSA9PiB7XG4gIHJldHVybiBlbGVtZW50LmNvbnRhaW5zKG5hdGl2ZUV2ZW50LnRhcmdldCk7XG59KTtcblxuY29uc3QgaXNPckNvbnRhaW5zRWxlbWVudCA9IGZsb3coW2lzRWxlbWVudCwgY29udGFpbnNFbGVtZW50XSk7XG5cbmNvbnN0IGdldEF1dG9TdG9wRXZlbnQgPSAoc3RvcmU6IGFueSwgYXV0b1N0b3BFdmVudElkOiBhbnkpID0+IHtcbiAgaWYgKGF1dG9TdG9wRXZlbnRJZCkge1xuICAgIGNvbnN0IHtpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcbiAgICBjb25zdCBldmVudFRvU3RvcCA9IGV2ZW50c1thdXRvU3RvcEV2ZW50SWRdO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7IHJlYWRvbmx5IFBBR0VfU1RBUlQ6IFwiUEFHRV9TVEFSVFwiOyByZWFkb25seSBQQUdFX0ZJTklTSDogXCJQQUdFX0ZJTklTSFwiOyB9Jy5cbiAgICBpZiAoZXZlbnRUb1N0b3AgJiYgIUFVVE9fU1RPUF9ESVNBQkxFRF9FVkVOVFNbZXZlbnRUb1N0b3AuZXZlbnRUeXBlSWRdKSB7XG4gICAgICByZXR1cm4gZXZlbnRUb1N0b3A7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnc3RvcmUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdldmVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmNvbnN0IGhhc0F1dG9TdG9wRXZlbnQgPSAoe3N0b3JlLCBldmVudH0pID0+IHtcbiAgY29uc3Qge2FjdGlvbjogZXZlbnRBY3Rpb259ID0gZXZlbnQ7XG4gIGNvbnN0IHthdXRvU3RvcEV2ZW50SWR9ID0gZXZlbnRBY3Rpb24uY29uZmlnO1xuICByZXR1cm4gQm9vbGVhbihnZXRBdXRvU3RvcEV2ZW50KHN0b3JlLCBhdXRvU3RvcEV2ZW50SWQpKTtcbn07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3N0b3JlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRTdGF0ZUtleScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3N0YXRlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3QgYWN0aW9uR3JvdXBDcmVhdG9yID0gKHtzdG9yZSwgZXZlbnQsIGVsZW1lbnQsIGV2ZW50U3RhdGVLZXl9LCBzdGF0ZSkgPT4ge1xuICBjb25zdCB7YWN0aW9uOiBldmVudEFjdGlvbiwgaWQ6IGV2ZW50SWR9ID0gZXZlbnQ7XG4gIGNvbnN0IHthY3Rpb25MaXN0SWQsIGF1dG9TdG9wRXZlbnRJZH0gPSBldmVudEFjdGlvbi5jb25maWc7XG4gIGNvbnN0IGV2ZW50VG9TdG9wID0gZ2V0QXV0b1N0b3BFdmVudChzdG9yZSwgYXV0b1N0b3BFdmVudElkKTtcbiAgaWYgKGV2ZW50VG9TdG9wKSB7XG4gICAgc3RvcEFjdGlvbkdyb3VwKHtcbiAgICAgIHN0b3JlLFxuICAgICAgZXZlbnRJZDogYXV0b1N0b3BFdmVudElkLFxuICAgICAgZXZlbnRUYXJnZXQ6IGVsZW1lbnQsXG4gICAgICBldmVudFN0YXRlS2V5OlxuICAgICAgICBhdXRvU3RvcEV2ZW50SWQgK1xuICAgICAgICBDT0xPTl9ERUxJTUlURVIgK1xuICAgICAgICBldmVudFN0YXRlS2V5LnNwbGl0KENPTE9OX0RFTElNSVRFUilbMV0sXG4gICAgICBhY3Rpb25MaXN0SWQ6IGdldChldmVudFRvU3RvcCwgJ2FjdGlvbi5jb25maWcuYWN0aW9uTGlzdElkJyksXG4gICAgfSk7XG4gIH1cbiAgc3RvcEFjdGlvbkdyb3VwKHtcbiAgICBzdG9yZSxcbiAgICBldmVudElkLFxuICAgIGV2ZW50VGFyZ2V0OiBlbGVtZW50LFxuICAgIGV2ZW50U3RhdGVLZXksXG4gICAgYWN0aW9uTGlzdElkLFxuICB9KTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3sgc3RvcmU6IGFueTsgZXZlbnRJZDogYW55OyBldmVudFRhcmdldDogYW55OyBldmVudFN0YXRlS2V5OiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGdyb3VwSW5kZXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7IGltbWVkaWF0ZTogYW55OyB2ZXJib3NlOiBhbnk7IH0nLlxuICBzdGFydEFjdGlvbkdyb3VwKHtcbiAgICBzdG9yZSxcbiAgICBldmVudElkLFxuICAgIGV2ZW50VGFyZ2V0OiBlbGVtZW50LFxuICAgIGV2ZW50U3RhdGVLZXksXG4gICAgYWN0aW9uTGlzdElkLFxuICB9KTtcbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVyJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnaGFuZGxlcicgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmNvbnN0IHdpdGhGaWx0ZXIgPSAoZmlsdGVyLCBoYW5kbGVyKSA9PiAob3B0aW9uczogYW55LCBzdGF0ZTogYW55KSA9PlxuICBmaWx0ZXIob3B0aW9ucywgc3RhdGUpID09PSB0cnVlID8gaGFuZGxlcihvcHRpb25zLCBzdGF0ZSkgOiBzdGF0ZTtcblxuY29uc3QgYmFzZUFjdGlvbkdyb3VwT3B0aW9ucyA9IHtcbiAgaGFuZGxlcjogd2l0aEZpbHRlcihpc09yQ29udGFpbnNFbGVtZW50LCBhY3Rpb25Hcm91cENyZWF0b3IpLFxufSBhcyBjb25zdDtcblxuY29uc3QgYmFzZUFjdGl2aXR5QWN0aW9uR3JvdXBPcHRpb25zID0ge1xuICAuLi5iYXNlQWN0aW9uR3JvdXBPcHRpb25zLFxuICB0eXBlczogW0NPTVBPTkVOVF9BQ1RJVkUsIENPTVBPTkVOVF9JTkFDVElWRV0uam9pbignICcpLFxufSBhcyBjb25zdDtcblxuY29uc3QgU0NST0xMX0VWRU5UX1RZUEVTID0gW1xuICB7dGFyZ2V0OiB3aW5kb3csIHR5cGVzOiAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlJywgdGhyb3R0bGU6IHRydWV9LFxuICB7XG4gICAgdGFyZ2V0OiBkb2N1bWVudCxcbiAgICB0eXBlczogJ3Njcm9sbCB3aGVlbCByZWFkeXN0YXRlY2hhbmdlIElYMl9QQUdFX1VQREFURScsXG4gICAgdGhyb3R0bGU6IHRydWUsXG4gIH0sXG5dO1xuXG5jb25zdCBNT1VTRV9PVkVSX09VVF9UWVBFUyA9ICdtb3VzZW92ZXIgbW91c2VvdXQnO1xuXG5jb25zdCBiYXNlU2Nyb2xsQWN0aW9uR3JvdXBPcHRpb25zID0ge1xuICB0eXBlczogU0NST0xMX0VWRU5UX1RZUEVTLFxufSBhcyBjb25zdDtcblxuY29uc3QgQVVUT19TVE9QX0RJU0FCTEVEX0VWRU5UUyA9IHtcbiAgUEFHRV9TVEFSVCxcbiAgUEFHRV9GSU5JU0gsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBnZXREb2N1bWVudFN0YXRlID0gKCgpID0+IHtcbiAgY29uc3Qgc3VwcG9ydE9mZnNldCA9IHdpbmRvdy5wYWdlWE9mZnNldCAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBpc0NTUzFDb21wYXQgPSBkb2N1bWVudC5jb21wYXRNb2RlID09PSAnQ1NTMUNvbXBhdCc7XG4gIGNvbnN0IHJvb3RFbGVtZW50ID0gaXNDU1MxQ29tcGF0ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogZG9jdW1lbnQuYm9keTtcbiAgcmV0dXJuICgpID0+ICh7XG4gICAgc2Nyb2xsTGVmdDogc3VwcG9ydE9mZnNldCA/IHdpbmRvdy5wYWdlWE9mZnNldCA6IHJvb3RFbGVtZW50LnNjcm9sbExlZnQsXG5cbiAgICBzY3JvbGxUb3A6IHN1cHBvcnRPZmZzZXQgPyB3aW5kb3cucGFnZVlPZmZzZXQgOiByb290RWxlbWVudC5zY3JvbGxUb3AsXG5cbiAgICAvLyByZXF1aXJlZCB0byByZW1vdmUgZWxhc3RpY2l0eSBpbiBTYWZhcmkgc2Nyb2xsaW5nLlxuICAgIHN0aWZmU2Nyb2xsVG9wOiBjbGFtcChcbiAgICAgIHN1cHBvcnRPZmZzZXQgPyB3aW5kb3cucGFnZVlPZmZzZXQgOiByb290RWxlbWVudC5zY3JvbGxUb3AsXG4gICAgICAwLFxuXG4gICAgICByb290RWxlbWVudC5zY3JvbGxIZWlnaHQgLSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICApLFxuXG4gICAgc2Nyb2xsV2lkdGg6IHJvb3RFbGVtZW50LnNjcm9sbFdpZHRoLFxuXG4gICAgc2Nyb2xsSGVpZ2h0OiByb290RWxlbWVudC5zY3JvbGxIZWlnaHQsXG5cbiAgICBjbGllbnRXaWR0aDogcm9vdEVsZW1lbnQuY2xpZW50V2lkdGgsXG5cbiAgICBjbGllbnRIZWlnaHQ6IHJvb3RFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICBpbm5lcldpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICBpbm5lckhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICB9KTtcbn0pKCk7XG5cbmNvbnN0IGFyZUJveGVzSW50ZXJzZWN0aW5nID0gKFxuICBhOiBhbnksXG4gIGI6IHtcbiAgICBib3R0b206IG51bWJlcjtcbiAgICBsZWZ0OiBudW1iZXI7XG4gICAgcmlnaHQ6IG51bWJlcjtcbiAgICB0b3A6IGFueSB8IG51bWJlcjtcbiAgfVxuKSA9PlxuICAhKFxuICAgIGEubGVmdCA+IGIucmlnaHQgfHxcbiAgICBhLnJpZ2h0IDwgYi5sZWZ0IHx8XG4gICAgYS50b3AgPiBiLmJvdHRvbSB8fFxuICAgIGEuYm90dG9tIDwgYi50b3BcbiAgKTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ25hdGl2ZUV2ZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3QgaXNFbGVtZW50SG92ZXJlZCA9ICh7ZWxlbWVudCwgbmF0aXZlRXZlbnR9KSA9PiB7XG4gIGNvbnN0IHt0eXBlLCB0YXJnZXQsIHJlbGF0ZWRUYXJnZXR9ID0gbmF0aXZlRXZlbnQ7XG4gIGNvbnN0IGNvbnRhaW5zVGFyZ2V0ID0gZWxlbWVudC5jb250YWlucyh0YXJnZXQpO1xuICBpZiAodHlwZSA9PT0gJ21vdXNlb3ZlcicgJiYgY29udGFpbnNUYXJnZXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBjb250YWluc1JlbGF0ZWQgPSBlbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuICBpZiAodHlwZSA9PT0gJ21vdXNlb3V0JyAmJiBjb250YWluc1RhcmdldCAmJiBjb250YWluc1JlbGF0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBpc0VsZW1lbnRWaXNpYmxlID0gKG9wdGlvbnM6IGFueSkgPT4ge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBldmVudDoge2NvbmZpZ30sXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHtjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0fSA9IGdldERvY3VtZW50U3RhdGUoKTtcbiAgY29uc3Qgc2Nyb2xsT2Zmc2V0VmFsdWUgPSBjb25maWcuc2Nyb2xsT2Zmc2V0VmFsdWU7XG4gIGNvbnN0IHNjcm9sbE9mZnNldFVuaXQgPSBjb25maWcuc2Nyb2xsT2Zmc2V0VW5pdDtcbiAgY29uc3QgaXNQWCA9IHNjcm9sbE9mZnNldFVuaXQgPT09ICdQWCc7XG5cbiAgY29uc3Qgb2Zmc2V0UGFkZGluZyA9IGlzUFhcbiAgICA/IHNjcm9sbE9mZnNldFZhbHVlXG4gICAgOiAoY2xpZW50SGVpZ2h0ICogKHNjcm9sbE9mZnNldFZhbHVlIHx8IDApKSAvIDEwMDtcblxuICByZXR1cm4gYXJlQm94ZXNJbnRlcnNlY3RpbmcoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiBvZmZzZXRQYWRkaW5nLFxuICAgIHJpZ2h0OiBjbGllbnRXaWR0aCxcbiAgICBib3R0b206IGNsaWVudEhlaWdodCAtIG9mZnNldFBhZGRpbmcsXG4gIH0pO1xufTtcblxuY29uc3Qgd2hlbkNvbXBvbmVudEFjdGl2ZUNoYW5nZSA9XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2hhbmRsZXInIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIChoYW5kbGVyKSA9PiAob3B0aW9uczogYW55LCBvbGRTdGF0ZTogYW55KSA9PiB7XG4gICAgY29uc3Qge3R5cGV9ID0gb3B0aW9ucy5uYXRpdmVFdmVudDtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBpc0FjdGl2ZSA9IFtDT01QT05FTlRfQUNUSVZFLCBDT01QT05FTlRfSU5BQ1RJVkVdLmluZGV4T2YodHlwZSkgIT09IC0xXG4gICAgPyB0eXBlID09PSBDT01QT05FTlRfQUNUSVZFXG4gICAgOiBvbGRTdGF0ZS5pc0FjdGl2ZTtcblxuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgLi4ub2xkU3RhdGUsXG4gICAgICBpc0FjdGl2ZSxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgaWYgKCFvbGRTdGF0ZSB8fCBuZXdTdGF0ZS5pc0FjdGl2ZSAhPT0gb2xkU3RhdGUuaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVyKG9wdGlvbnMsIG5ld1N0YXRlKSB8fCBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IHdoZW5FbGVtZW50SG92ZXJDaGFuZ2UgPVxuICAoXG4gICAgaGFuZGxlcjogKFxuICAgICAgb3B0aW9uczogYW55LFxuICAgICAgc3RhdGU6IHtcbiAgICAgICAgZWxlbWVudEhvdmVyZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgKSA9PiB2b2lkXG4gICkgPT5cbiAgKG9wdGlvbnM6IGFueSwgb2xkU3RhdGU6IGFueSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWxlbWVudEhvdmVyZWQ6IGlzRWxlbWVudEhvdmVyZWQob3B0aW9ucyksXG4gICAgfSBhcyBjb25zdDtcbiAgICBpZiAoXG4gICAgICBvbGRTdGF0ZVxuICAgICAgICA/IG5ld1N0YXRlLmVsZW1lbnRIb3ZlcmVkICE9PSBvbGRTdGF0ZS5lbGVtZW50SG92ZXJlZFxuICAgICAgICA6IG5ld1N0YXRlLmVsZW1lbnRIb3ZlcmVkXG4gICAgKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxMzQ1IC0gQW4gZXhwcmVzc2lvbiBvZiB0eXBlICd2b2lkJyBjYW5ub3QgYmUgdGVzdGVkIGZvciB0cnV0aGluZXNzLlxuICAgICAgcmV0dXJuIGhhbmRsZXIob3B0aW9ucywgbmV3U3RhdGUpIHx8IG5ld1N0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IHdoZW5FbGVtZW50VmlzaWJpbHR5Q2hhbmdlID1cbiAgKGhhbmRsZXI6IChvcHRpb25zPzogYW55LCBzdGF0ZT86IGFueSkgPT4gYW55KSA9PlxuICAob3B0aW9uczogYW55LCBvbGRTdGF0ZTogYW55KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5vbGRTdGF0ZSxcbiAgICAgIGVsZW1lbnRWaXNpYmxlOiBpc0VsZW1lbnRWaXNpYmxlKG9wdGlvbnMpLFxuICAgIH0gYXMgY29uc3Q7XG4gICAgaWYgKFxuICAgICAgb2xkU3RhdGVcbiAgICAgICAgPyBuZXdTdGF0ZS5lbGVtZW50VmlzaWJsZSAhPT0gb2xkU3RhdGUuZWxlbWVudFZpc2libGVcbiAgICAgICAgOiBuZXdTdGF0ZS5lbGVtZW50VmlzaWJsZVxuICAgICkge1xuICAgICAgcmV0dXJuIGhhbmRsZXIob3B0aW9ucywgbmV3U3RhdGUpIHx8IG5ld1N0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IHdoZW5TY3JvbGxEaXJlY3Rpb25DaGFuZ2UgPVxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdoYW5kbGVyJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuXG4gIChoYW5kbGVyKSA9PlxuICAgIChvcHRpb25zOiBhbnksIG9sZFN0YXRlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RpZmZTY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBpbm5lckhlaWdodCxcbiAgICAgIH0gPSBnZXREb2N1bWVudFN0YXRlKCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGV2ZW50OiB7Y29uZmlnLCBldmVudFR5cGVJZH0sXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IHtzY3JvbGxPZmZzZXRWYWx1ZSwgc2Nyb2xsT2Zmc2V0VW5pdH0gPSBjb25maWc7XG4gICAgICBjb25zdCBpc1BYID0gc2Nyb2xsT2Zmc2V0VW5pdCA9PT0gJ1BYJztcblxuICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0Qm91bmRzID0gc2Nyb2xsSGVpZ2h0IC0gaW5uZXJIZWlnaHQ7XG4gICAgICAvLyBwZXJjZW50IHRvcCBzaW5jZSBpbm5lckhlaWdodCBtYXkgY2hhbmdlIGZvciBtb2JpbGUgZGV2aWNlcyB3aGljaCBhbHNvIGNoYW5nZXMgdGhlIHNjcm9sbFRvcCB2YWx1ZS5cbiAgICAgIGNvbnN0IHBlcmNlbnRUb3AgPSBOdW1iZXIoKHNjcm9sbFRvcCAvIHNjcm9sbEhlaWdodEJvdW5kcykudG9GaXhlZCgyKSk7XG5cbiAgICAgIC8vIG5vIHN0YXRlIGNoYW5nZVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdwZXJjZW50VG9wJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7fScuXG4gICAgICBpZiAob2xkU3RhdGUgJiYgb2xkU3RhdGUucGVyY2VudFRvcCA9PT0gcGVyY2VudFRvcCkge1xuICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjcm9sbFRvcFBhZGRpbmcgPVxuICAgICAgICAoaXNQWFxuICAgICAgICAgID8gc2Nyb2xsT2Zmc2V0VmFsdWVcbiAgICAgICAgICA6IChpbm5lckhlaWdodCAqIChzY3JvbGxPZmZzZXRWYWx1ZSB8fCAwKSkgLyAxMDApIC9cbiAgICAgICAgc2Nyb2xsSGVpZ2h0Qm91bmRzO1xuXG4gICAgICBsZXQgc2Nyb2xsaW5nRG93bjtcbiAgICAgIGxldCBzY3JvbGxEaXJlY3Rpb25DaGFuZ2VkO1xuICAgICAgbGV0IGFuY2hvclRvcCA9IDA7XG5cbiAgICAgIGlmIChvbGRTdGF0ZSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzM5IC0gUHJvcGVydHkgJ3BlcmNlbnRUb3AnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ3t9Jy5cbiAgICAgICAgc2Nyb2xsaW5nRG93biA9IHBlcmNlbnRUb3AgPiBvbGRTdGF0ZS5wZXJjZW50VG9wO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzM5IC0gUHJvcGVydHkgJ3Njcm9sbGluZ0Rvd24nIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ3t9Jy5cbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uQ2hhbmdlZCA9IG9sZFN0YXRlLnNjcm9sbGluZ0Rvd24gIT09IHNjcm9sbGluZ0Rvd247XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnYW5jaG9yVG9wJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7fScuXG4gICAgICAgIGFuY2hvclRvcCA9IHNjcm9sbERpcmVjdGlvbkNoYW5nZWQgPyBwZXJjZW50VG9wIDogb2xkU3RhdGUuYW5jaG9yVG9wO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbkJvdW5kcyA9XG4gICAgICAgIGV2ZW50VHlwZUlkID09PSBQQUdFX1NDUk9MTF9ET1dOXG4gICAgICAgICAgPyBwZXJjZW50VG9wID49IGFuY2hvclRvcCArIHNjcm9sbFRvcFBhZGRpbmdcbiAgICAgICAgICA6IHBlcmNlbnRUb3AgPD0gYW5jaG9yVG9wIC0gc2Nyb2xsVG9wUGFkZGluZztcblxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIC4uLm9sZFN0YXRlLFxuICAgICAgICBwZXJjZW50VG9wLFxuICAgICAgICBpbkJvdW5kcyxcbiAgICAgICAgYW5jaG9yVG9wLFxuICAgICAgICBzY3JvbGxpbmdEb3duLFxuICAgICAgfSBhcyBjb25zdDtcblxuICAgICAgaWYgKFxuICAgICAgICBvbGRTdGF0ZSAmJlxuICAgICAgICBpbkJvdW5kcyAmJlxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzM5IC0gUHJvcGVydHkgJ2luQm91bmRzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7fScuXG4gICAgICAgIChzY3JvbGxEaXJlY3Rpb25DaGFuZ2VkIHx8IG5ld1N0YXRlLmluQm91bmRzICE9PSBvbGRTdGF0ZS5pbkJvdW5kcylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaGFuZGxlcihvcHRpb25zLCBuZXdTdGF0ZSkgfHwgbmV3U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9O1xuXG5jb25zdCBwb2ludEludGVyc2VjdHMgPSAoXG4gIHBvaW50OiB7XG4gICAgbGVmdDogYW55IHwgbnVtYmVyO1xuICAgIHRvcDogYW55IHwgbnVtYmVyO1xuICB9LFxuICByZWN0OiBhbnlcbikgPT5cbiAgcG9pbnQubGVmdCA+IHJlY3QubGVmdCAmJlxuICBwb2ludC5sZWZ0IDwgcmVjdC5yaWdodCAmJlxuICBwb2ludC50b3AgPiByZWN0LnRvcCAmJlxuICBwb2ludC50b3AgPCByZWN0LmJvdHRvbTtcblxuY29uc3Qgd2hlblBhZ2VMb2FkRmluaXNoID1cbiAgKGhhbmRsZXI6IChhcmcxOiBhbnksIHN0YXRlOiB1bmRlZmluZWQgfCBhbnkpID0+IHVuZGVmaW5lZCB8IGFueSkgPT5cbiAgKG9wdGlvbnM6IGFueSwgb2xkU3RhdGU6IGFueSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZmluaXNoZWQ6IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScsXG4gICAgfSBhcyBjb25zdDtcbiAgICBpZiAobmV3U3RhdGUuZmluaXNoZWQgJiYgIShvbGRTdGF0ZSAmJiBvbGRTdGF0ZS5maW5zaGVkKSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICBoYW5kbGVyKG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IHdoZW5QYWdlTG9hZFN0YXJ0ID1cbiAgKGhhbmRsZXI6IChhcmcxOiBhbnksIHN0YXRlOiB1bmRlZmluZWQgfCBhbnkpID0+IHVuZGVmaW5lZCB8IGFueSkgPT5cbiAgKG9wdGlvbnM6IGFueSwgb2xkU3RhdGU6IGFueSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgc3RhcnRlZDogdHJ1ZSxcbiAgICB9IGFzIGNvbnN0O1xuICAgIGlmICghb2xkU3RhdGUpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgaGFuZGxlcihvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9O1xuXG5jb25zdCB3aGVuQ2xpY2tDb3VudENoYW5nZSA9XG4gIChcbiAgICBoYW5kbGVyOiAoXG4gICAgICBvcHRpb25zOiBhbnksXG4gICAgICBhcmcyOiB7XG4gICAgICAgIGNsaWNrQ291bnQ6IG51bWJlcjtcbiAgICAgIH1cbiAgICApID0+IHZvaWRcbiAgKSA9PlxuICAob3B0aW9uczogYW55LCBvbGRTdGF0ZSA9IHtjbGlja0NvdW50OiAwfSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgY2xpY2tDb3VudDogKG9sZFN0YXRlLmNsaWNrQ291bnQgJSAyKSArIDEsXG4gICAgfSBhcyBjb25zdDtcbiAgICBpZiAobmV3U3RhdGUuY2xpY2tDb3VudCAhPT0gb2xkU3RhdGUuY2xpY2tDb3VudCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMTM0NSAtIEFuIGV4cHJlc3Npb24gb2YgdHlwZSAndm9pZCcgY2Fubm90IGJlIHRlc3RlZCBmb3IgdHJ1dGhpbmVzcy5cbiAgICAgIHJldHVybiBoYW5kbGVyKG9wdGlvbnMsIG5ld1N0YXRlKSB8fCBuZXdTdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9O1xuXG5jb25zdCBnZXRDb21wb25lbnRBY3RpdmVPcHRpb25zID0gKGFsbG93TmVzdGVkQ2hpbGRyZW5FdmVudHMgPSB0cnVlKSA9PiAoe1xuICAuLi5iYXNlQWN0aXZpdHlBY3Rpb25Hcm91cE9wdGlvbnMsXG4gIGhhbmRsZXI6IHdpdGhGaWx0ZXIoXG4gICAgYWxsb3dOZXN0ZWRDaGlsZHJlbkV2ZW50cyA/IGlzT3JDb250YWluc0VsZW1lbnQgOiBpc0VsZW1lbnQsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnb3B0aW9ucycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3N0YXRlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIHdoZW5Db21wb25lbnRBY3RpdmVDaGFuZ2UoKG9wdGlvbnMsIHN0YXRlKSA9PiB7XG4gICAgICByZXR1cm4gc3RhdGUuaXNBY3RpdmVcbiAgICAgICAgPyBiYXNlQWN0aW9uR3JvdXBPcHRpb25zLmhhbmRsZXIob3B0aW9ucywgc3RhdGUpXG4gICAgICAgIDogc3RhdGU7XG4gICAgfSlcbiAgKSxcbn0pO1xuXG5jb25zdCBnZXRDb21wb25lbnRJbmFjdGl2ZU9wdGlvbnMgPSAoYWxsb3dOZXN0ZWRDaGlsZHJlbkV2ZW50cyA9IHRydWUpID0+ICh7XG4gIC4uLmJhc2VBY3Rpdml0eUFjdGlvbkdyb3VwT3B0aW9ucyxcbiAgaGFuZGxlcjogd2l0aEZpbHRlcihcbiAgICBhbGxvd05lc3RlZENoaWxkcmVuRXZlbnRzID8gaXNPckNvbnRhaW5zRWxlbWVudCA6IGlzRWxlbWVudCxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdvcHRpb25zJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnc3RhdGUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgd2hlbkNvbXBvbmVudEFjdGl2ZUNoYW5nZSgob3B0aW9ucywgc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiAhc3RhdGUuaXNBY3RpdmVcbiAgICAgICAgPyBiYXNlQWN0aW9uR3JvdXBPcHRpb25zLmhhbmRsZXIob3B0aW9ucywgc3RhdGUpXG4gICAgICAgIDogc3RhdGU7XG4gICAgfSlcbiAgKSxcbn0pO1xuXG5jb25zdCBzY3JvbGxJbnRvT3V0T2ZWaWV3T3B0aW9ucyA9IHtcbiAgLi4uYmFzZVNjcm9sbEFjdGlvbkdyb3VwT3B0aW9ucyxcbiAgaGFuZGxlcjogd2hlbkVsZW1lbnRWaXNpYmlsdHlDaGFuZ2UoKG9wdGlvbnMsIHN0YXRlKSA9PiB7XG4gICAgY29uc3Qge2VsZW1lbnRWaXNpYmxlfSA9IHN0YXRlO1xuICAgIGNvbnN0IHtldmVudCwgc3RvcmV9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7aXhEYXRhfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgY29uc3Qge2V2ZW50c30gPSBpeERhdGE7XG5cbiAgICAvLyB0cmlnZ2VyIHRoZSBoYW5kbGVyIG9ubHkgb25jZSBpZiBvbmx5IG9uZSBvZiBTQ1JPTExfSU5UTyBvciBTQ1JPTExfT1VUX09GIGV2ZW50IHR5cGVzXG4gICAgLy8gYXJlIHJlZ2lzdGVyZWQuXG4gICAgaWYgKCFldmVudHNbZXZlbnQuYWN0aW9uLmNvbmZpZy5hdXRvU3RvcEV2ZW50SWRdICYmIHN0YXRlLnRyaWdnZXJlZCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQuZXZlbnRUeXBlSWQgPT09IFNDUk9MTF9JTlRPX1ZJRVcpID09PSBlbGVtZW50VmlzaWJsZSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICBhY3Rpb25Hcm91cENyZWF0b3Iob3B0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdHJpZ2dlcmVkOiB0cnVlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfSksXG59IGFzIGNvbnN0O1xuXG5jb25zdCBNT1VTRV9PVVRfUk9VTkRfVEhSRVNIT0xEID0gMC4wNTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBbU0xJREVSX0FDVElWRV06IGdldENvbXBvbmVudEFjdGl2ZU9wdGlvbnMoKSxcbiAgW1NMSURFUl9JTkFDVElWRV06IGdldENvbXBvbmVudEluYWN0aXZlT3B0aW9ucygpLFxuICBbRFJPUERPV05fT1BFTl06IGdldENvbXBvbmVudEFjdGl2ZU9wdGlvbnMoKSxcbiAgW0RST1BET1dOX0NMT1NFXTogZ2V0Q29tcG9uZW50SW5hY3RpdmVPcHRpb25zKCksXG5cbiAgLy8gbmF2YmFyIGVsZW1lbnRzIG1heSBjb250YWluIG5lc3RlZCBjb21wb25lbnRzIGluIHRoZSBtZW51LiBUbyBwcmV2ZW50IGFjdGl2aXR5IG1pc2ZpcmVzLCBvbmx5IGxpc3RlZCBmb3IgYWN0aXZpdHlcbiAgLy8gZXZlbnRzIHdoZXJlIHRoZSB0YXJnZXQgaXMgdGhlIG5hdmJhciBlbGVtZW50LCBhbmQgaWdub3JlIGNoaWxkcmVuIHRoYXQgZGlzcGF0Y2ggYWN0aXZpdGl5IGV2ZW50cy5cbiAgW05BVkJBUl9PUEVOXTogZ2V0Q29tcG9uZW50QWN0aXZlT3B0aW9ucyhmYWxzZSksXG4gIFtOQVZCQVJfQ0xPU0VdOiBnZXRDb21wb25lbnRJbmFjdGl2ZU9wdGlvbnMoZmFsc2UpLFxuICBbVEFCX0FDVElWRV06IGdldENvbXBvbmVudEFjdGl2ZU9wdGlvbnMoKSxcbiAgW1RBQl9JTkFDVElWRV06IGdldENvbXBvbmVudEluYWN0aXZlT3B0aW9ucygpLFxuICBbRUNPTU1FUkNFX0NBUlRfT1BFTl06IHtcbiAgICB0eXBlczogJ2Vjb21tZXJjZS1jYXJ0LW9wZW4nLFxuICAgIGhhbmRsZXI6IHdpdGhGaWx0ZXIoaXNPckNvbnRhaW5zRWxlbWVudCwgYWN0aW9uR3JvdXBDcmVhdG9yKSxcbiAgfSxcbiAgW0VDT01NRVJDRV9DQVJUX0NMT1NFXToge1xuICAgIHR5cGVzOiAnZWNvbW1lcmNlLWNhcnQtY2xvc2UnLFxuICAgIGhhbmRsZXI6IHdpdGhGaWx0ZXIoaXNPckNvbnRhaW5zRWxlbWVudCwgYWN0aW9uR3JvdXBDcmVhdG9yKSxcbiAgfSxcbiAgW01PVVNFX0NMSUNLXToge1xuICAgIHR5cGVzOiAnY2xpY2snLFxuICAgIGhhbmRsZXI6IHdpdGhGaWx0ZXIoXG4gICAgICBpc09yQ29udGFpbnNFbGVtZW50LFxuICAgICAgd2hlbkNsaWNrQ291bnRDaGFuZ2UoKG9wdGlvbnMsIHtjbGlja0NvdW50fSkgPT4ge1xuICAgICAgICBpZiAoaGFzQXV0b1N0b3BFdmVudChvcHRpb25zKSkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgICAgIGNsaWNrQ291bnQgPT09IDEgJiYgYWN0aW9uR3JvdXBDcmVhdG9yKG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgICAgIGFjdGlvbkdyb3VwQ3JlYXRvcihvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApLFxuICB9LFxuICBbTU9VU0VfU0VDT05EX0NMSUNLXToge1xuICAgIHR5cGVzOiAnY2xpY2snLFxuICAgIGhhbmRsZXI6IHdpdGhGaWx0ZXIoXG4gICAgICBpc09yQ29udGFpbnNFbGVtZW50LFxuICAgICAgd2hlbkNsaWNrQ291bnRDaGFuZ2UoKG9wdGlvbnMsIHtjbGlja0NvdW50fSkgPT4ge1xuICAgICAgICBpZiAoY2xpY2tDb3VudCA9PT0gMikge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgICAgIGFjdGlvbkdyb3VwQ3JlYXRvcihvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApLFxuICB9LFxuICBbTU9VU0VfRE9XTl06IHtcbiAgICAuLi5iYXNlQWN0aW9uR3JvdXBPcHRpb25zLFxuICAgIHR5cGVzOiAnbW91c2Vkb3duJyxcbiAgfSxcbiAgW01PVVNFX1VQXToge1xuICAgIC4uLmJhc2VBY3Rpb25Hcm91cE9wdGlvbnMsXG4gICAgdHlwZXM6ICdtb3VzZXVwJyxcbiAgfSxcbiAgW01PVVNFX09WRVJdOiB7XG4gICAgdHlwZXM6IE1PVVNFX09WRVJfT1VUX1RZUEVTLFxuICAgIGhhbmRsZXI6IHdpdGhGaWx0ZXIoXG4gICAgICBpc09yQ29udGFpbnNFbGVtZW50LFxuICAgICAgd2hlbkVsZW1lbnRIb3ZlckNoYW5nZSgob3B0aW9ucywgc3RhdGUpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnRIb3ZlcmVkKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICAgICAgYWN0aW9uR3JvdXBDcmVhdG9yKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICksXG4gIH0sXG4gIFtNT1VTRV9PVVRdOiB7XG4gICAgdHlwZXM6IE1PVVNFX09WRVJfT1VUX1RZUEVTLFxuICAgIGhhbmRsZXI6IHdpdGhGaWx0ZXIoXG4gICAgICBpc09yQ29udGFpbnNFbGVtZW50LFxuICAgICAgd2hlbkVsZW1lbnRIb3ZlckNoYW5nZSgob3B0aW9ucywgc3RhdGUpID0+IHtcbiAgICAgICAgaWYgKCFzdGF0ZS5lbGVtZW50SG92ZXJlZCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgICAgIGFjdGlvbkdyb3VwQ3JlYXRvcihvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApLFxuICB9LFxuICBbTU9VU0VfTU9WRV06IHtcbiAgICB0eXBlczogJ21vdXNlbW92ZSBtb3VzZW91dCBzY3JvbGwnLFxuICAgIGhhbmRsZXI6IChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHtzdG9yZSwgZWxlbWVudCwgZXZlbnRDb25maWcsIG5hdGl2ZUV2ZW50LCBldmVudFN0YXRlS2V5fSxcblxuICAgICAgc3RhdGUgPSB7Y2xpZW50WDogMCwgY2xpZW50WTogMCwgcGFnZVg6IDAsIHBhZ2VZOiAwfVxuICAgICkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBiYXNlZE9uLFxuICAgICAgICBzZWxlY3RlZEF4aXMsXG4gICAgICAgIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkLFxuICAgICAgICByZXZlcnNlLFxuICAgICAgICByZXN0aW5nU3RhdGUgPSAwLFxuICAgICAgfSA9IGV2ZW50Q29uZmlnO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGllbnRYID0gc3RhdGUuY2xpZW50WCxcbiAgICAgICAgY2xpZW50WSA9IHN0YXRlLmNsaWVudFksXG4gICAgICAgIHBhZ2VYID0gc3RhdGUucGFnZVgsXG4gICAgICAgIHBhZ2VZID0gc3RhdGUucGFnZVksXG4gICAgICB9ID0gbmF0aXZlRXZlbnQ7XG4gICAgICBjb25zdCBpc1hBeGlzID0gc2VsZWN0ZWRBeGlzID09PSAnWF9BWElTJztcbiAgICAgIGNvbnN0IGlzTW91c2VPdXQgPSBuYXRpdmVFdmVudC50eXBlID09PSAnbW91c2VvdXQnO1xuXG4gICAgICBsZXQgdmFsdWUgPSByZXN0aW5nU3RhdGUgLyAxMDA7XG4gICAgICBsZXQgbmFtZXNwYWNlZFBhcmFtZXRlcklkID0gY29udGludW91c1BhcmFtZXRlckdyb3VwSWQ7XG4gICAgICBsZXQgZWxlbWVudEhvdmVyZWQgPSBmYWxzZTtcblxuICAgICAgc3dpdGNoIChiYXNlZE9uKSB7XG4gICAgICAgIGNhc2UgRXZlbnRCYXNlZE9uLlZJRVdQT1JUOiB7XG4gICAgICAgICAgdmFsdWUgPSBpc1hBeGlzXG4gICAgICAgICAgICA/IE1hdGgubWluKGNsaWVudFgsIHdpbmRvdy5pbm5lcldpZHRoKSAvIHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgICAgICA6IE1hdGgubWluKGNsaWVudFksIHdpbmRvdy5pbm5lckhlaWdodCkgLyB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdQQUdFJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7IHJlYWRvbmx5IEVMRU1FTlQ6IFwiRUxFTUVOVFwiOyByZWFkb25seSBWSUVXUE9SVDogXCJWSUVXUE9SVFwiOyB9Jy5cbiAgICAgICAgY2FzZSBFdmVudEJhc2VkT24uUEFHRToge1xuICAgICAgICAgIGNvbnN0IHtzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHR9ID1cbiAgICAgICAgICAgIGdldERvY3VtZW50U3RhdGUoKTtcbiAgICAgICAgICB2YWx1ZSA9IGlzWEF4aXNcbiAgICAgICAgICAgID8gTWF0aC5taW4oc2Nyb2xsTGVmdCArIHBhZ2VYLCBzY3JvbGxXaWR0aCkgLyBzY3JvbGxXaWR0aFxuICAgICAgICAgICAgOiBNYXRoLm1pbihzY3JvbGxUb3AgKyBwYWdlWSwgc2Nyb2xsSGVpZ2h0KSAvIHNjcm9sbEhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEV2ZW50QmFzZWRPbi5FTEVNRU5UOlxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgbmFtZXNwYWNlZFBhcmFtZXRlcklkID0gZ2V0TmFtZXNwYWNlZFBhcmFtZXRlcklkKFxuICAgICAgICAgICAgZXZlbnRTdGF0ZUtleSxcbiAgICAgICAgICAgIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGlzTW91c2VFdmVudCA9IG5hdGl2ZUV2ZW50LnR5cGUuaW5kZXhPZignbW91c2UnKSA9PT0gMDtcblxuICAgICAgICAgIC8vIFVzZSBpc09yQ29udGFpbnNFbGVtZW50IGZvciBtb3VzZSBldmVudHMgc2luY2UgdGhleSBhcmUgZmlyZWQgZnJvbSB0aGUgdGFyZ2V0XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNNb3VzZUV2ZW50ICYmXG4gICAgICAgICAgICBpc09yQ29udGFpbnNFbGVtZW50KHtlbGVtZW50LCBuYXRpdmVFdmVudH0pICE9PSB0cnVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCB7bGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0fSA9IHJlY3Q7XG5cbiAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UnbGwgbmVlZCB0byBjYWxjdWxhdGUgdGhlIG1vdXNlIHBvc2l0aW9uIGZyb20gdGhlIHByZXZpb3VzIGhhbmRsZXIgc3RhdGVcbiAgICAgICAgICAvLyBhZ2FpbnN0IHRoZSB0YXJnZXQgZWxlbWVudCdzIHJlY3RcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNNb3VzZUV2ZW50ICYmXG4gICAgICAgICAgICAhcG9pbnRJbnRlcnNlY3RzKHtsZWZ0OiBjbGllbnRYLCB0b3A6IGNsaWVudFl9LCByZWN0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlbWVudEhvdmVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgdmFsdWUgPSBpc1hBeGlzID8gKGNsaWVudFggLSBsZWZ0KSAvIHdpZHRoIDogKGNsaWVudFkgLSB0b3ApIC8gaGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNvdmVyIGNhc2Ugd2hlcmUgdGhlIGV2ZW50IGlzIGEgbW91c2Ugb3V0LCBidXQgdGhlIHZhbHVlIGlzIG5vdCBxdWl0ZSBhdCAxMDAlXG4gICAgICBpZiAoXG4gICAgICAgIGlzTW91c2VPdXQgJiZcbiAgICAgICAgKHZhbHVlID4gMSAtIE1PVVNFX09VVF9ST1VORF9USFJFU0hPTEQgfHxcbiAgICAgICAgICB2YWx1ZSA8IE1PVVNFX09VVF9ST1VORF9USFJFU0hPTEQpXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSB1cGRhdGUgYmFzZWQgb24gZWxlbWVudCBpZiB0aGUgbW91c2UgaXMgbW92aW5nIG92ZXIgb3IgaGFzIGp1c3QgbGVmdCB0aGUgZWxlbWVudFxuICAgICAgaWYgKFxuICAgICAgICBiYXNlZE9uICE9PSBFdmVudEJhc2VkT24uRUxFTUVOVCB8fFxuICAgICAgICBlbGVtZW50SG92ZXJlZCB8fFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgZWxlbWVudEhvdmVyZWQgIT09IHN0YXRlLmVsZW1lbnRIb3ZlcmVkXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSByZXZlcnNlID8gMSAtIHZhbHVlIDogdmFsdWU7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKHBhcmFtZXRlckNoYW5nZWQobmFtZXNwYWNlZFBhcmFtZXRlcklkLCB2YWx1ZSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50SG92ZXJlZCxcbiAgICAgICAgY2xpZW50WCxcbiAgICAgICAgY2xpZW50WSxcbiAgICAgICAgcGFnZVgsXG4gICAgICAgIHBhZ2VZLFxuICAgICAgfTtcbiAgICB9LFxuICB9LFxuXG4gIFtQQUdFX1NDUk9MTF06IHtcbiAgICB0eXBlczogU0NST0xMX0VWRU5UX1RZUEVTLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaGFuZGxlcjogKHtzdG9yZSwgZXZlbnRDb25maWd9KSA9PiB7XG4gICAgICBjb25zdCB7Y29udGludW91c1BhcmFtZXRlckdyb3VwSWQsIHJldmVyc2V9ID0gZXZlbnRDb25maWc7XG4gICAgICBjb25zdCB7c2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodH0gPSBnZXREb2N1bWVudFN0YXRlKCk7XG4gICAgICBsZXQgdmFsdWUgPSBzY3JvbGxUb3AgLyAoc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KTtcbiAgICAgIHZhbHVlID0gcmV2ZXJzZSA/IDEgLSB2YWx1ZSA6IHZhbHVlO1xuICAgICAgc3RvcmUuZGlzcGF0Y2gocGFyYW1ldGVyQ2hhbmdlZChjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCwgdmFsdWUpKTtcbiAgICB9LFxuICB9LFxuXG4gIFtTQ1JPTExJTkdfSU5fVklFV106IHtcbiAgICB0eXBlczogU0NST0xMX0VWRU5UX1RZUEVTLFxuICAgIGhhbmRsZXI6IChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHtlbGVtZW50LCBzdG9yZSwgZXZlbnRDb25maWcsIGV2ZW50U3RhdGVLZXl9LFxuXG4gICAgICBzdGF0ZSA9IHtzY3JvbGxQZXJjZW50OiAwfVxuICAgICkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIGNsaWVudEhlaWdodDogdmlzaWJsZUhlaWdodCxcbiAgICAgIH0gPSBnZXREb2N1bWVudFN0YXRlKCk7XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYmFzZWRPbixcbiAgICAgICAgc2VsZWN0ZWRBeGlzLFxuICAgICAgICBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCxcbiAgICAgICAgc3RhcnRzRW50ZXJpbmcsXG4gICAgICAgIHN0YXJ0c0V4aXRpbmcsXG4gICAgICAgIGFkZEVuZE9mZnNldCxcbiAgICAgICAgYWRkU3RhcnRPZmZzZXQsXG4gICAgICAgIGFkZE9mZnNldFZhbHVlID0gMCxcbiAgICAgICAgZW5kT2Zmc2V0VmFsdWUgPSAwLFxuICAgICAgfSA9IGV2ZW50Q29uZmlnO1xuXG4gICAgICBjb25zdCBpc1hBeGlzID0gc2VsZWN0ZWRBeGlzID09PSAnWF9BWElTJztcblxuICAgICAgaWYgKGJhc2VkT24gPT09IEV2ZW50QmFzZWRPbi5WSUVXUE9SVCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzWEF4aXNcbiAgICAgICAgICA/IHNjcm9sbExlZnQgLyBzY3JvbGxXaWR0aFxuICAgICAgICAgIDogc2Nyb2xsVG9wIC8gc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBpZiAodmFsdWUgIT09IHN0YXRlLnNjcm9sbFBlcmNlbnQpIHtcbiAgICAgICAgICBzdG9yZS5kaXNwYXRjaChwYXJhbWV0ZXJDaGFuZ2VkKGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkLCB2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsUGVyY2VudDogdmFsdWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VkUGFyYW1ldGVySWQgPSBnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQoXG4gICAgICAgICAgZXZlbnRTdGF0ZUtleSxcbiAgICAgICAgICBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCBvZmZzZXRTdGFydFBlcmMgPSAoYWRkU3RhcnRPZmZzZXQgPyBhZGRPZmZzZXRWYWx1ZSA6IDApIC8gMTAwO1xuICAgICAgICBsZXQgb2Zmc2V0RW5kUGVyYyA9IChhZGRFbmRPZmZzZXQgPyBlbmRPZmZzZXRWYWx1ZSA6IDApIC8gMTAwO1xuXG4gICAgICAgIC8vIGZsaXAgdGhlIG9mZnNldCBwZXJjZW50YWdlcyBkZXBlbmRpbmcgb24gc3RhcnQgLyBleGl0IHR5cGVcbiAgICAgICAgb2Zmc2V0U3RhcnRQZXJjID0gc3RhcnRzRW50ZXJpbmdcbiAgICAgICAgICA/IG9mZnNldFN0YXJ0UGVyY1xuICAgICAgICAgIDogMSAtIG9mZnNldFN0YXJ0UGVyYztcbiAgICAgICAgb2Zmc2V0RW5kUGVyYyA9IHN0YXJ0c0V4aXRpbmcgPyBvZmZzZXRFbmRQZXJjIDogMSAtIG9mZnNldEVuZFBlcmM7XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0RWxlbWVudFRvcCA9XG4gICAgICAgICAgZWxlbWVudFJlY3QudG9wICtcbiAgICAgICAgICBNYXRoLm1pbihlbGVtZW50UmVjdC5oZWlnaHQgKiBvZmZzZXRTdGFydFBlcmMsIHZpc2libGVIZWlnaHQpO1xuICAgICAgICBjb25zdCBvZmZzZXRFbGVtZW50Qm90dG9tID1cbiAgICAgICAgICBlbGVtZW50UmVjdC50b3AgKyBlbGVtZW50UmVjdC5oZWlnaHQgKiBvZmZzZXRFbmRQZXJjO1xuICAgICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSBvZmZzZXRFbGVtZW50Qm90dG9tIC0gb2Zmc2V0RWxlbWVudFRvcDtcblxuICAgICAgICBjb25zdCBmaXhlZFNjcm9sbEhlaWdodCA9IE1hdGgubWluKFxuICAgICAgICAgIHZpc2libGVIZWlnaHQgKyBvZmZzZXRIZWlnaHQsXG4gICAgICAgICAgc2Nyb2xsSGVpZ2h0XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZml4ZWRTY3JvbGxUb3AgPSBNYXRoLm1pbihcbiAgICAgICAgICBNYXRoLm1heCgwLCB2aXNpYmxlSGVpZ2h0IC0gb2Zmc2V0RWxlbWVudFRvcCksXG4gICAgICAgICAgZml4ZWRTY3JvbGxIZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZml4ZWRTY3JvbGxQZXJjID0gZml4ZWRTY3JvbGxUb3AgLyBmaXhlZFNjcm9sbEhlaWdodDtcblxuICAgICAgICBpZiAoZml4ZWRTY3JvbGxQZXJjICE9PSBzdGF0ZS5zY3JvbGxQZXJjZW50KSB7XG4gICAgICAgICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBwYXJhbWV0ZXJDaGFuZ2VkKG5hbWVzcGFjZWRQYXJhbWV0ZXJJZCwgZml4ZWRTY3JvbGxQZXJjKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzY3JvbGxQZXJjZW50OiBmaXhlZFNjcm9sbFBlcmMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgW1NDUk9MTF9JTlRPX1ZJRVddOiBzY3JvbGxJbnRvT3V0T2ZWaWV3T3B0aW9ucyxcbiAgW1NDUk9MTF9PVVRfT0ZfVklFV106IHNjcm9sbEludG9PdXRPZlZpZXdPcHRpb25zLFxuXG4gIFtQQUdFX1NDUk9MTF9ET1dOXToge1xuICAgIC4uLmJhc2VTY3JvbGxBY3Rpb25Hcm91cE9wdGlvbnMsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnb3B0aW9ucycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3N0YXRlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIGhhbmRsZXI6IHdoZW5TY3JvbGxEaXJlY3Rpb25DaGFuZ2UoKG9wdGlvbnMsIHN0YXRlKSA9PiB7XG4gICAgICBpZiAoc3RhdGUuc2Nyb2xsaW5nRG93bikge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgICAgYWN0aW9uR3JvdXBDcmVhdG9yKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pLFxuICB9LFxuXG4gIFtQQUdFX1NDUk9MTF9VUF06IHtcbiAgICAuLi5iYXNlU2Nyb2xsQWN0aW9uR3JvdXBPcHRpb25zLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ29wdGlvbnMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdzdGF0ZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICBoYW5kbGVyOiB3aGVuU2Nyb2xsRGlyZWN0aW9uQ2hhbmdlKChvcHRpb25zLCBzdGF0ZSkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5zY3JvbGxpbmdEb3duKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgICBhY3Rpb25Hcm91cENyZWF0b3Iob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSksXG4gIH0sXG5cbiAgW1BBR0VfRklOSVNIXToge1xuICAgIHR5cGVzOiAncmVhZHlzdGF0ZWNoYW5nZSBJWDJfUEFHRV9VUERBVEUnLFxuICAgIGhhbmRsZXI6IHdpdGhGaWx0ZXIoaXNFbGVtZW50LCB3aGVuUGFnZUxvYWRGaW5pc2goYWN0aW9uR3JvdXBDcmVhdG9yKSksXG4gIH0sXG5cbiAgW1BBR0VfU1RBUlRdOiB7XG4gICAgdHlwZXM6ICdyZWFkeXN0YXRlY2hhbmdlIElYMl9QQUdFX1VQREFURScsXG4gICAgaGFuZGxlcjogd2l0aEZpbHRlcihpc0VsZW1lbnQsIHdoZW5QYWdlTG9hZFN0YXJ0KGFjdGlvbkdyb3VwQ3JlYXRvcikpLFxuICB9LFxufTtcbiJdLCJuYW1lcyI6WyJNT1VTRV9DTElDSyIsIk1PVVNFX1NFQ09ORF9DTElDSyIsIk1PVVNFX0RPV04iLCJNT1VTRV9VUCIsIk1PVVNFX09WRVIiLCJNT1VTRV9PVVQiLCJEUk9QRE9XTl9DTE9TRSIsIkRST1BET1dOX09QRU4iLCJTTElERVJfQUNUSVZFIiwiU0xJREVSX0lOQUNUSVZFIiwiVEFCX0FDVElWRSIsIlRBQl9JTkFDVElWRSIsIk5BVkJBUl9DTE9TRSIsIk5BVkJBUl9PUEVOIiwiTU9VU0VfTU9WRSIsIlBBR0VfU0NST0xMX0RPV04iLCJTQ1JPTExfSU5UT19WSUVXIiwiU0NST0xMX09VVF9PRl9WSUVXIiwiUEFHRV9TQ1JPTExfVVAiLCJTQ1JPTExJTkdfSU5fVklFVyIsIlBBR0VfRklOSVNIIiwiRUNPTU1FUkNFX0NBUlRfQ0xPU0UiLCJFQ09NTUVSQ0VfQ0FSVF9PUEVOIiwiUEFHRV9TVEFSVCIsIlBBR0VfU0NST0xMIiwiRXZlbnRUeXBlQ29uc3RzIiwiQ09NUE9ORU5UX0FDVElWRSIsIkNPTVBPTkVOVF9JTkFDVElWRSIsIkNPTE9OX0RFTElNSVRFUiIsIklYMkVuZ2luZUNvbnN0YW50cyIsImdldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZCIsIklYMlZhbmlsbGFVdGlscyIsImNvbXBvc2FibGVGaWx0ZXIiLCJwcmVkaWNhdGUiLCJvcHRpb25zIiwiaXNFbGVtZW50IiwiZWxlbWVudCIsIm5hdGl2ZUV2ZW50IiwidGFyZ2V0IiwiY29udGFpbnNFbGVtZW50IiwiY29udGFpbnMiLCJpc09yQ29udGFpbnNFbGVtZW50IiwiZmxvdyIsImdldEF1dG9TdG9wRXZlbnQiLCJzdG9yZSIsImF1dG9TdG9wRXZlbnRJZCIsIml4RGF0YSIsImdldFN0YXRlIiwiZXZlbnRzIiwiZXZlbnRUb1N0b3AiLCJBVVRPX1NUT1BfRElTQUJMRURfRVZFTlRTIiwiZXZlbnRUeXBlSWQiLCJoYXNBdXRvU3RvcEV2ZW50IiwiZXZlbnQiLCJhY3Rpb24iLCJldmVudEFjdGlvbiIsImNvbmZpZyIsIkJvb2xlYW4iLCJhY3Rpb25Hcm91cENyZWF0b3IiLCJldmVudFN0YXRlS2V5Iiwic3RhdGUiLCJpZCIsImV2ZW50SWQiLCJhY3Rpb25MaXN0SWQiLCJzdG9wQWN0aW9uR3JvdXAiLCJldmVudFRhcmdldCIsInNwbGl0IiwiZ2V0Iiwic3RhcnRBY3Rpb25Hcm91cCIsIndpdGhGaWx0ZXIiLCJmaWx0ZXIiLCJoYW5kbGVyIiwiYmFzZUFjdGlvbkdyb3VwT3B0aW9ucyIsImJhc2VBY3Rpdml0eUFjdGlvbkdyb3VwT3B0aW9ucyIsInR5cGVzIiwiam9pbiIsIlNDUk9MTF9FVkVOVF9UWVBFUyIsIndpbmRvdyIsInRocm90dGxlIiwiZG9jdW1lbnQiLCJNT1VTRV9PVkVSX09VVF9UWVBFUyIsImJhc2VTY3JvbGxBY3Rpb25Hcm91cE9wdGlvbnMiLCJnZXREb2N1bWVudFN0YXRlIiwic3VwcG9ydE9mZnNldCIsInBhZ2VYT2Zmc2V0IiwidW5kZWZpbmVkIiwiaXNDU1MxQ29tcGF0IiwiY29tcGF0TW9kZSIsInJvb3RFbGVtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiYm9keSIsInNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJwYWdlWU9mZnNldCIsInN0aWZmU2Nyb2xsVG9wIiwiY2xhbXAiLCJzY3JvbGxIZWlnaHQiLCJpbm5lckhlaWdodCIsInNjcm9sbFdpZHRoIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJpbm5lcldpZHRoIiwiYXJlQm94ZXNJbnRlcnNlY3RpbmciLCJhIiwiYiIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImlzRWxlbWVudEhvdmVyZWQiLCJ0eXBlIiwicmVsYXRlZFRhcmdldCIsImNvbnRhaW5zVGFyZ2V0IiwiY29udGFpbnNSZWxhdGVkIiwiaXNFbGVtZW50VmlzaWJsZSIsInNjcm9sbE9mZnNldFZhbHVlIiwic2Nyb2xsT2Zmc2V0VW5pdCIsImlzUFgiLCJvZmZzZXRQYWRkaW5nIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2hlbkNvbXBvbmVudEFjdGl2ZUNoYW5nZSIsIm9sZFN0YXRlIiwiaXNBY3RpdmUiLCJpbmRleE9mIiwibmV3U3RhdGUiLCJ3aGVuRWxlbWVudEhvdmVyQ2hhbmdlIiwiZWxlbWVudEhvdmVyZWQiLCJ3aGVuRWxlbWVudFZpc2liaWx0eUNoYW5nZSIsImVsZW1lbnRWaXNpYmxlIiwid2hlblNjcm9sbERpcmVjdGlvbkNoYW5nZSIsInNjcm9sbEhlaWdodEJvdW5kcyIsInBlcmNlbnRUb3AiLCJOdW1iZXIiLCJ0b0ZpeGVkIiwic2Nyb2xsVG9wUGFkZGluZyIsInNjcm9sbGluZ0Rvd24iLCJzY3JvbGxEaXJlY3Rpb25DaGFuZ2VkIiwiYW5jaG9yVG9wIiwiaW5Cb3VuZHMiLCJwb2ludEludGVyc2VjdHMiLCJwb2ludCIsInJlY3QiLCJ3aGVuUGFnZUxvYWRGaW5pc2giLCJmaW5pc2hlZCIsInJlYWR5U3RhdGUiLCJmaW5zaGVkIiwid2hlblBhZ2VMb2FkU3RhcnQiLCJzdGFydGVkIiwid2hlbkNsaWNrQ291bnRDaGFuZ2UiLCJjbGlja0NvdW50IiwiZ2V0Q29tcG9uZW50QWN0aXZlT3B0aW9ucyIsImFsbG93TmVzdGVkQ2hpbGRyZW5FdmVudHMiLCJnZXRDb21wb25lbnRJbmFjdGl2ZU9wdGlvbnMiLCJzY3JvbGxJbnRvT3V0T2ZWaWV3T3B0aW9ucyIsInRyaWdnZXJlZCIsIk1PVVNFX09VVF9ST1VORF9USFJFU0hPTEQiLCJldmVudENvbmZpZyIsImNsaWVudFgiLCJjbGllbnRZIiwicGFnZVgiLCJwYWdlWSIsImJhc2VkT24iLCJzZWxlY3RlZEF4aXMiLCJjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCIsInJldmVyc2UiLCJyZXN0aW5nU3RhdGUiLCJpc1hBeGlzIiwiaXNNb3VzZU91dCIsInZhbHVlIiwibmFtZXNwYWNlZFBhcmFtZXRlcklkIiwiRXZlbnRCYXNlZE9uIiwiVklFV1BPUlQiLCJNYXRoIiwibWluIiwiUEFHRSIsIkVMRU1FTlQiLCJpc01vdXNlRXZlbnQiLCJ3aWR0aCIsImhlaWdodCIsInJvdW5kIiwiZGlzcGF0Y2giLCJwYXJhbWV0ZXJDaGFuZ2VkIiwic2Nyb2xsUGVyY2VudCIsInZpc2libGVIZWlnaHQiLCJzdGFydHNFbnRlcmluZyIsInN0YXJ0c0V4aXRpbmciLCJhZGRFbmRPZmZzZXQiLCJhZGRTdGFydE9mZnNldCIsImFkZE9mZnNldFZhbHVlIiwiZW5kT2Zmc2V0VmFsdWUiLCJlbGVtZW50UmVjdCIsIm9mZnNldFN0YXJ0UGVyYyIsIm9mZnNldEVuZFBlcmMiLCJvZmZzZXRFbGVtZW50VG9wIiwib2Zmc2V0RWxlbWVudEJvdHRvbSIsIm9mZnNldEhlaWdodCIsImZpeGVkU2Nyb2xsSGVpZ2h0IiwiZml4ZWRTY3JvbGxUb3AiLCJtYXgiLCJmaXhlZFNjcm9sbFBlcmMiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7OzsrQkFvZXRCOzs7ZUFBQTs7OzZEQW5laUI7NERBQ0Q7OERBQ0U7aUNBTVg7a0NBRXlDO2tDQUNqQjt3QkFDRDs7Ozs7O0FBRTlCLE1BQU0sRUFDSkEsV0FBVyxFQUNYQyxrQkFBa0IsRUFDbEJDLFVBQVUsRUFDVkMsUUFBUSxFQUNSQyxVQUFVLEVBQ1ZDLFNBQVMsRUFDVEMsY0FBYyxFQUNkQyxhQUFhLEVBQ2JDLGFBQWEsRUFDYkMsZUFBZSxFQUNmQyxVQUFVLEVBQ1ZDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxXQUFXLEVBQ1hDLFVBQVUsRUFDVkMsZ0JBQWdCLEVBQ2hCQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJDLFdBQVcsRUFDWEMsb0JBQW9CLEVBQ3BCQyxtQkFBbUIsRUFDbkJDLFVBQVUsRUFDVkMsV0FBVyxFQUNaLEdBQUdDLGdDQUFlO0FBRW5CLE1BQU1DLG1CQUFtQjtBQUN6QixNQUFNQyxxQkFBcUI7QUFFM0IsTUFBTSxFQUFDQyxlQUFlLEVBQUMsR0FBR0MsbUNBQWtCO0FBRTVDLE1BQU0sRUFBQ0Msd0JBQXdCLEVBQUMsR0FBR0MsdUJBQWU7QUFFbEQsTUFBTUMsbUJBQ0osQ0FBQ0MsWUFDRCxDQUFDQztRQUNDLElBQUksT0FBT0EsWUFBWSxZQUFZRCxVQUFVQyxVQUFVO1lBQ3JELE9BQU87UUFDVDtRQUNBLE9BQU9BO0lBQ1Q7QUFFRixNQUFNQyxZQUFZSCxpQkFBaUIsQ0FBQyxFQUFDSSxPQUFPLEVBQUVDLFdBQVcsRUFBQztJQUN4RCxPQUFPRCxZQUFZQyxZQUFZQyxNQUFNO0FBQ3ZDO0FBRUEsTUFBTUMsa0JBQWtCUCxpQkFBaUIsQ0FBQyxFQUFDSSxPQUFPLEVBQUVDLFdBQVcsRUFBQztJQUM5RCxPQUFPRCxRQUFRSSxRQUFRLENBQUNILFlBQVlD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 }), 4609: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixData", ({ enumerable: true, get: function() { return ixData; } })); const _sharedconstants = __webpack_require__(7087); const { IX2_RAW_DATA_IMPORTED } = _sharedconstants.IX2EngineActionTypes; const ixData = (state = Object.freeze({}), action)=>{ switch(action.type){ case IX2_RAW_DATA_IMPORTED: { return action.payload.ixData || Object.freeze({}); } default: { return state; } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkRhdGFSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmltcG9ydCB7cmF3RGF0YUltcG9ydGVkUGF5bG9hZH0gZnJvbSAnLi4vYWN0aW9ucy9JWDJFbmdpbmVBY3Rpb25zJztcbmNvbnN0IHtJWDJfUkFXX0RBVEFfSU1QT1JURUR9ID0gSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5cbnR5cGUgaXhEYXRhUmVkdWNlckFjdGlvbiA9IHtcbiAgdHlwZTogdHlwZW9mIElYMl9SQVdfREFUQV9JTVBPUlRFRDtcbiAgcGF5bG9hZDogcmF3RGF0YUltcG9ydGVkUGF5bG9hZDtcbn07XG5cbmV4cG9ydCB0eXBlIGl4RGF0YVJlZHVjZXJTdGF0ZSA9IHJhd0RhdGFJbXBvcnRlZFBheWxvYWRbJ2l4RGF0YSddO1xuXG5leHBvcnQgY29uc3QgaXhEYXRhID0gKFxuICBzdGF0ZTogaXhEYXRhUmVkdWNlclN0YXRlID0gT2JqZWN0LmZyZWV6ZShcbiAgICB7fVxuICApIGFzIHJhd0RhdGFJbXBvcnRlZFBheWxvYWRbJ2l4RGF0YSddLFxuICBhY3Rpb246IGl4RGF0YVJlZHVjZXJBY3Rpb25cbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfUkFXX0RBVEFfSU1QT1JURUQ6IHtcbiAgICAgIHJldHVybiBhY3Rpb24ucGF5bG9hZC5peERhdGEgfHwgT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiaXhEYXRhIiwiSVgyX1JBV19EQVRBX0lNUE9SVEVEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJzdGF0ZSIsIk9iamVjdCIsImZyZWV6ZSIsImFjdGlvbiIsInR5cGUiLCJwYXlsb2FkIl0sIm1hcHBpbmdzIjoiOzs7OytCQVdhQTs7O2VBQUFBOzs7aUNBWHNCO0FBRW5DLE1BQU0sRUFBQ0MscUJBQXFCLEVBQUMsR0FBR0MscUNBQW9CO0FBUzdDLE1BQU1GLFNBQVMsQ0FDcEJHLFFBQTRCQyxPQUFPQyxNQUFNLENBQ3ZDLENBQUMsRUFDa0MsRUFDckNDO0lBRUEsT0FBUUEsT0FBT0MsSUFBSTtRQUNqQixLQUFLTjtZQUF1QjtnQkFDMUIsT0FBT0ssT0FBT0UsT0FBTyxDQUFDUixNQUFNLElBQUlJLE9BQU9DLE1BQU0sQ0FBQyxDQUFDO1lBQ2pEO1FBQ0E7WUFBUztnQkFDUCxPQUFPRjtZQUNUO0lBQ0Y7QUFDRiJ9 }), 7718: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixInstances", ({ enumerable: true, get: function() { return ixInstances; } })); const _sharedconstants = __webpack_require__(7087); const _shared = __webpack_require__(9468); const _timm = __webpack_require__(1185); const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_STOPPED, IX2_INSTANCE_ADDED, IX2_INSTANCE_STARTED, IX2_INSTANCE_REMOVED, IX2_ANIMATION_FRAME_CHANGED } = _sharedconstants.IX2EngineActionTypes; const { optimizeFloat, applyEasing, createBezierEasing } = _shared.IX2EasingUtils; const { RENDER_GENERAL } = _sharedconstants.IX2EngineConstants; const { getItemConfigByKey, getRenderType, getStyleProp } = _shared.IX2VanillaUtils; const continuousInstance = (state, action)=>{ const { position: lastPosition, parameterId, actionGroups, destinationKeys, smoothing, restingValue, actionTypeId, customEasingFn, skipMotion, skipToValue } = state; const { parameters } = action.payload; let velocity = Math.max(1 - smoothing, 0.01); let paramValue = parameters[parameterId]; if (paramValue == null) { velocity = 1; paramValue = restingValue; } const nextPosition = Math.max(paramValue, 0) || 0; const positionDiff = optimizeFloat(nextPosition - lastPosition); const position = skipMotion ? skipToValue : optimizeFloat(lastPosition + positionDiff * velocity); const keyframePosition = position * 100; if (position === lastPosition && state.current) { return state; } let fromActionItem; let toActionItem; let positionOffset; let positionRange; for(let i = 0, { length } = actionGroups; i < length; i++){ const { keyframe, actionItems } = actionGroups[i]; if (i === 0) { fromActionItem = actionItems[0]; } if (keyframePosition >= keyframe) { fromActionItem = actionItems[0]; const nextGroup = actionGroups[i + 1]; const hasNextItem = nextGroup && keyframePosition !== keyframe; toActionItem = hasNextItem ? nextGroup.actionItems[0] : null; if (hasNextItem) { positionOffset = keyframe / 100; positionRange = (nextGroup.keyframe - keyframe) / 100; } } } const current = {}; if (fromActionItem && !toActionItem) { for(let i = 0, { length } = destinationKeys; i < length; i++){ const key = destinationKeys[i]; current[key] = getItemConfigByKey(actionTypeId, key, fromActionItem.config); } } else if (fromActionItem && toActionItem && positionOffset !== undefined && positionRange !== undefined) { const localPosition = (position - positionOffset) / positionRange; const easing = fromActionItem.config.easing; const eased = applyEasing(easing, localPosition, customEasingFn); for(let i = 0, { length } = destinationKeys; i < length; i++){ const key = destinationKeys[i]; const fromVal = getItemConfigByKey(actionTypeId, key, fromActionItem.config); const toVal = getItemConfigByKey(actionTypeId, key, toActionItem.config); const diff = toVal - fromVal; const value = diff * eased + fromVal; current[key] = value; } } return (0, _timm.merge)(state, { position, current }); }; const timedInstance = (state, action)=>{ const { active, origin, start, immediate, renderType, verbose, actionItem, destination, destinationKeys, pluginDuration, instanceDelay, customEasingFn, skipMotion } = state; const easing = actionItem.config.easing; let { duration, delay } = actionItem.config; if (pluginDuration != null) { duration = pluginDuration; } delay = instanceDelay != null ? instanceDelay : delay; if (renderType === RENDER_GENERAL) { duration = 0; } else if (immediate || skipMotion) { duration = delay = 0; } const { now } = action.payload; if (active && origin) { const delta = now - (start + delay); if (verbose) { const verboseDelta = now - start; const verboseDuration = duration + delay; const verbosePosition = optimizeFloat(Math.min(Math.max(0, verboseDelta / verboseDuration), 1)); state = (0, _timm.set)(state, 'verboseTimeElapsed', verboseDuration * verbosePosition); } if (delta < 0) { return state; } const position = optimizeFloat(Math.min(Math.max(0, delta / duration), 1)); const eased = applyEasing(easing, position, customEasingFn); const newProps = {}; let current = null; if (destinationKeys.length) { // @ts-expect-error - TS2347 - Untyped function calls may not accept type arguments. | TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'key' implicitly has an 'any' type. current = destinationKeys.reduce((result, key)=>{ const destValue = destination[key]; const originVal = parseFloat(origin[key]) || 0; const diff = parseFloat(destValue) - originVal; const value = diff * eased + originVal; result[key] = value; return result; }, {}); } newProps.current = current; newProps.position = position; if (position === 1) { newProps.active = false; newProps.complete = true; } return (0, _timm.merge)(state, newProps); } return state; }; const ixInstances = (state = Object.freeze({}), action)=>{ switch(action.type){ case IX2_RAW_DATA_IMPORTED: { return action.payload.ixInstances || Object.freeze({}); } case IX2_SESSION_STOPPED: { return Object.freeze({}); } case IX2_INSTANCE_ADDED: { const { instanceId, elementId, actionItem, eventId, eventTarget, eventStateKey, actionListId, groupIndex, isCarrier, origin, destination, immediate, verbose, continuous, parameterId, actionGroups, smoothing, restingValue, pluginInstance, pluginDuration, instanceDelay, skipMotion, skipToValue } = action.payload; const { actionTypeId } = actionItem; const renderType = getRenderType(actionTypeId); const styleProp = getStyleProp(renderType, actionTypeId); const destinationKeys = Object.keys(destination).filter((key)=>// Skip null destination values destination[key] != null && // Skip string destination values typeof destination[key] !== 'string'); const { easing } = actionItem.config; return (0, _timm.set)(state, instanceId, { id: instanceId, elementId, active: false, position: 0, start: 0, origin, destination, destinationKeys, immediate, verbose, current: null, actionItem, actionTypeId, eventId, eventTarget, eventStateKey, actionListId, groupIndex, renderType, isCarrier, styleProp, continuous, parameterId, actionGroups, smoothing, restingValue, pluginInstance, pluginDuration, instanceDelay, skipMotion, skipToValue, customEasingFn: Array.isArray(easing) && easing.length === 4 ? createBezierEasing(easing) : undefined }); } case IX2_INSTANCE_STARTED: { const { instanceId, time } = action.payload; return (0, _timm.mergeIn)(state, [ instanceId ], { active: true, complete: false, start: time }); } case IX2_INSTANCE_REMOVED: { const { instanceId } = action.payload; if (!state[instanceId]) { return state; } const newState = {}; const keys = Object.keys(state); const { length } = keys; for(let i = 0; i < length; i++){ const key = keys[i]; if (key !== instanceId) { // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. | TS2538 - Type 'undefined' cannot be used as an index type. newState[key] = state[key]; } } return newState; } case IX2_ANIMATION_FRAME_CHANGED: { let newState = state; const keys = Object.keys(state); const { length } = keys; for(let i = 0; i < length; i++){ const key = keys[i]; // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. const instance = state[key]; const reducer = instance.continuous ? continuousInstance : timedInstance; // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'Key'. newState = (0, _timm.set)(newState, key, reducer(instance, action)); } return newState; } default: { return state; } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkluc3RhbmNlc1JlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbmltcG9ydCB7XG4gIElYMkVuZ2luZUNvbnN0YW50cyxcbiAgSVgyRW5naW5lQWN0aW9uVHlwZXMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuaW1wb3J0IHtJWDJFYXNpbmdVdGlscywgSVgyVmFuaWxsYVV0aWxzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcblxuY29uc3Qge1xuICBJWDJfUkFXX0RBVEFfSU1QT1JURUQsXG4gIElYMl9TRVNTSU9OX1NUT1BQRUQsXG4gIElYMl9JTlNUQU5DRV9BRERFRCxcbiAgSVgyX0lOU1RBTkNFX1NUQVJURUQsXG4gIElYMl9JTlNUQU5DRV9SRU1PVkVELFxuICBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQsXG59ID0gSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5jb25zdCB7b3B0aW1pemVGbG9hdCwgYXBwbHlFYXNpbmcsIGNyZWF0ZUJlemllckVhc2luZ30gPSBJWDJFYXNpbmdVdGlscztcbmNvbnN0IHtSRU5ERVJfR0VORVJBTH0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5jb25zdCB7Z2V0SXRlbUNvbmZpZ0J5S2V5LCBnZXRSZW5kZXJUeXBlLCBnZXRTdHlsZVByb3B9ID0gSVgyVmFuaWxsYVV0aWxzO1xuXG5pbXBvcnQge3NldCwgbWVyZ2UsIG1lcmdlSW59IGZyb20gJ3RpbW0nO1xuXG5jb25zdCBjb250aW51b3VzSW5zdGFuY2UgPSAoc3RhdGU6IGFueSwgYWN0aW9uOiBhbnkpID0+IHtcbiAgY29uc3Qge1xuICAgIHBvc2l0aW9uOiBsYXN0UG9zaXRpb24sXG4gICAgcGFyYW1ldGVySWQsXG4gICAgYWN0aW9uR3JvdXBzLFxuICAgIGRlc3RpbmF0aW9uS2V5cyxcbiAgICBzbW9vdGhpbmcsXG4gICAgcmVzdGluZ1ZhbHVlLFxuICAgIGFjdGlvblR5cGVJZCxcbiAgICBjdXN0b21FYXNpbmdGbixcbiAgICBza2lwTW90aW9uLFxuICAgIHNraXBUb1ZhbHVlLFxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3Qge3BhcmFtZXRlcnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGxldCB2ZWxvY2l0eSA9IE1hdGgubWF4KDEgLSBzbW9vdGhpbmcsIDAuMDEpO1xuICBsZXQgcGFyYW1WYWx1ZSA9IHBhcmFtZXRlcnNbcGFyYW1ldGVySWRdO1xuICBpZiAocGFyYW1WYWx1ZSA9PSBudWxsKSB7XG4gICAgdmVsb2NpdHkgPSAxO1xuICAgIHBhcmFtVmFsdWUgPSByZXN0aW5nVmFsdWU7XG4gIH1cbiAgY29uc3QgbmV4dFBvc2l0aW9uID0gTWF0aC5tYXgocGFyYW1WYWx1ZSwgMCkgfHwgMDtcbiAgY29uc3QgcG9zaXRpb25EaWZmID0gb3B0aW1pemVGbG9hdChuZXh0UG9zaXRpb24gLSBsYXN0UG9zaXRpb24pO1xuICBjb25zdCBwb3NpdGlvbiA9IHNraXBNb3Rpb25cbiAgICA/IHNraXBUb1ZhbHVlXG4gICAgOiBvcHRpbWl6ZUZsb2F0KGxhc3RQb3NpdGlvbiArIHBvc2l0aW9uRGlmZiAqIHZlbG9jaXR5KTtcbiAgY29uc3Qga2V5ZnJhbWVQb3NpdGlvbiA9IHBvc2l0aW9uICogMTAwO1xuXG4gIGlmIChwb3NpdGlvbiA9PT0gbGFzdFBvc2l0aW9uICYmIHN0YXRlLmN1cnJlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZnJvbUFjdGlvbkl0ZW07XG4gIGxldCB0b0FjdGlvbkl0ZW07XG4gIGxldCBwb3NpdGlvbk9mZnNldDtcbiAgbGV0IHBvc2l0aW9uUmFuZ2U7XG5cbiAgZm9yIChsZXQgaSA9IDAsIHtsZW5ndGh9ID0gYWN0aW9uR3JvdXBzOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7a2V5ZnJhbWUsIGFjdGlvbkl0ZW1zfSA9IGFjdGlvbkdyb3Vwc1tpXTtcblxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBmcm9tQWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zWzBdO1xuICAgIH1cblxuICAgIGlmIChrZXlmcmFtZVBvc2l0aW9uID49IGtleWZyYW1lKSB7XG4gICAgICBmcm9tQWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zWzBdO1xuXG4gICAgICBjb25zdCBuZXh0R3JvdXAgPSBhY3Rpb25Hcm91cHNbaSArIDFdO1xuICAgICAgY29uc3QgaGFzTmV4dEl0ZW0gPSBuZXh0R3JvdXAgJiYga2V5ZnJhbWVQb3NpdGlvbiAhPT0ga2V5ZnJhbWU7XG5cbiAgICAgIHRvQWN0aW9uSXRlbSA9IGhhc05leHRJdGVtID8gbmV4dEdyb3VwLmFjdGlvbkl0ZW1zWzBdIDogbnVsbDtcblxuICAgICAgaWYgKGhhc05leHRJdGVtKSB7XG4gICAgICAgIHBvc2l0aW9uT2Zmc2V0ID0ga2V5ZnJhbWUgLyAxMDA7XG4gICAgICAgIHBvc2l0aW9uUmFuZ2UgPSAobmV4dEdyb3VwLmtleWZyYW1lIC0ga2V5ZnJhbWUpIC8gMTAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBpZiAoZnJvbUFjdGlvbkl0ZW0gJiYgIXRvQWN0aW9uSXRlbSkge1xuICAgIGZvciAobGV0IGkgPSAwLCB7bGVuZ3RofSA9IGRlc3RpbmF0aW9uS2V5czsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBkZXN0aW5hdGlvbktleXNbaV07XG4gICAgICBjdXJyZW50W2tleV0gPSBnZXRJdGVtQ29uZmlnQnlLZXkoXG4gICAgICAgIGFjdGlvblR5cGVJZCxcbiAgICAgICAga2V5LFxuICAgICAgICBmcm9tQWN0aW9uSXRlbS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGZyb21BY3Rpb25JdGVtICYmXG4gICAgdG9BY3Rpb25JdGVtICYmXG4gICAgcG9zaXRpb25PZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHBvc2l0aW9uUmFuZ2UgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBjb25zdCBsb2NhbFBvc2l0aW9uID0gKHBvc2l0aW9uIC0gcG9zaXRpb25PZmZzZXQpIC8gcG9zaXRpb25SYW5nZTtcbiAgICBjb25zdCBlYXNpbmcgPSBmcm9tQWN0aW9uSXRlbS5jb25maWcuZWFzaW5nO1xuICAgIGNvbnN0IGVhc2VkID0gYXBwbHlFYXNpbmcoZWFzaW5nLCBsb2NhbFBvc2l0aW9uLCBjdXN0b21FYXNpbmdGbik7XG4gICAgZm9yIChsZXQgaSA9IDAsIHtsZW5ndGh9ID0gZGVzdGluYXRpb25LZXlzOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGRlc3RpbmF0aW9uS2V5c1tpXTtcbiAgICAgIGNvbnN0IGZyb21WYWwgPSBnZXRJdGVtQ29uZmlnQnlLZXkoXG4gICAgICAgIGFjdGlvblR5cGVJZCxcbiAgICAgICAga2V5LFxuICAgICAgICBmcm9tQWN0aW9uSXRlbS5jb25maWdcbiAgICAgICk7XG4gICAgICBjb25zdCB0b1ZhbCA9IGdldEl0ZW1Db25maWdCeUtleShhY3Rpb25UeXBlSWQsIGtleSwgdG9BY3Rpb25JdGVtLmNvbmZpZyk7XG4gICAgICBjb25zdCBkaWZmID0gdG9WYWwgLSBmcm9tVmFsO1xuICAgICAgY29uc3QgdmFsdWUgPSBkaWZmICogZWFzZWQgKyBmcm9tVmFsO1xuICAgICAgY3VycmVudFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlKHN0YXRlLCB7XG4gICAgcG9zaXRpb24sXG4gICAgY3VycmVudCxcbiAgfSk7XG59O1xuXG5jb25zdCB0aW1lZEluc3RhbmNlID0gKHN0YXRlOiBhbnksIGFjdGlvbjogYW55KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmUsXG4gICAgb3JpZ2luLFxuICAgIHN0YXJ0LFxuICAgIGltbWVkaWF0ZSxcbiAgICByZW5kZXJUeXBlLFxuICAgIHZlcmJvc2UsXG4gICAgYWN0aW9uSXRlbSxcbiAgICBkZXN0aW5hdGlvbixcbiAgICBkZXN0aW5hdGlvbktleXMsXG4gICAgcGx1Z2luRHVyYXRpb24sXG4gICAgaW5zdGFuY2VEZWxheSxcbiAgICBjdXN0b21FYXNpbmdGbixcbiAgICBza2lwTW90aW9uLFxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgZWFzaW5nID0gYWN0aW9uSXRlbS5jb25maWcuZWFzaW5nO1xuICBsZXQge2R1cmF0aW9uLCBkZWxheX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcblxuICBpZiAocGx1Z2luRHVyYXRpb24gIT0gbnVsbCkge1xuICAgIGR1cmF0aW9uID0gcGx1Z2luRHVyYXRpb247XG4gIH1cblxuICBkZWxheSA9IGluc3RhbmNlRGVsYXkgIT0gbnVsbCA/IGluc3RhbmNlRGVsYXkgOiBkZWxheTtcblxuICBpZiAocmVuZGVyVHlwZSA9PT0gUkVOREVSX0dFTkVSQUwpIHtcbiAgICBkdXJhdGlvbiA9IDA7XG4gIH0gZWxzZSBpZiAoaW1tZWRpYXRlIHx8IHNraXBNb3Rpb24pIHtcbiAgICBkdXJhdGlvbiA9IGRlbGF5ID0gMDtcbiAgfVxuICBjb25zdCB7bm93fSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGlmIChhY3RpdmUgJiYgb3JpZ2luKSB7XG4gICAgY29uc3QgZGVsdGEgPSBub3cgLSAoc3RhcnQgKyBkZWxheSk7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgY29uc3QgdmVyYm9zZURlbHRhID0gbm93IC0gc3RhcnQ7XG4gICAgICBjb25zdCB2ZXJib3NlRHVyYXRpb24gPSBkdXJhdGlvbiArIGRlbGF5O1xuICAgICAgY29uc3QgdmVyYm9zZVBvc2l0aW9uID0gb3B0aW1pemVGbG9hdChcbiAgICAgICAgTWF0aC5taW4oTWF0aC5tYXgoMCwgdmVyYm9zZURlbHRhIC8gdmVyYm9zZUR1cmF0aW9uKSwgMSlcbiAgICAgICk7XG4gICAgICBzdGF0ZSA9IHNldChcbiAgICAgICAgc3RhdGUsXG4gICAgICAgICd2ZXJib3NlVGltZUVsYXBzZWQnLFxuICAgICAgICB2ZXJib3NlRHVyYXRpb24gKiB2ZXJib3NlUG9zaXRpb25cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uID0gb3B0aW1pemVGbG9hdChNYXRoLm1pbihNYXRoLm1heCgwLCBkZWx0YSAvIGR1cmF0aW9uKSwgMSkpO1xuICAgIGNvbnN0IGVhc2VkID0gYXBwbHlFYXNpbmcoZWFzaW5nLCBwb3NpdGlvbiwgY3VzdG9tRWFzaW5nRm4pO1xuXG4gICAgY29uc3QgbmV3UHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGxldCBjdXJyZW50ID0gbnVsbDtcblxuICAgIGlmIChkZXN0aW5hdGlvbktleXMubGVuZ3RoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ3IC0gVW50eXBlZCBmdW5jdGlvbiBjYWxscyBtYXkgbm90IGFjY2VwdCB0eXBlIGFyZ3VtZW50cy4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Jlc3VsdCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2tleScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICAgIGN1cnJlbnQgPSBkZXN0aW5hdGlvbktleXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBkZXN0VmFsdWUgPSBkZXN0aW5hdGlvbltrZXldO1xuICAgICAgICBjb25zdCBvcmlnaW5WYWwgPSBwYXJzZUZsb2F0KG9yaWdpbltrZXldKSB8fCAwO1xuICAgICAgICBjb25zdCBkaWZmID0gcGFyc2VGbG9hdChkZXN0VmFsdWUpIC0gb3JpZ2luVmFsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRpZmYgKiBlYXNlZCArIG9yaWdpblZhbDtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBuZXdQcm9wcy5jdXJyZW50ID0gY3VycmVudDtcbiAgICBuZXdQcm9wcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSAxKSB7XG4gICAgICBuZXdQcm9wcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIG5ld1Byb3BzLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2Uoc3RhdGUsIG5ld1Byb3BzKTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59O1xuXG50eXBlIGl4SW5zdGFuY2VzUmVkdWNlclN0YXRlID0gUmVjb3JkPFxuICBzdHJpbmcsXG4gIC8vIFRPRE86IG1hbnkgb2YgdGhlIHZhbGlkIGZpZWxkcyBhcmUgc3RpbGwgbWlzc2luZyBpbiB0aGlzIHNoYXBlIC0gYWRkIHRoZW0sIHBsZWFzZVxuICB7Y29udGludW91czogYm9vbGVhbjsgYWN0aW9uTGlzdElkOiBzdHJpbmc7IHZlcmJvc2U6IGJvb2xlYW59XG4+O1xuXG5leHBvcnQgY29uc3QgaXhJbnN0YW5jZXMgPSAoXG4gIHN0YXRlOiBpeEluc3RhbmNlc1JlZHVjZXJTdGF0ZSA9IE9iamVjdC5mcmVlemUoe30pLFxuICBhY3Rpb246IGFueVxuKTogaXhJbnN0YW5jZXNSZWR1Y2VyU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfUkFXX0RBVEFfSU1QT1JURUQ6IHtcbiAgICAgIHJldHVybiBhY3Rpb24ucGF5bG9hZC5peEluc3RhbmNlcyB8fCBPYmplY3QuZnJlZXplKHt9KTtcbiAgICB9XG4gICAgY2FzZSBJWDJfU0VTU0lPTl9TVE9QUEVEOiB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgfVxuICAgIGNhc2UgSVgyX0lOU1RBTkNFX0FEREVEOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgZ3JvdXBJbmRleCxcbiAgICAgICAgaXNDYXJyaWVyLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBpbW1lZGlhdGUsXG4gICAgICAgIHZlcmJvc2UsXG4gICAgICAgIGNvbnRpbnVvdXMsXG4gICAgICAgIHBhcmFtZXRlcklkLFxuICAgICAgICBhY3Rpb25Hcm91cHMsXG4gICAgICAgIHNtb290aGluZyxcbiAgICAgICAgcmVzdGluZ1ZhbHVlLFxuICAgICAgICBwbHVnaW5JbnN0YW5jZSxcbiAgICAgICAgcGx1Z2luRHVyYXRpb24sXG4gICAgICAgIGluc3RhbmNlRGVsYXksXG4gICAgICAgIHNraXBNb3Rpb24sXG4gICAgICAgIHNraXBUb1ZhbHVlLFxuICAgICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gICAgICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBjb25zdCByZW5kZXJUeXBlID0gZ2V0UmVuZGVyVHlwZShhY3Rpb25UeXBlSWQpO1xuICAgICAgY29uc3Qgc3R5bGVQcm9wID0gZ2V0U3R5bGVQcm9wKHJlbmRlclR5cGUsIGFjdGlvblR5cGVJZCk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbktleXMgPSBPYmplY3Qua2V5cyhkZXN0aW5hdGlvbikuZmlsdGVyKFxuICAgICAgICAoa2V5KSA9PlxuICAgICAgICAgIC8vIFNraXAgbnVsbCBkZXN0aW5hdGlvbiB2YWx1ZXNcbiAgICAgICAgICBkZXN0aW5hdGlvbltrZXldICE9IG51bGwgJiZcbiAgICAgICAgICAvLyBTa2lwIHN0cmluZyBkZXN0aW5hdGlvbiB2YWx1ZXNcbiAgICAgICAgICB0eXBlb2YgZGVzdGluYXRpb25ba2V5XSAhPT0gJ3N0cmluZydcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtlYXNpbmd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG5cbiAgICAgIHJldHVybiBzZXQoc3RhdGUsIGluc3RhbmNlSWQsIHtcbiAgICAgICAgaWQ6IGluc3RhbmNlSWQsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb246IDAsXG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBkZXN0aW5hdGlvbktleXMsXG4gICAgICAgIGltbWVkaWF0ZSxcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgY3VycmVudDogbnVsbCxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgYWN0aW9uVHlwZUlkLFxuICAgICAgICBldmVudElkLFxuICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgZXZlbnRTdGF0ZUtleSxcbiAgICAgICAgYWN0aW9uTGlzdElkLFxuICAgICAgICBncm91cEluZGV4LFxuICAgICAgICByZW5kZXJUeXBlLFxuICAgICAgICBpc0NhcnJpZXIsXG4gICAgICAgIHN0eWxlUHJvcCxcbiAgICAgICAgY29udGludW91cyxcbiAgICAgICAgcGFyYW1ldGVySWQsXG4gICAgICAgIGFjdGlvbkdyb3VwcyxcbiAgICAgICAgc21vb3RoaW5nLFxuICAgICAgICByZXN0aW5nVmFsdWUsXG4gICAgICAgIHBsdWdpbkluc3RhbmNlLFxuICAgICAgICBwbHVnaW5EdXJhdGlvbixcbiAgICAgICAgaW5zdGFuY2VEZWxheSxcbiAgICAgICAgc2tpcE1vdGlvbixcbiAgICAgICAgc2tpcFRvVmFsdWUsXG4gICAgICAgIGN1c3RvbUVhc2luZ0ZuOlxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoZWFzaW5nKSAmJiBlYXNpbmcubGVuZ3RoID09PSA0XG4gICAgICAgICAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdhbnlbXScgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ0lYMkVhc2luZ0N1c3RvbVR5cGUnLlxuICAgICAgICAgICAgICBjcmVhdGVCZXppZXJFYXNpbmcoZWFzaW5nKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBJWDJfSU5TVEFOQ0VfU1RBUlRFRDoge1xuICAgICAgY29uc3Qge2luc3RhbmNlSWQsIHRpbWV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gbWVyZ2VJbihzdGF0ZSwgW2luc3RhbmNlSWRdLCB7XG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgY29tcGxldGU6IGZhbHNlLFxuICAgICAgICBzdGFydDogdGltZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlIElYMl9JTlNUQU5DRV9SRU1PVkVEOiB7XG4gICAgICBjb25zdCB7aW5zdGFuY2VJZH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGlmICghc3RhdGVbaW5zdGFuY2VJZF0pIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdGF0ZSk7XG4gICAgICBjb25zdCB7bGVuZ3RofSA9IGtleXM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChrZXkgIT09IGluc3RhbmNlSWQpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTM4IC0gVHlwZSAndW5kZWZpbmVkJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLiB8IFRTMjUzOCAtIFR5cGUgJ3VuZGVmaW5lZCcgY2Fubm90IGJlIHVzZWQgYXMgYW4gaW5kZXggdHlwZS5cbiAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gc3RhdGVba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cbiAgICBjYXNlIElYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRDoge1xuICAgICAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RhdGUpO1xuICAgICAgY29uc3Qge2xlbmd0aH0gPSBrZXlzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTM4IC0gVHlwZSAndW5kZWZpbmVkJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLlxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHN0YXRlW2tleV07XG4gICAgICAgIGNvbnN0IHJlZHVjZXIgPSBpbnN0YW5jZS5jb250aW51b3VzXG4gICAgICAgICAgPyBjb250aW51b3VzSW5zdGFuY2VcbiAgICAgICAgICA6IHRpbWVkSW5zdGFuY2U7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdLZXknLlxuICAgICAgICBuZXdTdGF0ZSA9IHNldChuZXdTdGF0ZSwga2V5LCByZWR1Y2VyKGluc3RhbmNlLCBhY3Rpb24pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJpeEluc3RhbmNlcyIsIklYMl9SQVdfREFUQV9JTVBPUlRFRCIsIklYMl9TRVNTSU9OX1NUT1BQRUQiLCJJWDJfSU5TVEFOQ0VfQURERUQiLCJJWDJfSU5TVEFOQ0VfU1RBUlRFRCIsIklYMl9JTlNUQU5DRV9SRU1PVkVEIiwiSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJvcHRpbWl6ZUZsb2F0IiwiYXBwbHlFYXNpbmciLCJjcmVhdGVCZXppZXJFYXNpbmciLCJJWDJFYXNpbmdVdGlscyIsIlJFTkRFUl9HRU5FUkFMIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiZ2V0SXRlbUNvbmZpZ0J5S2V5IiwiZ2V0UmVuZGVyVHlwZSIsImdldFN0eWxlUHJvcCIsIklYMlZhbmlsbGFVdGlscyIsImNvbnRpbnVvdXNJbnN0YW5jZSIsInN0YXRlIiwiYWN0aW9uIiwicG9zaXRpb24iLCJsYXN0UG9zaXRpb24iLCJwYXJhbWV0ZXJJZCIsImFjdGlvbkdyb3VwcyIsImRlc3RpbmF0aW9uS2V5cyIsInNtb290aGluZyIsInJlc3RpbmdWYWx1ZSIsImFjdGlvblR5cGVJZCIsImN1c3RvbUVhc2luZ0ZuIiwic2tpcE1vdGlvbiIsInNraXBUb1ZhbHVlIiwicGFyYW1ldGVycyIsInBheWxvYWQiLCJ2ZWxvY2l0eSIsIk1hdGgiLCJtYXgiLCJwYXJhbVZhbHVlIiwibmV4dFBvc2l0aW9uIiwicG9zaXRpb25EaWZmIiwia2V5ZnJhbWVQb3NpdGlvbiIsImN1cnJlbnQiLCJmcm9tQWN0aW9uSXRlbSIsInRvQWN0aW9uSXRlbSIsInBvc2l0aW9uT2Zmc2V0IiwicG9zaXRpb25SYW5nZSIsImkiLCJsZW5ndGgiLCJrZXlmcmFtZSIsImFjdGlvbkl0ZW1zIiwibmV4dEdyb3VwIiwiaGFzTmV4dEl0ZW0iLCJrZXkiLCJjb25maWciLCJ1bmRlZmluZWQiLCJsb2NhbFBvc2l0aW9uIiwiZWFzaW5nIiwiZWFzZWQiLCJmcm9tVmFsIiwidG9WYWwiLCJkaWZmIiwidmFsdWUiLCJtZXJnZSIsInRpbWVkSW5zdGFuY2UiLCJhY3RpdmUiLCJvcmlnaW4iLCJzdGFydCIsImltbWVkaWF0ZSIsInJlbmRlclR5cGUiLCJ2ZXJib3NlIiwiYWN0aW9uSXRlbSIsImRlc3RpbmF0aW9uIiwicGx1Z2luRHVyYXRpb24iLCJpbnN0YW5jZURlbGF5IiwiZHVyYXRpb24iLCJkZWxheSIsIm5vdyIsImRlbHRhIiwidmVyYm9zZURlbHRhIiwidmVyYm9zZUR1cmF0aW9uIiwidmVyYm9zZVBvc2l0aW9uIiwibWluIiwic2V0IiwibmV3UHJvcHMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJkZXN0VmFsdWUiLCJvcmlnaW5WYWwiLCJwYXJzZUZsb2F0IiwiY29tcGxldGUiLCJPYmplY3QiLCJmcmVlemUiLCJ0eXBlIiwiaW5zdGFuY2VJZCIsImVsZW1lbnRJZCIsImV2ZW50SWQiLCJldmVudFRhcmdldCIsImV2ZW50U3RhdGVLZXkiLCJhY3Rpb25MaXN0SWQiLCJncm91cEluZGV4IiwiaXNDYXJyaWVyIiwiY29udGludW91cyIsInBsdWdpbkluc3RhbmNlIiwic3R5bGVQcm9wIiwia2V5cyIsImZpbHRlciIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwidGltZSIsIm1lcmdlSW4iLCJuZXdTdGF0ZSIsImluc3RhbmNlIiwicmVkdWNlciJdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCOzs7OytCQXFOVEE7OztlQUFBQTs7O2lDQWhOTjt3QkFFdUM7c0JBY1o7QUFabEMsTUFBTSxFQUNKQyxxQkFBcUIsRUFDckJDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxvQkFBb0IsRUFDcEJDLG9CQUFvQixFQUNwQkMsMkJBQTJCLEVBQzVCLEdBQUdDLHFDQUFvQjtBQUN4QixNQUFNLEVBQUNDLGFBQWEsRUFBRUMsV0FBVyxFQUFFQyxrQkFBa0IsRUFBQyxHQUFHQyxzQkFBYztBQUN2RSxNQUFNLEVBQUNDLGNBQWMsRUFBQyxHQUFHQyxtQ0FBa0I7QUFDM0MsTUFBTSxFQUFDQyxrQkFBa0IsRUFBRUMsYUFBYSxFQUFFQyxZQUFZLEVBQUMsR0FBR0MsdUJBQWU7QUFJekUsTUFBTUMscUJB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 }), 1540: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixParameters", ({ enumerable: true, get: function() { return ixParameters; } })); const _sharedconstants = __webpack_require__(7087); const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_STOPPED, IX2_PARAMETER_CHANGED } = _sharedconstants.IX2EngineActionTypes; const ixParameters = (state = {}, action)=>{ switch(action.type){ case IX2_RAW_DATA_IMPORTED: { return(// @ts-expect-error - Further investigation is needed as looks like IX2_RAW_DATA_IMPORTED is never triggered with ixParameters action.payload.ixParameters || {}); } case IX2_SESSION_STOPPED: { return {}; } case IX2_PARAMETER_CHANGED: { const { key, value } = action.payload; state[key] = value; return state; } default: { return state; } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlBhcmFtZXRlcnNSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmltcG9ydCB7cmF3RGF0YUltcG9ydGVkUGF5bG9hZH0gZnJvbSAnLi4vYWN0aW9ucy9JWDJFbmdpbmVBY3Rpb25zJztcbmNvbnN0IHtJWDJfUkFXX0RBVEFfSU1QT1JURUQsIElYMl9TRVNTSU9OX1NUT1BQRUQsIElYMl9QQVJBTUVURVJfQ0hBTkdFRH0gPVxuICBJWDJFbmdpbmVBY3Rpb25UeXBlcztcblxudHlwZSBpeFBhcmFtZXRlcnNBY3Rpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfUkFXX0RBVEFfSU1QT1JURUQ7XG4gICAgICBwYXlsb2FkOiByYXdEYXRhSW1wb3J0ZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX1NFU1NJT05fU1RPUFBFRDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9QQVJBTUVURVJfQ0hBTkdFRDtcbiAgICAgIHBheWxvYWQ6IHtrZXk6IHN0cmluZzsgdmFsdWU6IG51bWJlcn07XG4gICAgfTtcblxudHlwZSBpeFBhcmFtZXRlcnNSZWR1Y2VyU3RhdGUgPSBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydCBjb25zdCBpeFBhcmFtZXRlcnMgPSAoXG4gIHN0YXRlOiBpeFBhcmFtZXRlcnNSZWR1Y2VyU3RhdGUgPSB7LyptdXRhYmxlIGZsYXQgc3RhdGUqL30sXG4gIGFjdGlvbjogaXhQYXJhbWV0ZXJzQWN0aW9uXG4pOiBpeFBhcmFtZXRlcnNSZWR1Y2VyU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfUkFXX0RBVEFfSU1QT1JURUQ6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBGdXJ0aGVyIGludmVzdGlnYXRpb24gaXMgbmVlZGVkIGFzIGxvb2tzIGxpa2UgSVgyX1JBV19EQVRBX0lNUE9SVEVEIGlzIG5ldmVyIHRyaWdnZXJlZCB3aXRoIGl4UGFyYW1ldGVyc1xuICAgICAgICBhY3Rpb24ucGF5bG9hZC5peFBhcmFtZXRlcnMgfHwgey8qbXV0YWJsZSBmbGF0IHN0YXRlKi99XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIElYMl9TRVNTSU9OX1NUT1BQRUQ6IHtcbiAgICAgIHJldHVybiB7LyptdXRhYmxlIGZsYXQgc3RhdGUqL307XG4gICAgfVxuICAgIGNhc2UgSVgyX1BBUkFNRVRFUl9DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7a2V5LCB2YWx1ZX0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHN0YXRlW2tleV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJpeFBhcmFtZXRlcnMiLCJJWDJfUkFXX0RBVEFfSU1QT1JURUQiLCJJWDJfU0VTU0lPTl9TVE9QUEVEIiwiSVgyX1BBUkFNRVRFUl9DSEFOR0VEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJzdGF0ZSIsImFjdGlvbiIsInR5cGUiLCJwYXlsb2FkIiwia2V5IiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBcUJhQTs7O2VBQUFBOzs7aUNBckJzQjtBQUVuQyxNQUFNLEVBQUNDLHFCQUFxQixFQUFFQyxtQkFBbUIsRUFBRUMscUJBQXFCLEVBQUMsR0FDdkVDLHFDQUFvQjtBQWtCZixNQUFNSixlQUFlLENBQzFCSyxRQUFrQyxDQUF1QixDQUFDLEVBQzFEQztJQUVBLE9BQVFBLE9BQU9DLElBQUk7UUFDakIsS0FBS047WUFBdUI7Z0JBQzFCLE9BQ0UsOEhBQThIO2dCQUM5SEssT0FBT0UsT0FBTyxDQUFDUixZQUFZLElBQUksQ0FBdUI7WUFFMUQ7UUFDQSxLQUFLRTtZQUFxQjtnQkFDeEIsT0FBTyxDQUF1QjtZQUNoQztRQUNBLEtBQUtDO1lBQXVCO2dCQUMxQixNQUFNLEVBQUNNLEdBQUcsRUFBRUMsS0FBSyxFQUFDLEdBQUdKLE9BQU9FLE9BQU87Z0JBQ25DSCxLQUFLLENBQUNJLElBQUksR0FBR0M7Z0JBQ2IsT0FBT0w7WUFDVDtRQUNBO1lBQVM7Z0JBQ1AsT0FBT0E7WUFDVDtJQUNGO0FBQ0YifQ== }), 7243: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "default", ({ enumerable: true, get: function() { return _default; } })); const _redux = __webpack_require__(9516); const _IX2DataReducer = __webpack_require__(4609); const _IX2RequestReducer = __webpack_require__(628); const _IX2SessionReducer = __webpack_require__(5862); const _shared = __webpack_require__(9468); const _IX2InstancesReducer = __webpack_require__(7718); const _IX2ParametersReducer = __webpack_require__(1540); const { ixElements } = _shared.IX2ElementsReducer; const _default = (0, _redux.combineReducers)({ ixData: _IX2DataReducer.ixData, ixRequest: _IX2RequestReducer.ixRequest, ixSession: _IX2SessionReducer.ixSession, ixElements, ixInstances: _IX2InstancesReducer.ixInstances, ixParameters: _IX2ParametersReducer.ixParameters }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdG9yZSwgY29tYmluZVJlZHVjZXJzLCB0eXBlIFJlZHVjZXJ9IGZyb20gJ3JlZHV4JztcblxuaW1wb3J0IHtpeERhdGEsIHR5cGUgaXhEYXRhUmVkdWNlclN0YXRlfSBmcm9tICcuL0lYMkRhdGFSZWR1Y2VyJztcbmltcG9ydCB7aXhSZXF1ZXN0fSBmcm9tICcuL0lYMlJlcXVlc3RSZWR1Y2VyJztcbmltcG9ydCB7aXhTZXNzaW9ufSBmcm9tICcuL0lYMlNlc3Npb25SZWR1Y2VyJztcbmltcG9ydCB7SVgyRWxlbWVudHNSZWR1Y2VyfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcbmNvbnN0IHtpeEVsZW1lbnRzfSA9IElYMkVsZW1lbnRzUmVkdWNlcjtcbmltcG9ydCB7aXhJbnN0YW5jZXN9IGZyb20gJy4vSVgySW5zdGFuY2VzUmVkdWNlcic7XG5pbXBvcnQge2l4UGFyYW1ldGVyc30gZnJvbSAnLi9JWDJQYXJhbWV0ZXJzUmVkdWNlcic7XG5cbmV4cG9ydCB0eXBlIElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlID0ge1xuICBpeERhdGE6IFJldHVyblR5cGU8dHlwZW9mIGl4RGF0YT47XG4gIGl4UGFyYW1ldGVyczogUmV0dXJuVHlwZTx0eXBlb2YgaXhQYXJhbWV0ZXJzPjtcbiAgaXhTZXNzaW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBpeFNlc3Npb24+O1xuICBpeEVsZW1lbnRzOiBSZXR1cm5UeXBlPHR5cGVvZiBpeEVsZW1lbnRzPjtcbiAgaXhJbnN0YW5jZXM6IFJldHVyblR5cGU8dHlwZW9mIGl4SW5zdGFuY2VzPjtcbiAgaXhSZXF1ZXN0OiBSZXR1cm5UeXBlPHR5cGVvZiBpeFJlcXVlc3Q+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tYmluZVJlZHVjZXJzPElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlPih7XG4gIGl4RGF0YTogaXhEYXRhIGFzIFJlZHVjZXI8aXhEYXRhUmVkdWNlclN0YXRlPixcbiAgaXhSZXF1ZXN0LFxuICBpeFNlc3Npb24sXG4gIGl4RWxlbWVudHMsXG4gIGl4SW5zdGFuY2VzLFxuICBpeFBhcmFtZXRlcnMsXG59KTtcblxuZXhwb3J0IHR5cGUgSVgyRW5naW5lUmVkdWNlclN0b3JlID0gU3RvcmU8SVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGU+O1xuIl0sIm5hbWVzIjpbIml4RWxlbWVudHMiLCJJWDJFbGVtZW50c1JlZHVjZXIiLCJjb21iaW5lUmVkdWNlcnMiLCJpeERhdGEiLCJpeFJlcXVlc3QiLCJpeFNlc3Npb24iLCJpeEluc3RhbmNlcyIsIml4UGFyYW1ldGVycyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFtQkE7OztlQUFBOzs7dUJBbkJtRDtnQ0FFTDttQ0FDdEI7bUNBQ0E7d0JBQ1M7cUNBRVA7c0NBQ0M7QUFGM0IsTUFBTSxFQUFDQSxVQUFVLEVBQUMsR0FBR0MsMEJBQWtCO01BYXZDLFdBQWVDLElBQUFBLHNCQUFlLEVBQTZCO0lBQ3pEQyxRQUFRQSxzQkFBTTtJQUNkQyxXQUFBQSw0QkFBUztJQUNUQyxXQUFBQSw0QkFBUztJQUNUTDtJQUNBTSxhQUFBQSxnQ0FBVztJQUNYQyxjQUFBQSxrQ0FBWTtBQUNkIn0= }), 628: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixRequest", ({ enumerable: true, get: function() { return ixRequest; } })); const _sharedconstants = __webpack_require__(7087); const _timm = __webpack_require__(1185); const { IX2_PREVIEW_REQUESTED, IX2_PLAYBACK_REQUESTED, IX2_STOP_REQUESTED, IX2_CLEAR_REQUESTED } = _sharedconstants.IX2EngineActionTypes; const initialState = { preview: {}, playback: {}, stop: {}, clear: {} }; const stateKeys = Object.create(null, { [IX2_PREVIEW_REQUESTED]: { value: 'preview' }, [IX2_PLAYBACK_REQUESTED]: { value: 'playback' }, [IX2_STOP_REQUESTED]: { value: 'stop' }, [IX2_CLEAR_REQUESTED]: { value: 'clear' } }); const ixRequest = (state = initialState, action)=>{ if (action.type in stateKeys) { const key = [ stateKeys[action.type] ]; return (0, _timm.setIn)(state, [ key ], { ...action.payload }); } return state; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlJlcXVlc3RSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmNvbnN0IHtcbiAgSVgyX1BSRVZJRVdfUkVRVUVTVEVELFxuICBJWDJfUExBWUJBQ0tfUkVRVUVTVEVELFxuICBJWDJfU1RPUF9SRVFVRVNURUQsXG4gIElYMl9DTEVBUl9SRVFVRVNURUQsXG59ID0gSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5pbXBvcnQge3NldElufSBmcm9tICd0aW1tJztcbmltcG9ydCB7XG4gIHBsYXliYWNrUmVxdWVzdGVkUGF5bG9hZCxcbiAgcHJldmlld1JlcXVlc3RlZFBheWxvYWQsXG4gIHN0b3BSZXF1ZXN0ZWRQYXlsb2FkLFxufSBmcm9tICcuLi9hY3Rpb25zL0lYMkVuZ2luZUFjdGlvbnMnO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIHByZXZpZXc6IHt9IGFzIHByZXZpZXdSZXF1ZXN0ZWRQYXlsb2FkLFxuICBwbGF5YmFjazoge30gYXMgcGxheWJhY2tSZXF1ZXN0ZWRQYXlsb2FkLFxuICBzdG9wOiB7fSBhcyBzdG9wUmVxdWVzdGVkUGF5bG9hZCxcbiAgY2xlYXI6IHt9LFxufTtcblxuY29uc3Qgc3RhdGVLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7XG4gIFtJWDJfUFJFVklFV19SRVFVRVNURURdOiB7dmFsdWU6ICdwcmV2aWV3J30sXG4gIFtJWDJfUExBWUJBQ0tfUkVRVUVTVEVEXToge3ZhbHVlOiAncGxheWJhY2snfSxcbiAgW0lYMl9TVE9QX1JFUVVFU1RFRF06IHt2YWx1ZTogJ3N0b3AnfSxcbiAgW0lYMl9DTEVBUl9SRVFVRVNURURdOiB7dmFsdWU6ICdjbGVhcid9LFxufSk7XG5cbnR5cGUgaXhSZXF1ZXN0U3RhdGUgPSB7XG4gIHByZXZpZXc6IHByZXZpZXdSZXF1ZXN0ZWRQYXlsb2FkO1xuICBwbGF5YmFjazogcGxheWJhY2tSZXF1ZXN0ZWRQYXlsb2FkO1xuICBzdG9wOiBzdG9wUmVxdWVzdGVkUGF5bG9hZDtcbiAgY2xlYXI6IFJlY29yZDxuZXZlciwgbmV2ZXI+O1xufTtcblxudHlwZSBpeFJlcXVlc3RBY3Rpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfUFJFVklFV19SRVFVRVNURUQ7XG4gICAgICBwYXlsb2FkOiBwcmV2aWV3UmVxdWVzdGVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9QTEFZQkFDS19SRVFVRVNURUQ7XG4gICAgICBwYXlsb2FkOiBwbGF5YmFja1JlcXVlc3RlZFBheWxvYWQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfU1RPUF9SRVFVRVNURUQ7XG4gICAgICBwYXlsb2FkOiBzdG9wUmVxdWVzdGVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9DTEVBUl9SRVFVRVNURUQ7XG4gICAgICBwYXlsb2FkPzogbmV2ZXI7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGl4UmVxdWVzdCA9IChcbiAgc3RhdGU6IGl4UmVxdWVzdFN0YXRlID0gaW5pdGlhbFN0YXRlLFxuICBhY3Rpb246IGl4UmVxdWVzdEFjdGlvblxuKTogaXhSZXF1ZXN0U3RhdGUgPT4ge1xuICBpZiAoYWN0aW9uLnR5cGUgaW4gc3RhdGVLZXlzKSB7XG4gICAgY29uc3Qga2V5ID0gW3N0YXRlS2V5c1thY3Rpb24udHlwZV1dIGFzIGFueTtcbiAgICByZXR1cm4gc2V0SW4oc3RhdGUsIFtrZXldLCB7Li4uYWN0aW9uLnBheWxvYWR9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59O1xuIl0sIm5hbWVzIjpbIml4UmVxdWVzdCIsIklYMl9QUkVWSUVXX1JFUVVFU1RFRCIsIklYMl9QTEFZQkFDS19SRVFVRVNURUQiLCJJWDJfU1RPUF9SRVFVRVNURUQiLCJJWDJfQ0xFQVJfUkVRVUVTVEVEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJpbml0aWFsU3RhdGUiLCJwcmV2aWV3IiwicGxheWJhY2siLCJzdG9wIiwiY2xlYXIiLCJzdGF0ZUtleXMiLCJPYmplY3QiLCJjcmVhdGUiLCJ2YWx1ZSIsInN0YXRlIiwiYWN0aW9uIiwidHlwZSIsImtleSIsInNldEluIiwicGF5bG9hZCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFxRGFBOzs7ZUFBQUE7OztpQ0FyRHNCO3NCQU9mO0FBTnBCLE1BQU0sRUFDSkMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsRUFDdEJDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ3BCLEdBQUdDLHFDQUFvQjtBQVF4QixNQUFNQyxlQUFlO0lBQ25CQyxTQUFTLENBQUM7SUFDVkMsVUFBVSxDQUFDO0lBQ1hDLE1BQU0sQ0FBQztJQUNQQyxPQUFPLENBQUM7QUFDVjtBQUVBLE1BQU1DLFlBQVlDLE9BQU9DLE1BQU0sQ0FBQyxNQUFNO0lBQ3BDLENBQUNaLHNCQUFzQixFQUFFO1FBQUNhLE9BQU87SUFBUztJQUMxQyxDQUFDWix1QkFBdUIsRUFBRTtRQUFDWSxPQUFPO0lBQVU7SUFDNUMsQ0FBQ1gsbUJBQW1CLEVBQUU7UUFBQ1csT0FBTztJQUFNO0lBQ3BDLENBQUNWLG9CQUFvQixFQUFFO1FBQUNVLE9BQU87SUFBTztBQUN4QztBQTJCTyxNQUFNZCxZQUFZLENBQ3ZCZSxRQUF3QlQsWUFBWSxFQUNwQ1U7SUFFQSxJQUFJQSxPQUFPQyxJQUFJLElBQUlOLFdBQVc7UUFDNUIsTUFBTU8sTUFBTTtZQUFDUCxTQUFTLENBQUNLLE9BQU9DLElBQUksQ0FBQztTQUFDO1FBQ3BDLE9BQU9FLElBQUFBLFdBQUssRUFBQ0osT0FBTztZQUFDRztTQUFJLEVBQUU7WUFBQyxHQUFHRixPQUFPSSxPQUFPO1FBQUE7SUFDL0M7SUFDQSxPQUFPTDtBQUNUIn0= }), 5862: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixSession", ({ enumerable: true, get: function() { return ixSession; } })); const _sharedconstants = __webpack_require__(7087); const _timm = __webpack_require__(1185); const { IX2_SESSION_INITIALIZED, IX2_SESSION_STARTED, IX2_TEST_FRAME_RENDERED, IX2_SESSION_STOPPED, IX2_EVENT_LISTENER_ADDED, IX2_EVENT_STATE_CHANGED, IX2_ANIMATION_FRAME_CHANGED, IX2_ACTION_LIST_PLAYBACK_CHANGED, IX2_VIEWPORT_WIDTH_CHANGED, IX2_MEDIA_QUERIES_DEFINED } = _sharedconstants.IX2EngineActionTypes; const initialState = { active: false, tick: 0, eventListeners: [], eventState: {}, playbackState: {}, viewportWidth: 0, mediaQueryKey: null, hasBoundaryNodes: false, hasDefinedMediaQueries: false, reducedMotion: false }; const TEST_FRAME_STEPS_SIZE = 20; const ixSession = (state = initialState, action)=>{ switch(action.type){ case IX2_SESSION_INITIALIZED: { const { hasBoundaryNodes, reducedMotion } = action.payload; return (0, _timm.merge)(state, { hasBoundaryNodes, reducedMotion }); } case IX2_SESSION_STARTED: { return (0, _timm.set)(state, 'active', true); } case IX2_TEST_FRAME_RENDERED: { const { payload: { step = TEST_FRAME_STEPS_SIZE } } = action; return (0, _timm.set)(state, 'tick', state.tick + step); } case IX2_SESSION_STOPPED: { return initialState; } case IX2_ANIMATION_FRAME_CHANGED: { const { payload: { now } } = action; return (0, _timm.set)(state, 'tick', now); } case IX2_EVENT_LISTENER_ADDED: { const eventListeners = (0, _timm.addLast)(state.eventListeners, action.payload); return (0, _timm.set)(state, 'eventListeners', eventListeners); } case IX2_EVENT_STATE_CHANGED: { const { stateKey, newState } = action.payload; return (0, _timm.setIn)(state, [ 'eventState', stateKey ], newState); } case IX2_ACTION_LIST_PLAYBACK_CHANGED: { const { actionListId, isPlaying } = action.payload; return (0, _timm.setIn)(state, [ 'playbackState', actionListId ], isPlaying); } case IX2_VIEWPORT_WIDTH_CHANGED: { const { width, mediaQueries } = action.payload; const mediaQueryCount = mediaQueries.length; let mediaQueryKey = null; for(let i = 0; i < mediaQueryCount; i++){ const { key, min, max } = mediaQueries[i]; if (width >= min && width <= max) { mediaQueryKey = key; break; } } return (0, _timm.merge)(state, { viewportWidth: width, mediaQueryKey }); } case IX2_MEDIA_QUERIES_DEFINED: { return (0, _timm.set)(state, 'hasDefinedMediaQueries', true); } default: { return state; } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlNlc3Npb25SZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmNvbnN0IHtcbiAgSVgyX1NFU1NJT05fSU5JVElBTElaRUQsXG4gIElYMl9TRVNTSU9OX1NUQVJURUQsXG4gIElYMl9URVNUX0ZSQU1FX1JFTkRFUkVELFxuICBJWDJfU0VTU0lPTl9TVE9QUEVELFxuICBJWDJfRVZFTlRfTElTVEVORVJfQURERUQsXG4gIElYMl9FVkVOVF9TVEFURV9DSEFOR0VELFxuICBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQsXG4gIElYMl9BQ1RJT05fTElTVF9QTEFZQkFDS19DSEFOR0VELFxuICBJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCxcbiAgSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRCxcbn0gPSBJWDJFbmdpbmVBY3Rpb25UeXBlcztcbmltcG9ydCB7c2V0LCBzZXRJbiwgYWRkTGFzdCwgbWVyZ2V9IGZyb20gJ3RpbW0nO1xuaW1wb3J0IHtcbiAgYWN0aW9uTGlzdFBsYXliYWNrQ2hhbmdlZFBheWxvYWQsXG4gIGFuaW1hdGlvbkZyYW1lQ2hhbmdlZFBheWxvYWQsXG4gIGV2ZW50TGlzdGVuZXJBZGRlZFBheWxvYWQsXG4gIGV2ZW50U3RhdGVDaGFuZ2VkUGF5bG9hZCxcbiAgc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZCxcbiAgdGVzdEZyYW1lUmVuZGVyZWRQYXlsb2FkLFxuICB2aWV3cG9ydFdpZHRoQ2hhbmdlZFBheWxvYWQsXG59IGZyb20gJy4uL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgYWN0aXZlOiBmYWxzZSxcbiAgdGljazogMCxcbiAgZXZlbnRMaXN0ZW5lcnM6IFtdLFxuICBldmVudFN0YXRlOiB7fSxcbiAgcGxheWJhY2tTdGF0ZToge30sXG4gIHZpZXdwb3J0V2lkdGg6IDAsXG4gIG1lZGlhUXVlcnlLZXk6IG51bGwsXG4gIGhhc0JvdW5kYXJ5Tm9kZXM6IGZhbHNlLFxuICBoYXNEZWZpbmVkTWVkaWFRdWVyaWVzOiBmYWxzZSxcbiAgcmVkdWNlZE1vdGlvbjogZmFsc2UsXG59O1xuXG5jb25zdCBURVNUX0ZSQU1FX1NURVBTX1NJWkUgPSAyMDtcblxudHlwZSBpeFNlc3Npb25SZWR1Y2VyU3RhdGUgPSB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgdGljazogbnVtYmVyO1xuICBldmVudExpc3RlbmVyczogYW55W107XG4gIGV2ZW50U3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHBsYXliYWNrU3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHZpZXdwb3J0V2lkdGg6IG51bWJlcjtcbiAgbWVkaWFRdWVyeUtleTogbnVsbDtcbiAgaGFzQm91bmRhcnlOb2RlczogYm9vbGVhbjtcbiAgaGFzRGVmaW5lZE1lZGlhUXVlcmllczogYm9vbGVhbjtcbiAgcmVkdWNlZE1vdGlvbjogYm9vbGVhbjtcbn07XG5cbnR5cGUgaXhTZXNzaW9uUmVkdWNlckFjdGlvbiA9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9TRVNTSU9OX0lOSVRJQUxJWkVEO1xuICAgICAgcGF5bG9hZDogc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9TRVNTSU9OX1NUQVJURUQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRDtcbiAgICAgIHBheWxvYWQ6IHRlc3RGcmFtZVJlbmRlcmVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9TRVNTSU9OX1NUT1BQRUQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQ7XG4gICAgICBwYXlsb2FkOiBhbmltYXRpb25GcmFtZUNoYW5nZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVEO1xuICAgICAgcGF5bG9hZDogZXZlbnRMaXN0ZW5lckFkZGVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9FVkVOVF9TVEFURV9DSEFOR0VEO1xuICAgICAgcGF5bG9hZDogZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQ7XG4gICAgICBwYXlsb2FkOiBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VEO1xuICAgICAgcGF5bG9hZDogdmlld3BvcnRXaWR0aENoYW5nZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRDtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgaXhTZXNzaW9uID0gKFxuICBzdGF0ZTogaXhTZXNzaW9uUmVkdWNlclN0YXRlID0gaW5pdGlhbFN0YXRlLFxuICBhY3Rpb246IGl4U2Vzc2lvblJlZHVjZXJBY3Rpb25cbik6IGl4U2Vzc2lvblJlZHVjZXJTdGF0ZSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIElYMl9TRVNTSU9OX0lOSVRJQUxJWkVEOiB7XG4gICAgICBjb25zdCB7aGFzQm91bmRhcnlOb2RlcywgcmVkdWNlZE1vdGlvbn0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHJldHVybiBtZXJnZShzdGF0ZSwge1xuICAgICAgICBoYXNCb3VuZGFyeU5vZGVzLFxuICAgICAgICByZWR1Y2VkTW90aW9uLFxuICAgICAgfSkgYXMgaXhTZXNzaW9uUmVkdWNlclN0YXRlO1xuICAgIH1cbiAgICBjYXNlIElYMl9TRVNTSU9OX1NUQVJURUQ6IHtcbiAgICAgIHJldHVybiBzZXQoc3RhdGUsICdhY3RpdmUnLCB0cnVlKTtcbiAgICB9XG4gICAgY2FzZSBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRDoge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwYXlsb2FkOiB7c3RlcCA9IFRFU1RfRlJBTUVfU1RFUFNfU0laRX0sXG4gICAgICB9ID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIHNldChzdGF0ZSwgJ3RpY2snLCBzdGF0ZS50aWNrICsgc3RlcCk7XG4gICAgfVxuICAgIGNhc2UgSVgyX1NFU1NJT05fU1RPUFBFRDoge1xuICAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgICB9XG4gICAgY2FzZSBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQ6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGF5bG9hZDoge25vd30sXG4gICAgICB9ID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIHNldChzdGF0ZSwgJ3RpY2snLCBub3cpO1xuICAgIH1cbiAgICBjYXNlIElYMl9FVkVOVF9MSVNURU5FUl9BRERFRDoge1xuICAgICAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSBhZGRMYXN0KHN0YXRlLmV2ZW50TGlzdGVuZXJzLCBhY3Rpb24ucGF5bG9hZCk7XG4gICAgICByZXR1cm4gc2V0KHN0YXRlLCAnZXZlbnRMaXN0ZW5lcnMnLCBldmVudExpc3RlbmVycyk7XG4gICAgfVxuICAgIGNhc2UgSVgyX0VWRU5UX1NUQVRFX0NIQU5HRUQ6IHtcbiAgICAgIGNvbnN0IHtzdGF0ZUtleSwgbmV3U3RhdGV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gc2V0SW4oc3RhdGUsIFsnZXZlbnRTdGF0ZScsIHN0YXRlS2V5XSwgbmV3U3RhdGUpO1xuICAgIH1cbiAgICBjYXNlIElYMl9BQ1RJT05fTElTVF9QTEFZQkFDS19DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7YWN0aW9uTGlzdElkLCBpc1BsYXlpbmd9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gc2V0SW4oc3RhdGUsIFsncGxheWJhY2tTdGF0ZScsIGFjdGlvbkxpc3RJZF0sIGlzUGxheWluZyk7XG4gICAgfVxuICAgIGNhc2UgSVgyX1ZJRVdQT1JUX1dJRFRIX0NIQU5HRUQ6IHtcbiAgICAgIGNvbnN0IHt3aWR0aCwgbWVkaWFRdWVyaWVzfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgY29uc3QgbWVkaWFRdWVyeUNvdW50ID0gbWVkaWFRdWVyaWVzLmxlbmd0aDtcbiAgICAgIGxldCBtZWRpYVF1ZXJ5S2V5ID0gbnVsbDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVkaWFRdWVyeUNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qge2tleSwgbWluLCBtYXh9ID0gbWVkaWFRdWVyaWVzW2ldO1xuICAgICAgICBpZiAod2lkdGggPj0gbWluICYmIHdpZHRoIDw9IG1heCkge1xuICAgICAgICAgIG1lZGlhUXVlcnlLZXkgPSBrZXk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXJnZShzdGF0ZSwge1xuICAgICAgICB2aWV3cG9ydFdpZHRoOiB3aWR0aCxcbiAgICAgICAgbWVkaWFRdWVyeUtleSxcbiAgICAgIH0pIGFzIGl4U2Vzc2lvblJlZHVjZXJTdGF0ZTtcbiAgICB9XG4gICAgY2FzZSBJWDJfTUVESUFfUVVFUklFU19ERUZJTkVEOiB7XG4gICAgICByZXR1cm4gc2V0KHN0YXRlLCAnaGFzRGVmaW5lZE1lZGlhUXVlcmllcycsIHRydWUpO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG59O1xuIl0sIm5hbWVzIjpbIml4U2Vzc2lvbiIsIklYMl9TRVNTSU9OX0lOSVRJQUxJWkVEIiwiSVgyX1NFU1NJT05fU1RBUlRFRCIsIklYMl9URVNUX0ZSQU1FX1JFTkRFUkVEIiwiSVgyX1NFU1NJT05fU1RPUFBFRCIsIklYMl9FVkVOVF9MSVNURU5FUl9BRERFRCIsIklYMl9FVkVOVF9TVEFURV9DSEFOR0VEIiwiSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEIiwiSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQiLCJJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCIsIklYMl9NRURJQV9RVUVSSUVTX0RFRklORUQiLCJJWDJFbmdpbmVBY3Rpb25UeXBlcyIsImluaXRpYWxTdGF0ZSIsImFjdGl2ZSIsInRpY2siLCJldmVudExpc3RlbmVycyIsImV2ZW50U3RhdGUiLCJwbGF5YmFja1N0YXRlIiwidmlld3BvcnRXaWR0aCIsIm1lZGlhUXVlcnlLZXkiLCJoYXNCb3VuZGFyeU5vZGVzIiwiaGFzRGVmaW5lZE1lZGlhUXVlcmllcyIsInJlZHVjZWRNb3Rpb24iLCJURVNUX0ZSQU1FX1NURVBTX1NJWkUiLCJzdGF0ZSIsImFjdGlvbiIsInR5cGUiLCJwYXlsb2FkIiwibWVyZ2UiLCJzZXQiLCJzdGVwIiwibm93IiwiYWRkTGFzdCIsInN0YXRlS2V5IiwibmV3U3RhdGUiLCJzZXRJbiIsImFjdGlvbkxpc3RJZCIsImlzUGxheWluZyIsIndpZHRoIiwibWVkaWFRdWVyaWVzIiwibWVkaWFRdWVyeUNvdW50IiwibGVuZ3RoIiwiaSIsImtleSIsIm1pbiIsIm1heCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEyRmFBOzs7ZUFBQUE7OztpQ0EzRnNCO3NCQWFNO0FBWnpDLE1BQU0sRUFDSkMsdUJBQXVCLEVBQ3ZCQyxtQkFBbUIsRUFDbkJDLHVCQUF1QixFQUN2QkMsbUJBQW1CLEVBQ25CQyx3QkFBd0IsRUFDeEJDLHVCQUF1QixFQUN2QkMsMkJBQTJCLEVBQzNCQyxnQ0FBZ0MsRUFDaENDLDBCQUEwQixFQUMxQkMseUJBQXlCLEVBQzFCLEdBQUdDLHFDQUFvQjtBQVl4QixNQUFNQyxlQUFlO0lBQ25CQyxRQUFRO0lBQ1JDLE1BQU07SUFDTkMsZ0JBQWdCLEVBQUU7SUFDbEJDLFlBQVksQ0FBQztJQUNiQyxlQUFlLENBQUM7SUFDaEJDLGVBQWU7SUFDZkMsZUFBZTtJQUNmQyxrQkFBa0I7SUFDbEJDLHdCQUF3QjtJQUN4QkMsZUFBZTtBQUNqQjtBQUVBLE1BQU1DLHdCQUF3QjtBQXNEdkIsTUFBTXZCLFlBQVksQ0FDdkJ3QixRQUErQlosWUFBWSxFQUMzQ2E7SUFFQSxPQUFRQSxPQUFPQyxJQUFJO1FBQ2pCLEtBQUt6QjtZQUF5QjtnQkFDNUIsTUFBTSxFQUFDbUIsZ0JBQWdCLEVBQUVFLGFBQWEsRUFBQyxHQUFHRyxPQUFPRSxPQUFPO2dCQUN4RCxPQUFPQyxJQUFBQSxXQUFLLEVBQUNKLE9BQU87b0JBQ2xCSjtvQkFDQUU7Z0JBQ0Y7WUFDRjtRQUNBLEtBQUtwQjtZQUFxQjtnQkFDeEIsT0FBTzJCLElBQUFBLFNBQUcsRUFBQ0wsT0FBTyxVQUFVO1lBQzlCO1FBQ0EsS0FBS3JCO1lBQXlCO2dCQUM1QixNQUFNLEVBQ0p3QixTQUFTLEVBQUNHLE9BQU9QLHFCQUFxQixFQUFDLEVBQ3hDLEdBQUdFO2dCQUNKLE9BQU9JLElBQUFBLFNBQUcsRUFBQ0wsT0FBTyxRQUFRQSxNQUFNVixJQUFJLEdBQUdnQjtZQUN6QztRQUNBLEtBQUsxQjtZQUFxQjtnQkFDeEIsT0FBT1E7WUFDVDtRQUNBLEtBQUtMO1lBQTZCO2dCQUNoQyxNQUFNLEVBQ0pvQixTQUFTLEVBQUNJLEdBQUcsRUFBQyxFQUNmLEdBQUdOO2dCQUNKLE9BQU9JLElBQUFBLFNBQUcsRUFBQ0wsT0FBTyxRQUFRTztZQUM1QjtRQUNBLEtBQUsxQjtZQUEwQjtnQkFDN0IsTUFBTVUsaUJBQWlCaUIsSUFBQUEsYUFBTyxFQUFDUixNQUFNVCxjQUFjLEVBQUVVLE9BQU9FLE9BQU87Z0JBQ25FLE9BQU9FLElBQUFBLFNBQUcsRUFBQ0wsT0FBTyxrQkFBa0JUO1lBQ3RDO1FBQ0EsS0FBS1Q7WUFBeUI7Z0JBQzVCLE1BQU0sRUFBQzJCLFFBQVEsRUFBRUMsUUFBUSxFQUFDLEdBQUdULE9BQU9FLE9BQU87Z0JBQzNDLE9BQU9RLElBQUFBLFdBQUssRUFBQ1gsT0FBTztvQkFBQztvQkFBY1M7aUJBQVMsRUFBRUM7WUFDaEQ7UUFDQSxLQUFLMUI7WUFBa0M7Z0JBQ3JDLE1BQU0sRUFBQzRCLFlBQVksRUFBRUMsU0FBUyxFQUFDLEdBQUdaLE9BQU9FLE9BQU87Z0JBQ2hELE9BQU9RLElBQUFBLFdBQUssRUFBQ1gsT0FBTztvQkFBQztvQkFBaUJZO2lCQUFhLEVBQUVDO1lBQ3ZEO1FBQ0EsS0FBSzVCO1lBQTRCO2dCQUMvQixNQUFNLEVBQUM2QixLQUFLLEVBQUVDLFlBQVksRUFBQyxHQUFHZCxPQUFPRSxPQUFPO2dCQUM1QyxNQUFNYSxrQkFBa0JELGFBQWFFLE1BQU07Z0JBQzNDLElBQUl0QixnQkFBZ0I7Z0JBQ3BCLElBQUssSUFBSXVCLElBQUksR0FBR0EsSUFBSUYsaUJBQWlCRSxJQUFLO29CQUN4QyxNQUFNLEVBQUNDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUMsR0FBR04sWUFBWSxDQUFDRyxFQUFFO29CQUN2QyxJQUFJSixTQUFTTSxPQUFPTixTQUFTTyxLQUFLO3dCQUNoQzFCLGdCQUFnQndCO3dCQUNoQjtvQkFDRjtnQkFDRjtnQkFDQSxPQUFPZixJQUFBQSxXQUFLLEVBQUNKLE9BQU87b0JBQ2xCTixlQUFlb0I7b0JBQ2ZuQjtnQkFDRjtZQUNGO1FBQ0EsS0FBS1Q7WUFBMkI7Z0JBQzlCLE9BQU9tQixJQUFBQSxTQUFHLEVBQUNMLE9BQU8sMEJBQTBCO1lBQzlDO1FBQ0E7WUFBUztnQkFDUCxPQUFPQTtZQUNUO0lBQ0Y7QUFDRiJ9 }), 7377: (function (__unused_webpack_module, exports) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, renderPlugin: function() { return renderPlugin; } }); const getPluginConfig = (actionItemConfig)=>{ return actionItemConfig.value; }; const getPluginDuration = (element, actionItem)=>{ if (actionItem.config.duration !== 'auto') { return null; } const duration = parseFloat(element.getAttribute('data-duration')); if (duration > 0) { return duration * 1000; } return parseFloat(element.getAttribute('data-default-duration')) * 1000; }; const getPluginOrigin = (refState)=>{ return refState || { value: 0 }; }; const getPluginDestination = (actionItemConfig)=>{ return { value: actionItemConfig.value }; }; const createPluginInstance = (element)=>{ const lottie = window.Webflow.require('lottie'); if (!lottie) return null; const instance = lottie.createInstance(element); instance.stop(); instance.setSubframe(true); return instance; }; const renderPlugin = (pluginInstance, refState, actionItem)=>{ if (!pluginInstance) { return; } const percent = refState[actionItem.actionTypeId].value / 100; pluginInstance.goToFrame(pluginInstance.frames * percent); }; const clearPlugin = (element)=>{ const lottie = window.Webflow.require('lottie'); if (lottie) { lottie.createInstance(element).stop(); } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkxvdHRpZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkNvbmZpZyA9IChhY3Rpb25JdGVtQ29uZmlnKSA9PiB7XG4gIHJldHVybiBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkR1cmF0aW9uID0gKGVsZW1lbnQsIGFjdGlvbkl0ZW0pID0+IHtcbiAgaWYgKGFjdGlvbkl0ZW0uY29uZmlnLmR1cmF0aW9uICE9PSAnYXV0bycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VGbG9hdChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1kdXJhdGlvbicpKTtcblxuICBpZiAoZHVyYXRpb24gPiAwKSB7XG4gICAgcmV0dXJuIGR1cmF0aW9uICogMTAwMDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUZsb2F0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWRlZmF1bHQtZHVyYXRpb24nKSkgKiAxMDAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk9yaWdpbiA9IChyZWZTdGF0ZSkgPT4ge1xuICByZXR1cm4gcmVmU3RhdGUgfHwge3ZhbHVlOiAwfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EZXN0aW5hdGlvbiA9IChhY3Rpb25JdGVtQ29uZmlnKSA9PiB7XG4gIHJldHVybiB7dmFsdWU6IGFjdGlvbkl0ZW1Db25maWcudmFsdWV9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsdWdpbkluc3RhbmNlID0gKGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbG90dGllID0gd2luZG93LldlYmZsb3cucmVxdWlyZSgnbG90dGllJyk7XG4gIGlmICghbG90dGllKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaW5zdGFuY2UgPSBsb3R0aWUuY3JlYXRlSW5zdGFuY2UoZWxlbWVudCk7XG4gIGluc3RhbmNlLnN0b3AoKTtcbiAgaW5zdGFuY2Uuc2V0U3ViZnJhbWUodHJ1ZSk7XG4gIHJldHVybiBpbnN0YW5jZTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJQbHVnaW4gPSAocGx1Z2luSW5zdGFuY2UsIHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIGlmICghcGx1Z2luSW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGVyY2VudCA9IHJlZlN0YXRlW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXS52YWx1ZSAvIDEwMDtcbiAgcGx1Z2luSW5zdGFuY2UuZ29Ub0ZyYW1lKHBsdWdpbkluc3RhbmNlLmZyYW1lcyAqIHBlcmNlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gKGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbG90dGllID0gd2luZG93LldlYmZsb3cucmVxdWlyZSgnbG90dGllJyk7XG4gIGlmIChsb3R0aWUpIHtcbiAgICBsb3R0aWUuY3JlYXRlSW5zdGFuY2UoZWxlbWVudCkuc3RvcCgpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbImNsZWFyUGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2UiLCJnZXRQbHVnaW5Db25maWciLCJnZXRQbHVnaW5EZXN0aW5hdGlvbiIsImdldFBsdWdpbkR1cmF0aW9uIiwiZ2V0UGx1Z2luT3JpZ2luIiwicmVuZGVyUGx1Z2luIiwiYWN0aW9uSXRlbUNvbmZpZyIsInZhbHVlIiwiZWxlbWVudCIsImFjdGlvbkl0ZW0iLCJjb25maWciLCJkdXJhdGlvbiIsInBhcnNlRmxvYXQiLCJnZXRBdHRyaWJ1dGUiLCJyZWZTdGF0ZSIsImxvdHRpZSIsIndpbmRvdyIsIldlYmZsb3ciLCJyZXF1aXJlIiwiaW5zdGFuY2UiLCJjcmVhdGVJbnN0YW5jZSIsInN0b3AiLCJzZXRTdWJmcmFtZSIsInBsdWdpbkluc3RhbmNlIiwicGVyY2VudCIsImFjdGlvblR5cGVJZCIsImdvVG9GcmFtZSIsImZyYW1lcyJdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCOzs7Ozs7Ozs7OztJQTZDVEEsV0FBVztlQUFYQTs7SUFqQkFDLG9CQUFvQjtlQUFwQkE7O0lBMUJBQyxlQUFlO2VBQWZBOztJQXNCQUMsb0JBQW9CO2VBQXBCQTs7SUFsQkFDLGlCQUFpQjtlQUFqQkE7O0lBY0FDLGVBQWU7ZUFBZkE7O0lBaUJBQyxZQUFZO2VBQVpBOzs7QUFuQ04sTUFBTUosa0JBQWtCLENBQUNLO0lBQzlCLE9BQU9BLGlCQUFpQkMsS0FBSztBQUMvQjtBQUVPLE1BQU1KLG9CQUFvQixDQUFDSyxTQUFTQztJQUN6QyxJQUFJQSxXQUFXQyxNQUFNLENBQUNDLFFBQVEsS0FBSyxRQUFRO1FBQ3pDLE9BQU87SUFDVDtJQUVBLE1BQU1BLFdBQVdDLFdBQVdKLFFBQVFLLFlBQVksQ0FBQztJQUVqRCxJQUFJRixXQUFXLEdBQUc7UUFDaEIsT0FBT0EsV0FBVztJQUNwQjtJQUVBLE9BQU9DLFdBQVdKLFFBQVFLLFlBQVksQ0FBQyw0QkFBNEI7QUFDckU7QUFFTyxNQUFNVCxrQkFBa0IsQ0FBQ1U7SUFDOUIsT0FBT0EsWUFBWTtRQUFDUCxPQUFPO0lBQUM7QUFDOUI7QUFFTyxNQUFNTCx1QkFBdUIsQ0FBQ0k7SUFDbkMsT0FBTztRQUFDQyxPQUFPRCxpQkFBaUJDLEtBQUs7SUFBQTtBQUN2QztBQUVPLE1BQU1QLHVCQUF1QixDQUFDUTtJQUNuQyxNQUFNTyxTQUFTQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztJQUN0QyxJQUFJLENBQUNILFFBQVEsT0FBTztJQUNwQixNQUFNSSxXQUFXSixPQUFPSyxjQUFjLENBQUNaO0lBQ3ZDVyxTQUFTRSxJQUFJO0lBQ2JGLFNBQVNHLFdBQVcsQ0FBQztJQUNyQixPQUFPSDtBQUNUO0FBRU8sTUFBTWQsZUFBZSxDQUFDa0IsZ0JBQWdCVCxVQUFVTDtJQUNyRCxJQUFJLENBQUNjLGdCQUFnQjtRQUNuQjtJQUNGO0lBQ0EsTUFBTUMsVUFBVVYsUUFBUSxDQUFDTCxXQUFXZ0IsWUFBWSxDQUFDLENBQUNsQixLQUFLLEdBQUc7SUFDMURnQixlQUFlRyxTQUFTLENBQUNILGVBQWVJLE1BQU0sR0FBR0g7QUFDbkQ7QUFFTyxNQUFNekIsY0FBYyxDQUFDUztJQUMxQixNQUFNTyxTQUFTQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztJQUN0QyxJQUFJSCxRQUFRO1FBQ1ZBLE9BQU9LLGNBQWMsQ0FBQ1osU0FBU2EsSUFBSTtJQUNyQztBQUNGIn0= }), 2570: (function (__unused_webpack_module, exports) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, renderPlugin: function() { return renderPlugin; } }); const FIT_KEY = '--wf-rive-fit'; const ALIGNMENT_KEY = '--wf-rive-alignment'; const queryContainerElement = (elementId)=>document.querySelector(`[data-w-id="${elementId}"]`); const getFrontendModule = ()=>window.Webflow.require('rive'); const getPluginConfig = (actionItemConfig, key)=>actionItemConfig.value.inputs[key]; const getPluginDuration = ()=>null; // Not used by this plugin const getPluginOrigin = (refState, actionItem)=>{ if (refState) return refState; const result = {}; const { inputs = {} } = actionItem.config.value; for(const input in inputs)if (inputs[input] == null) result[input] = 0; return result; }; const getPluginDestination = (actionItemConfig)=>actionItemConfig.value.inputs ?? {}; const createPluginInstance = (element, actionItem)=>{ const selectorGuids = actionItem.config?.target?.selectorGuids || []; if (selectorGuids.length > 0) return element; // In this case, we define pluginInstance as a reference to the container element const pluginElementId = actionItem?.config?.target?.pluginElement; return pluginElementId ? queryContainerElement(pluginElementId) : null; }; const renderPlugin = (containerElement, { PLUGIN_RIVE: props }, actionItem)=>{ const frontendModule = getFrontendModule(); if (!frontendModule) return; const instance = frontendModule.getInstance(containerElement); const StateMachineInputType = frontendModule.rive.StateMachineInputType; const { name, inputs = {} } = actionItem.config.value || {}; function renderRive(riveInstance) { if (riveInstance.loaded) { render(); } else { // Render instance immediately on load and then clean up handler const onLoad = ()=>{ render(); riveInstance?.off('load', onLoad); }; riveInstance?.on('load', onLoad); } function render() { const stateMachineInputs = riveInstance.stateMachineInputs(name); if (stateMachineInputs == null) return; // exit early since no inputs found if (!riveInstance.isPlaying) riveInstance.play(name, false); // set autoplay: false because IX engine is controlling playback. if (FIT_KEY in inputs || ALIGNMENT_KEY in inputs) { const currentLayout = riveInstance.layout; const nextFit = inputs[FIT_KEY] ?? currentLayout.fit; const nextAlignment = inputs[ALIGNMENT_KEY] ?? currentLayout.alignment; if (nextFit !== currentLayout.fit || nextAlignment !== currentLayout.alignment) { riveInstance.layout = currentLayout.copyWith({ fit: nextFit, alignment: nextAlignment }); } } for(const inputName in inputs){ if (inputName === FIT_KEY || inputName === ALIGNMENT_KEY) continue; const machineInput = stateMachineInputs.find((m)=>m.name === inputName); if (machineInput == null) continue; switch(machineInput.type){ case StateMachineInputType.Boolean: { if (inputs[inputName] != null) { const booleanValue = Boolean(inputs[inputName]); machineInput.value = booleanValue; } break; } case StateMachineInputType.Number: { const numberValue = props[inputName]; if (numberValue != null) machineInput.value = numberValue; break; } case StateMachineInputType.Trigger: { if (inputs[inputName]) machineInput.fire(); break; } } } } } // Render rive if the instance is available if (instance?.rive) renderRive(instance.rive); else frontendModule.setLoadHandler(containerElement, renderRive); }; const clearPlugin = (_containerElement, _actionItem)=>null; // Not used by this plugin //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlJpdmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbmNvbnN0IEZJVF9LRVkgPSAnLS13Zi1yaXZlLWZpdCc7XG5jb25zdCBBTElHTk1FTlRfS0VZID0gJy0td2Ytcml2ZS1hbGlnbm1lbnQnO1xuXG5jb25zdCBxdWVyeUNvbnRhaW5lckVsZW1lbnQgPSAoZWxlbWVudElkKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS13LWlkPVwiJHtlbGVtZW50SWR9XCJdYCk7XG5cbmNvbnN0IGdldEZyb250ZW5kTW9kdWxlID0gKCkgPT4gd2luZG93LldlYmZsb3cucmVxdWlyZSgncml2ZScpO1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luQ29uZmlnID0gKGFjdGlvbkl0ZW1Db25maWcsIGtleSkgPT5cbiAgYWN0aW9uSXRlbUNvbmZpZy52YWx1ZS5pbnB1dHNba2V5XTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkR1cmF0aW9uID0gKCkgPT4gbnVsbDsgLy8gTm90IHVzZWQgYnkgdGhpcyBwbHVnaW5cblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk9yaWdpbiA9IChyZWZTdGF0ZSwgYWN0aW9uSXRlbSkgPT4ge1xuICBpZiAocmVmU3RhdGUpIHJldHVybiByZWZTdGF0ZTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IHtpbnB1dHMgPSB7fX0gPSBhY3Rpb25JdGVtLmNvbmZpZy52YWx1ZTtcbiAgZm9yIChjb25zdCBpbnB1dCBpbiBpbnB1dHMpIGlmIChpbnB1dHNbaW5wdXRdID09IG51bGwpIHJlc3VsdFtpbnB1dF0gPSAwO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkRlc3RpbmF0aW9uID0gKGFjdGlvbkl0ZW1Db25maWcpID0+XG4gIGFjdGlvbkl0ZW1Db25maWcudmFsdWUuaW5wdXRzID8/IHt9O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGx1Z2luSW5zdGFuY2UgPSAoZWxlbWVudCwgYWN0aW9uSXRlbSkgPT4ge1xuICBjb25zdCBzZWxlY3Rvckd1aWRzID0gYWN0aW9uSXRlbS5jb25maWc/LnRhcmdldD8uc2VsZWN0b3JHdWlkcyB8fCBbXTtcbiAgaWYgKHNlbGVjdG9yR3VpZHMubGVuZ3RoID4gMCkgcmV0dXJuIGVsZW1lbnQ7XG5cbiAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBkZWZpbmUgcGx1Z2luSW5zdGFuY2UgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRhaW5lciBlbGVtZW50XG4gIGNvbnN0IHBsdWdpbkVsZW1lbnRJZCA9IGFjdGlvbkl0ZW0/LmNvbmZpZz8udGFyZ2V0Py5wbHVnaW5FbGVtZW50O1xuICByZXR1cm4gcGx1Z2luRWxlbWVudElkID8gcXVlcnlDb250YWluZXJFbGVtZW50KHBsdWdpbkVsZW1lbnRJZCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclBsdWdpbiA9IChcbiAgY29udGFpbmVyRWxlbWVudCxcbiAge1BMVUdJTl9SSVZFOiBwcm9wc30sXG4gIGFjdGlvbkl0ZW1cbikgPT4ge1xuICBjb25zdCBmcm9udGVuZE1vZHVsZSA9IGdldEZyb250ZW5kTW9kdWxlKCk7XG4gIGlmICghZnJvbnRlbmRNb2R1bGUpIHJldHVybjtcbiAgY29uc3QgaW5zdGFuY2UgPSBmcm9udGVuZE1vZHVsZS5nZXRJbnN0YW5jZShjb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgU3RhdGVNYWNoaW5lSW5wdXRUeXBlID0gZnJvbnRlbmRNb2R1bGUucml2ZS5TdGF0ZU1hY2hpbmVJbnB1dFR5cGU7XG4gIGNvbnN0IHtuYW1lLCBpbnB1dHMgPSB7fX0gPSBhY3Rpb25JdGVtLmNvbmZpZy52YWx1ZSB8fCB7fTtcblxuICBmdW5jdGlvbiByZW5kZXJSaXZlKHJpdmVJbnN0YW5jZSkge1xuICAgIGlmIChyaXZlSW5zdGFuY2UubG9hZGVkKSB7XG4gICAgICByZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVuZGVyIGluc3RhbmNlIGltbWVkaWF0ZWx5IG9uIGxvYWQgYW5kIHRoZW4gY2xlYW4gdXAgaGFuZGxlclxuICAgICAgY29uc3Qgb25Mb2FkID0gKCkgPT4ge1xuICAgICAgICByZW5kZXIoKTtcbiAgICAgICAgcml2ZUluc3RhbmNlPy5vZmYoJ2xvYWQnLCBvbkxvYWQpO1xuICAgICAgfTtcblxuICAgICAgcml2ZUluc3RhbmNlPy5vbignbG9hZCcsIG9uTG9hZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lSW5wdXRzID0gcml2ZUluc3RhbmNlLnN0YXRlTWFjaGluZUlucHV0cyhuYW1lKTtcbiAgICAgIGlmIChzdGF0ZU1hY2hpbmVJbnB1dHMgPT0gbnVsbCkgcmV0dXJuOyAvLyBleGl0IGVhcmx5IHNpbmNlIG5vIGlucHV0cyBmb3VuZFxuXG4gICAgICBpZiAoIXJpdmVJbnN0YW5jZS5pc1BsYXlpbmcpIHJpdmVJbnN0YW5jZS5wbGF5KG5hbWUsIGZhbHNlKTsgLy8gc2V0IGF1dG9wbGF5OiBmYWxzZSBiZWNhdXNlIElYIGVuZ2luZSBpcyBjb250cm9sbGluZyBwbGF5YmFjay5cblxuICAgICAgaWYgKEZJVF9LRVkgaW4gaW5wdXRzIHx8IEFMSUdOTUVOVF9LRVkgaW4gaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXlvdXQgPSByaXZlSW5zdGFuY2UubGF5b3V0O1xuICAgICAgICBjb25zdCBuZXh0Rml0ID0gaW5wdXRzW0ZJVF9LRVldID8/IGN1cnJlbnRMYXlvdXQuZml0O1xuICAgICAgICBjb25zdCBuZXh0QWxpZ25tZW50ID0gaW5wdXRzW0FMSUdOTUVOVF9LRVldID8/IGN1cnJlbnRMYXlvdXQuYWxpZ25tZW50O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXh0Rml0ICE9PSBjdXJyZW50TGF5b3V0LmZpdCB8fFxuICAgICAgICAgIG5leHRBbGlnbm1lbnQgIT09IGN1cnJlbnRMYXlvdXQuYWxpZ25tZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHJpdmVJbnN0YW5jZS5sYXlvdXQgPSBjdXJyZW50TGF5b3V0LmNvcHlXaXRoKHtcbiAgICAgICAgICAgIGZpdDogbmV4dEZpdCxcbiAgICAgICAgICAgIGFsaWdubWVudDogbmV4dEFsaWdubWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGlucHV0TmFtZSBpbiBpbnB1dHMpIHtcbiAgICAgICAgaWYgKGlucHV0TmFtZSA9PT0gRklUX0tFWSB8fCBpbnB1dE5hbWUgPT09IEFMSUdOTUVOVF9LRVkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IG1hY2hpbmVJbnB1dCA9IHN0YXRlTWFjaGluZUlucHV0cy5maW5kKFxuICAgICAgICAgIChtKSA9PiBtLm5hbWUgPT09IGlucHV0TmFtZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtYWNoaW5lSW5wdXQgPT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgc3dpdGNoIChtYWNoaW5lSW5wdXQudHlwZSkge1xuICAgICAgICAgIGNhc2UgU3RhdGVNYWNoaW5lSW5wdXRUeXBlLkJvb2xlYW46IHtcbiAgICAgICAgICAgIGlmIChpbnB1dHNbaW5wdXROYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvb2xlYW5WYWx1ZSA9IEJvb2xlYW4oaW5wdXRzW2lucHV0TmFtZV0pO1xuICAgICAgICAgICAgICBtYWNoaW5lSW5wdXQudmFsdWUgPSBib29sZWFuVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIFN0YXRlTWFjaGluZUlucHV0VHlwZS5OdW1iZXI6IHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlclZhbHVlID0gcHJvcHNbaW5wdXROYW1lXTtcbiAgICAgICAgICAgIGlmIChudW1iZXJWYWx1ZSAhPSBudWxsKSBtYWNoaW5lSW5wdXQudmFsdWUgPSBudW1iZXJWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgU3RhdGVNYWNoaW5lSW5wdXRUeXBlLlRyaWdnZXI6IHtcbiAgICAgICAgICAgIGlmIChpbnB1dHNbaW5wdXROYW1lXSkgbWFjaGluZUlucHV0LmZpcmUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbmRlciByaXZlIGlmIHRoZSBpbnN0YW5jZSBpcyBhdmFpbGFibGVcbiAgaWYgKGluc3RhbmNlPy5yaXZlKSByZW5kZXJSaXZlKGluc3RhbmNlLnJpdmUpO1xuICAvLyBPdGhlcndpc2UsIHN0b3JlIGxhdGVzdCByZW5kZXIgYXMgYSBjYWxsYmFjayB0byBmaXJlIHdoZW4gbG9hZGVkXG4gIGVsc2UgZnJvbnRlbmRNb2R1bGUuc2V0TG9hZEhhbmRsZXIoY29udGFpbmVyRWxlbWVudCwgcmVuZGVyUml2ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJQbHVnaW4gPSAoX2NvbnRhaW5lckVsZW1lbnQsIF9hY3Rpb25JdGVtKSA9PiBudWxsOyAvLyBOb3QgdXNlZCBieSB0aGlzIHBsdWdpblxuIl0sIm5hbWVzIjpbImNsZWFyUGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2UiLCJnZXRQbHVnaW5Db25maWciLCJnZXRQbHVnaW5EZXN0aW5hdGlvbiIsImdldFBsdWdpbkR1cmF0aW9uIiwiZ2V0UGx1Z2luT3JpZ2luIiwicmVuZGVyUGx1Z2luIiwiRklUX0tFWSIsIkFMSUdOTUVOVF9LRVkiLCJxdWVyeUNvbnRhaW5lckVsZW1lbnQiLCJlbGVtZW50SWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRGcm9udGVuZE1vZHVsZSIsIndpbmRvdyIsIldlYmZsb3ciLCJyZXF1aXJlIiwiYWN0aW9uSXRlbUNvbmZpZyIsImtleSIsInZhbHVlIiwiaW5wdXRzIiwicmVmU3RhdGUiLCJhY3Rpb25JdGVtIiwicmVzdWx0IiwiY29uZmlnIiwiaW5wdXQiLCJlbGVtZW50Iiwic2VsZWN0b3JHdWlkcyIsInRhcmdldCIsImxlbmd0aCIsInBsdWdpbkVsZW1lbnRJZCIsInBsdWdpbkVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwiUExVR0lOX1JJVkUiLCJwcm9wcyIsImZyb250ZW5kTW9kdWxlIiwiaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsIlN0YXRlTWFjaGluZUlucHV0VHlwZSIsInJpdmUiLCJuYW1lIiwicmVuZGVyUml2ZSIsInJpdmVJbnN0YW5jZSIsImxvYWRlZCIsInJlbmRlciIsIm9uTG9hZCIsIm9mZiIsIm9uIiwic3RhdGVNYWNoaW5lSW5wdXRzIiwiaXNQbGF5aW5nIiwicGxheSIsImN1cnJlbnRMYXlvdXQiLCJsYXlvdXQiLCJuZXh0Rml0IiwiZml0IiwibmV4dEFsaWdubWVudCIsImFsaWdubWVudCIsImNvcHlXaXRoIiwiaW5wdXROYW1lIiwibWFjaGluZUlucHV0IiwiZmluZCIsIm0iLCJ0eXBlIiwiQm9vbGVhbiIsImJvb2xlYW5WYWx1ZSIsIk51bWJlciIsIm51bWJlclZhbHVlIiwiVHJpZ2dlciIsImZpcmUiLCJzZXRMb2FkSGFuZGxlciIsIl9jb250YWluZXJFbGVtZW50IiwiX2FjdGlvbkl0ZW0iXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUF3SFRBLFdBQVc7ZUFBWEE7O0lBOUZBQyxvQkFBb0I7ZUFBcEJBOztJQWhCQUMsZUFBZTtlQUFmQTs7SUFhQUMsb0JBQW9CO2VBQXBCQTs7SUFWQUMsaUJBQWlCO2VBQWpCQTs7SUFFQUMsZUFBZTtlQUFmQTs7SUFvQkFDLFlBQVk7ZUFBWkE7OztBQWpDYixNQUFNQyxVQUFVO0FBQ2hCLE1BQU1DLGdCQUFnQjtBQUV0QixNQUFNQyx3QkFBd0IsQ0FBQ0MsWUFDN0JDLFNBQVNDLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRUYsVUFBVSxFQUFFLENBQUM7QUFFckQsTUFBTUcsb0JBQW9C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 }), 2866: (function (__unused_webpack_module, exports) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, renderPlugin: function() { return renderPlugin; } }); const queryContainerElement = (elementId)=>document.querySelector(`[data-w-id="${elementId}"]`); const getFrontendModule = ()=>window.Webflow.require('spline'); const difference = (arr1, arr2)=>arr1.filter((x)=>!arr2.includes(x)); const getPluginConfig = (actionItemConfig, key)=>{ return actionItemConfig.value[key]; }; const getPluginDuration = ()=>{ // Not used by this plugin return null; }; const DEFAULT_VALUES = Object.freeze({ positionX: 0, positionY: 0, positionZ: 0, rotationX: 0, rotationY: 0, rotationZ: 0, scaleX: 1, scaleY: 1, scaleZ: 1 }); const getPluginOrigin = (refState, actionItem)=>{ // Determine which props we care about in the destination const destination = actionItem.config.value; const destinationKeys = Object.keys(destination); // Check the current state for any missing origin props if (refState) { const stateKeys = Object.keys(refState); const diffKeys = difference(destinationKeys, stateKeys); // If new props are needed, merge new origin values with current state if (diffKeys.length) { const origin = diffKeys.reduce((result, key)=>{ result[key] = DEFAULT_VALUES[key]; return result; }, refState); return origin; } // No difference, return current state return refState; } // State doesn't exist so define new origin based on destination const origin = destinationKeys.reduce((result, key)=>{ result[key] = DEFAULT_VALUES[key]; return result; }, {}); return origin; }; const getPluginDestination = (actionItemConfig)=>{ return actionItemConfig.value; }; const createPluginInstance = (element, actionItem)=>{ // In this case, we define pluginInstance as a reference to the container element const pluginElementId = actionItem?.config?.target?.pluginElement; return pluginElementId ? queryContainerElement(pluginElementId) : null; }; const renderPlugin = (containerElement, refState, actionItem)=>{ const frontendModule = getFrontendModule(); if (!frontendModule) return; const instance = frontendModule.getInstance(containerElement); const objectId = actionItem.config.target.objectId; const renderSpline = (spline)=>{ if (!spline) { throw new Error('Invalid spline app passed to renderSpline'); } const obj = objectId && spline.findObjectById(objectId); if (!obj) { return; } const { PLUGIN_SPLINE: props } = refState; if (props.positionX != null) { obj.position.x = props.positionX; } if (props.positionY != null) { obj.position.y = props.positionY; } if (props.positionZ != null) { obj.position.z = props.positionZ; } if (props.rotationX != null) { obj.rotation.x = props.rotationX; } if (props.rotationY != null) { obj.rotation.y = props.rotationY; } if (props.rotationZ != null) { obj.rotation.z = props.rotationZ; } if (props.scaleX != null) { obj.scale.x = props.scaleX; } if (props.scaleY != null) { obj.scale.y = props.scaleY; } if (props.scaleZ != null) { obj.scale.z = props.scaleZ; } }; if (instance) { // Render spline if the app instance is already loaded renderSpline(instance.spline); } else { // Otherwise, store latest render as a callback to fire when loaded frontendModule.setLoadHandler(containerElement, renderSpline); } }; const clearPlugin = ()=>{ // Not used by this plugin return null; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlNwbGluZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuY29uc3QgcXVlcnlDb250YWluZXJFbGVtZW50ID0gKGVsZW1lbnRJZCkgPT5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtdy1pZD1cIiR7ZWxlbWVudElkfVwiXWApO1xuXG5jb25zdCBnZXRGcm9udGVuZE1vZHVsZSA9ICgpID0+IHdpbmRvdy5XZWJmbG93LnJlcXVpcmUoJ3NwbGluZScpO1xuXG5jb25zdCBkaWZmZXJlbmNlID0gKGFycjEsIGFycjIpID0+IGFycjEuZmlsdGVyKCh4KSA9PiAhYXJyMi5pbmNsdWRlcyh4KSk7XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5Db25maWcgPSAoYWN0aW9uSXRlbUNvbmZpZywga2V5KSA9PiB7XG4gIHJldHVybiBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlW2tleV07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luRHVyYXRpb24gPSAoKSA9PiB7XG4gIC8vIE5vdCB1c2VkIGJ5IHRoaXMgcGx1Z2luXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgREVGQVVMVF9WQUxVRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgcG9zaXRpb25YOiAwLFxuICBwb3NpdGlvblk6IDAsXG4gIHBvc2l0aW9uWjogMCxcbiAgcm90YXRpb25YOiAwLFxuICByb3RhdGlvblk6IDAsXG4gIHJvdGF0aW9uWjogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDEsXG4gIHNjYWxlWjogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luT3JpZ2luID0gKHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB3ZSBjYXJlIGFib3V0IGluIHRoZSBkZXN0aW5hdGlvblxuICBjb25zdCBkZXN0aW5hdGlvbiA9IGFjdGlvbkl0ZW0uY29uZmlnLnZhbHVlO1xuICBjb25zdCBkZXN0aW5hdGlvbktleXMgPSBPYmplY3Qua2V5cyhkZXN0aW5hdGlvbik7XG4gIC8vIENoZWNrIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnkgbWlzc2luZyBvcmlnaW4gcHJvcHNcbiAgaWYgKHJlZlN0YXRlKSB7XG4gICAgY29uc3Qgc3RhdGVLZXlzID0gT2JqZWN0LmtleXMocmVmU3RhdGUpO1xuICAgIGNvbnN0IGRpZmZLZXlzID0gZGlmZmVyZW5jZShkZXN0aW5hdGlvbktleXMsIHN0YXRlS2V5cyk7XG4gICAgLy8gSWYgbmV3IHByb3BzIGFyZSBuZWVkZWQsIG1lcmdlIG5ldyBvcmlnaW4gdmFsdWVzIHdpdGggY3VycmVudCBzdGF0ZVxuICAgIGlmIChkaWZmS2V5cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IGRpZmZLZXlzLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBERUZBVUxUX1ZBTFVFU1trZXldO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwgcmVmU3RhdGUpO1xuICAgICAgcmV0dXJuIG9yaWdpbjtcbiAgICB9XG4gICAgLy8gTm8gZGlmZmVyZW5jZSwgcmV0dXJuIGN1cnJlbnQgc3RhdGVcbiAgICByZXR1cm4gcmVmU3RhdGU7XG4gIH1cbiAgLy8gU3RhdGUgZG9lc24ndCBleGlzdCBzbyBkZWZpbmUgbmV3IG9yaWdpbiBiYXNlZCBvbiBkZXN0aW5hdGlvblxuICBjb25zdCBvcmlnaW4gPSBkZXN0aW5hdGlvbktleXMucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIHJlc3VsdFtrZXldID0gREVGQVVMVF9WQUxVRVNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luRGVzdGluYXRpb24gPSAoYWN0aW9uSXRlbUNvbmZpZykgPT4ge1xuICByZXR1cm4gYWN0aW9uSXRlbUNvbmZpZy52YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQbHVnaW5JbnN0YW5jZSA9IChlbGVtZW50LCBhY3Rpb25JdGVtKSA9PiB7XG4gIC8vIEluIHRoaXMgY2FzZSwgd2UgZGVmaW5lIHBsdWdpbkluc3RhbmNlIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250YWluZXIgZWxlbWVudFxuICBjb25zdCBwbHVnaW5FbGVtZW50SWQgPSBhY3Rpb25JdGVtPy5jb25maWc/LnRhcmdldD8ucGx1Z2luRWxlbWVudDtcbiAgcmV0dXJuIHBsdWdpbkVsZW1lbnRJZCA/IHF1ZXJ5Q29udGFpbmVyRWxlbWVudChwbHVnaW5FbGVtZW50SWQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJQbHVnaW4gPSAoY29udGFpbmVyRWxlbWVudCwgcmVmU3RhdGUsIGFjdGlvbkl0ZW0pID0+IHtcbiAgY29uc3QgZnJvbnRlbmRNb2R1bGUgPSBnZXRGcm9udGVuZE1vZHVsZSgpO1xuICBpZiAoIWZyb250ZW5kTW9kdWxlKSByZXR1cm47XG4gIGNvbnN0IGluc3RhbmNlID0gZnJvbnRlbmRNb2R1bGUuZ2V0SW5zdGFuY2UoY29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IG9iamVjdElkID0gYWN0aW9uSXRlbS5jb25maWcudGFyZ2V0Lm9iamVjdElkO1xuXG4gIGNvbnN0IHJlbmRlclNwbGluZSA9IChzcGxpbmUpID0+IHtcbiAgICBpZiAoIXNwbGluZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNwbGluZSBhcHAgcGFzc2VkIHRvIHJlbmRlclNwbGluZScpO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSBvYmplY3RJZCAmJiBzcGxpbmUuZmluZE9iamVjdEJ5SWQob2JqZWN0SWQpO1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtQTFVHSU5fU1BMSU5FOiBwcm9wc30gPSByZWZTdGF0ZTtcbiAgICBpZiAocHJvcHMucG9zaXRpb25YICE9IG51bGwpIHtcbiAgICAgIG9iai5wb3NpdGlvbi54ID0gcHJvcHMucG9zaXRpb25YO1xuICAgIH1cbiAgICBpZiAocHJvcHMucG9zaXRpb25ZICE9IG51bGwpIHtcbiAgICAgIG9iai5wb3NpdGlvbi55ID0gcHJvcHMucG9zaXRpb25ZO1xuICAgIH1cbiAgICBpZiAocHJvcHMucG9zaXRpb25aICE9IG51bGwpIHtcbiAgICAgIG9iai5wb3NpdGlvbi56ID0gcHJvcHMucG9zaXRpb25aO1xuICAgIH1cbiAgICBpZiAocHJvcHMucm90YXRpb25YICE9IG51bGwpIHtcbiAgICAgIG9iai5yb3RhdGlvbi54ID0gcHJvcHMucm90YXRpb25YO1xuICAgIH1cbiAgICBpZiAocHJvcHMucm90YXRpb25ZICE9IG51bGwpIHtcbiAgICAgIG9iai5yb3RhdGlvbi55ID0gcHJvcHMucm90YXRpb25ZO1xuICAgIH1cbiAgICBpZiAocHJvcHMucm90YXRpb25aICE9IG51bGwpIHtcbiAgICAgIG9iai5yb3RhdGlvbi56ID0gcHJvcHMucm90YXRpb25aO1xuICAgIH1cbiAgICBpZiAocHJvcHMuc2NhbGVYICE9IG51bGwpIHtcbiAgICAgIG9iai5zY2FsZS54ID0gcHJvcHMuc2NhbGVYO1xuICAgIH1cbiAgICBpZiAocHJvcHMuc2NhbGVZICE9IG51bGwpIHtcbiAgICAgIG9iai5zY2FsZS55ID0gcHJvcHMuc2NhbGVZO1xuICAgIH1cbiAgICBpZiAocHJvcHMuc2NhbGVaICE9IG51bGwpIHtcbiAgICAgIG9iai5zY2FsZS56ID0gcHJvcHMuc2NhbGVaO1xuICAgIH1cbiAgfTtcblxuICBpZiAoaW5zdGFuY2UpIHtcbiAgICAvLyBSZW5kZXIgc3BsaW5lIGlmIHRoZSBhcHAgaW5zdGFuY2UgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICByZW5kZXJTcGxpbmUoaW5zdGFuY2Uuc3BsaW5lKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIHN0b3JlIGxhdGVzdCByZW5kZXIgYXMgYSBjYWxsYmFjayB0byBmaXJlIHdoZW4gbG9hZGVkXG4gICAgZnJvbnRlbmRNb2R1bGUuc2V0TG9hZEhhbmRsZXIoY29udGFpbmVyRWxlbWVudCwgcmVuZGVyU3BsaW5lKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gKCkgPT4ge1xuICAvLyBOb3QgdXNlZCBieSB0aGlzIHBsdWdpblxuICByZXR1cm4gbnVsbDtcbn07XG4iXSwibmFtZXMiOlsiY2xlYXJQbHVnaW4iLCJjcmVhdGVQbHVnaW5JbnN0YW5jZSIsImdldFBsdWdpbkNvbmZpZyIsImdldFBsdWdpbkRlc3RpbmF0aW9uIiwiZ2V0UGx1Z2luRHVyYXRpb24iLCJnZXRQbHVnaW5PcmlnaW4iLCJyZW5kZXJQbHVnaW4iLCJxdWVyeUNvbnRhaW5lckVsZW1lbnQiLCJlbGVtZW50SWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRGcm9udGVuZE1vZHVsZSIsIndpbmRvdyIsIldlYmZsb3ciLCJyZXF1aXJlIiwiZGlmZmVyZW5jZSIsImFycjEiLCJhcnIyIiwiZmlsdGVyIiwieCIsImluY2x1ZGVzIiwiYWN0aW9uSXRlbUNvbmZpZyIsImtleSIsInZhbHVlIiwiREVGQVVMVF9WQUxVRVMiLCJPYmplY3QiLCJmcmVlemUiLCJwb3NpdGlvblgiLCJwb3NpdGlvblkiLCJwb3NpdGlvbloiLCJyb3RhdGlvblgiLCJyb3RhdGlvblkiLCJyb3RhdGlvbloiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZVoiLCJyZWZTdGF0ZSIsImFjdGlvbkl0ZW0iLCJkZXN0aW5hdGlvbiIsImNvbmZpZyIsImRlc3RpbmF0aW9uS2V5cyIsImtleXMiLCJzdGF0ZUtleXMiLCJkaWZmS2V5cyIsImxlbmd0aCIsIm9yaWdpbiIsInJlZHVjZSIsInJlc3VsdCIsImVsZW1lbnQiLCJwbHVnaW5FbGVtZW50SWQiLCJ0YXJnZXQiLCJwbHVnaW5FbGVtZW50IiwiY29udGFpbmVyRWxlbWVudCIsImZyb250ZW5kTW9kdWxlIiwiaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsIm9iamVjdElkIiwicmVuZGVyU3BsaW5lIiwic3BsaW5lIiwiRXJyb3IiLCJvYmoiLCJmaW5kT2JqZWN0QnlJZCIsIlBMVUdJTl9TUExJTkUiLCJwcm9wcyIsInBvc2l0aW9uIiwieSIsInoiLCJyb3RhdGlvbiIsInNjYWxlIiwic2V0TG9hZEhhbmRsZXIiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUF3SFRBLFdBQVc7ZUFBWEE7O0lBM0RBQyxvQkFBb0I7ZUFBcEJBOztJQXBEQUMsZUFBZTtlQUFmQTs7SUFnREFDLG9CQUFvQjtlQUFwQkE7O0lBNUNBQyxpQkFBaUI7ZUFBakJBOztJQWlCQUMsZUFBZTtlQUFmQTs7SUFxQ0FDLFlBQVk7ZUFBWkE7OztBQWpFYixNQUFNQyx3QkFBd0IsQ0FBQ0MsWUFDN0JDLFNBQVNDLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRUYsVUFBVSxFQUFFLENBQUM7QUFFckQsTUFBTUcsb0JBQW9CLElBQU1DLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDO0FBRXZELE1BQU1DLGFBQWEsQ0FBQ0MsTUFBTUMsT0FBU0QsS0FBS0UsTUFBTSxDQUFDLENBQUNDLElBQU0sQ0FBQ0YsS0FBS0csUUFBUSxDQUFDRDtBQUU5RCxNQUFNakIsa0JBQWtCLENBQUNtQixrQkFBa0JDO0lBQ2hELE9BQU9ELGlCQUFpQkUsS0FBSyxDQUFDRCxJQUFJO0FBQ3BDO0FBRU8sTUFBTWxCLG9CQUFvQjtJQUMvQiwwQkFBMEI7SUFDMUIsT0FBTztBQUNUO0FBRUEsTUFBTW9CLGlCQUFpQkMsT0FBT0MsTUFBTSxDQUFDO0lBQ25DQyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsV0FBVztJQUNYQyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsV0FBVztJQUNYQyxRQUFRO0lBQ1JDLFFBQVE7SUFDUkMsUUFBUTtBQUNWO0FBRU8sTUFBTTlCLGtCQUFrQixDQUFDK0IsVUFBVUM7SUFDeEMseURBQXlEO0lBQ3pELE1BQU1DLGNBQWNELFdBQVdFLE1BQU0sQ0FBQ2hCLEtBQUs7SUFDM0MsTUFBTWlCLGtCQUFr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 }), 1407: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* eslint-env browser */ // Importing directly to avoid importing the entire shared-utils package. // eslint-disable-next-line webflow/package-boundaries Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, renderPlugin: function() { return renderPlugin; } }); const _normalizeColor = __webpack_require__(380); const getPluginConfig = (actionItemConfig, key)=>{ return actionItemConfig.value[key]; }; const getPluginDuration = ()=>{ // Not used by this plugin return null; }; const getPluginOrigin = (refState, actionItem)=>{ if (refState) { return refState; } // Determine which props we care about in the destination const destination = actionItem.config.value; // Look up root variable to parse origin values const objectId = actionItem.config.target.objectId; const computedValue = getComputedStyle(document.documentElement).getPropertyValue(objectId); if (destination.size != null) { return { size: parseInt(computedValue, 10) }; } if (destination.unit === '%' || destination.unit === '-') { return { size: parseFloat(computedValue) }; } if (destination.red != null && destination.green != null && destination.blue != null) { return (0, _normalizeColor.normalizeColor)(computedValue); } }; const getPluginDestination = (actionItemConfig)=>{ return actionItemConfig.value; }; const createPluginInstance = ()=>{ // Not used by this plugin return null; }; const variableHandlers = { color: { match: ({ red, green, blue, alpha })=>[ red, green, blue, alpha ].every((x)=>x != null), getValue: ({ red, green, blue, alpha })=>`rgba(${red}, ${green}, ${blue}, ${alpha})` }, // Size, Percentage, and Unitless variables. size: { match: ({ size })=>size != null, getValue: ({ size }, unit)=>{ switch(unit){ case '-': return size; default: return `${size}${unit}`; } } } }; const renderPlugin = (_, refState, actionItem)=>{ const { target: { objectId }, value: { unit } } = actionItem.config; const props = refState.PLUGIN_VARIABLE; const handler = Object.values(variableHandlers).find((h)=>h.match(props, unit)); if (handler) { document.documentElement.style.setProperty(objectId, handler.getValue(props, unit)); } }; const clearPlugin = (ref, actionItem)=>{ const objectId = actionItem.config.target.objectId; document.documentElement.style.removeProperty(objectId); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vLyBJbXBvcnRpbmcgZGlyZWN0bHkgdG8gYXZvaWQgaW1wb3J0aW5nIHRoZSBlbnRpcmUgc2hhcmVkLXV0aWxzIHBhY2thZ2UuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2ViZmxvdy9wYWNrYWdlLWJvdW5kYXJpZXNcbmltcG9ydCB7bm9ybWFsaXplQ29sb3J9IGZyb20gJy4uL3NoYXJlZC11dGlscy9ub3JtYWxpemVDb2xvcic7XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5Db25maWcgPSAoYWN0aW9uSXRlbUNvbmZpZywga2V5KSA9PiB7XG4gIHJldHVybiBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlW2tleV07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luRHVyYXRpb24gPSAoKSA9PiB7XG4gIC8vIE5vdCB1c2VkIGJ5IHRoaXMgcGx1Z2luXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk9yaWdpbiA9IChyZWZTdGF0ZSwgYWN0aW9uSXRlbSkgPT4ge1xuICBpZiAocmVmU3RhdGUpIHtcbiAgICByZXR1cm4gcmVmU3RhdGU7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgd2UgY2FyZSBhYm91dCBpbiB0aGUgZGVzdGluYXRpb25cbiAgY29uc3QgZGVzdGluYXRpb24gPSBhY3Rpb25JdGVtLmNvbmZpZy52YWx1ZTtcblxuICAvLyBMb29rIHVwIHJvb3QgdmFyaWFibGUgdG8gcGFyc2Ugb3JpZ2luIHZhbHVlc1xuICBjb25zdCBvYmplY3RJZCA9IGFjdGlvbkl0ZW0uY29uZmlnLnRhcmdldC5vYmplY3RJZDtcbiAgY29uc3QgY29tcHV0ZWRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICkuZ2V0UHJvcGVydHlWYWx1ZShvYmplY3RJZCk7XG5cbiAgaWYgKGRlc3RpbmF0aW9uLnNpemUgIT0gbnVsbCkge1xuICAgIHJldHVybiB7c2l6ZTogcGFyc2VJbnQoY29tcHV0ZWRWYWx1ZSwgMTApfTtcbiAgfVxuXG4gIGlmIChkZXN0aW5hdGlvbi51bml0ID09PSAnJScgfHwgZGVzdGluYXRpb24udW5pdCA9PT0gJy0nKSB7XG4gICAgcmV0dXJuIHtzaXplOiBwYXJzZUZsb2F0KGNvbXB1dGVkVmFsdWUpfTtcbiAgfVxuXG4gIGlmIChcbiAgICBkZXN0aW5hdGlvbi5yZWQgIT0gbnVsbCAmJlxuICAgIGRlc3RpbmF0aW9uLmdyZWVuICE9IG51bGwgJiZcbiAgICBkZXN0aW5hdGlvbi5ibHVlICE9IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvbG9yKGNvbXB1dGVkVmFsdWUpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luRGVzdGluYXRpb24gPSAoYWN0aW9uSXRlbUNvbmZpZykgPT4ge1xuICByZXR1cm4gYWN0aW9uSXRlbUNvbmZpZy52YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQbHVnaW5JbnN0YW5jZSA9ICgpID0+IHtcbiAgLy8gTm90IHVzZWQgYnkgdGhpcyBwbHVnaW5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCB2YXJpYWJsZUhhbmRsZXJzID0ge1xuICBjb2xvcjoge1xuICAgIG1hdGNoOiAoe3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhfSkgPT5cbiAgICAgIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0uZXZlcnkoKHgpID0+IHggIT0gbnVsbCksXG4gICAgZ2V0VmFsdWU6ICh7cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGF9KSA9PlxuICAgICAgYHJnYmEoJHtyZWR9LCAke2dyZWVufSwgJHtibHVlfSwgJHthbHBoYX0pYCxcbiAgfSxcblxuICAvLyBTaXplLCBQZXJjZW50YWdlLCBhbmQgVW5pdGxlc3MgdmFyaWFibGVzLlxuICBzaXplOiB7XG4gICAgbWF0Y2g6ICh7c2l6ZX0pID0+IHNpemUgIT0gbnVsbCxcbiAgICBnZXRWYWx1ZTogKHtzaXplfSwgdW5pdCkgPT4ge1xuICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIHJldHVybiBzaXplO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBgJHtzaXplfSR7dW5pdH1gO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyUGx1Z2luID0gKF8sIHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXQ6IHtvYmplY3RJZH0sXG4gICAgdmFsdWU6IHt1bml0fSxcbiAgfSA9IGFjdGlvbkl0ZW0uY29uZmlnO1xuICBjb25zdCBwcm9wcyA9IHJlZlN0YXRlLlBMVUdJTl9WQVJJQUJMRTtcblxuICBjb25zdCBoYW5kbGVyID0gT2JqZWN0LnZhbHVlcyh2YXJpYWJsZUhhbmRsZXJzKS5maW5kKChoKSA9PlxuICAgIGgubWF0Y2gocHJvcHMsIHVuaXQpXG4gICk7XG5cbiAgaWYgKGhhbmRsZXIpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICBvYmplY3RJZCxcbiAgICAgIGhhbmRsZXIuZ2V0VmFsdWUocHJvcHMsIHVuaXQpXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gKHJlZiwgYWN0aW9uSXRlbSkgPT4ge1xuICBjb25zdCBvYmplY3RJZCA9IGFjdGlvbkl0ZW0uY29uZmlnLnRhcmdldC5vYmplY3RJZDtcbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KG9iamVjdElkKTtcbn07XG4iXSwibmFtZXMiOlsiY2xlYXJQbHVnaW4iLCJjcmVhdGVQbHVnaW5JbnN0YW5jZSIsImdldFBsdWdpbkNvbmZpZyIsImdldFBsdWdpbkRlc3RpbmF0aW9uIiwiZ2V0UGx1Z2luRHVyYXRpb24iLCJnZXRQbHVnaW5PcmlnaW4iLCJyZW5kZXJQbHVnaW4iLCJhY3Rpb25JdGVtQ29uZmlnIiwia2V5IiwidmFsdWUiLCJyZWZTdGF0ZSIsImFjdGlvbkl0ZW0iLCJkZXN0aW5hdGlvbiIsImNvbmZpZyIsIm9iamVjdElkIiwidGFyZ2V0IiwiY29tcHV0ZWRWYWx1ZSIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJzaXplIiwicGFyc2VJbnQiLCJ1bml0IiwicGFyc2VGbG9hdCIsInJlZCIsImdyZWVuIiwiYmx1ZSIsIm5vcm1hbGl6ZUNvbG9yIiwidmFyaWFibGVIYW5kbGVycyIsImNvbG9yIiwibWF0Y2giLCJhbHBoYSIsImV2ZXJ5IiwieCIsImdldFZhbHVlIiwiXyIsInByb3BzIiwiUExVR0lOX1ZBUklBQkxFIiwiaGFuZGxlciIsIk9iamVjdCIsInZhbHVlcyIsImZpbmQiLCJoIiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsInJlZiIsInJlbW92ZVByb3BlcnR5Il0sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0IsR0FFdEIseUVBQXlFO0FBQ3pFLHNEQUFzRDs7Ozs7Ozs7Ozs7O0lBNkZ6Q0EsV0FBVztlQUFYQTs7SUE5Q0FDLG9CQUFvQjtlQUFwQkE7O0lBNUNBQyxlQUFlO2VBQWZBOztJQXdDQUMsb0JBQW9CO2VBQXBCQTs7SUFwQ0FDLGlCQUFpQjtlQUFqQkE7O0lBS0FDLGVBQWU7ZUFBZkE7O0lBOERBQyxZQUFZO2VBQVpBOzs7Z0NBekVnQjtBQUV0QixNQUFNSixrQkFBa0IsQ0FBQ0ssa0JBQWtCQztJQUNoRCxPQUFPRCxpQkFBaUJFLEtBQUssQ0FBQ0QsSUFBSTtBQUNwQztBQUVPLE1BQU1KLG9CQUFvQjtJQUMvQiwwQkFBMEI7SUFDMUIsT0FBTztBQUNUO0FBRU8sTUFBTUMsa0JBQWtCLENBQUNLLFVBQVVDO0lBQ3hDLElBQUlELFVBQVU7UUFDWixPQUFPQTtJQUNUO0lBRUEseURB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 }), 3690: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "pluginMethodMap", ({ enumerable: true, get: function() { return pluginMethodMap; } })); const _sharedconstants = __webpack_require__(7087); const _IX2Lottie = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(7377)); const _IX2Spline = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2866)); const _IX2Rive = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2570)); const _IX2Variable = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(1407)); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const pluginMethodMap = new Map([ [ _sharedconstants.ActionTypeConsts.PLUGIN_LOTTIE, { ..._IX2Lottie } ], [ _sharedconstants.ActionTypeConsts.PLUGIN_SPLINE, { ..._IX2Spline } ], [ _sharedconstants.ActionTypeConsts.PLUGIN_RIVE, { ..._IX2Rive } ], [ _sharedconstants.ActionTypeConsts.PLUGIN_VARIABLE, { ..._IX2Variable } ] ]); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9uVHlwZUNvbnN0c30gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMnO1xuXG5pbXBvcnQgKiBhcyBsb3R0aWUgZnJvbSAnLi9JWDJMb3R0aWUnO1xuaW1wb3J0ICogYXMgc3BsaW5lIGZyb20gJy4vSVgyU3BsaW5lJztcbmltcG9ydCAqIGFzIHJpdmUgZnJvbSAnLi9JWDJSaXZlJztcbmltcG9ydCAqIGFzIHZhcmlhYmxlIGZyb20gJy4vSVgyVmFyaWFibGUnO1xuXG5leHBvcnQgdHlwZSBQbHVnaW5UeXBlID1cbiAgfCB0eXBlb2YgQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fTE9UVElFXG4gIHwgdHlwZW9mIEFjdGlvblR5cGVDb25zdHMuUExVR0lOX1NQTElORVxuICB8IHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9WQVJJQUJMRVxuICB8IHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9SSVZFO1xuXG5leHBvcnQgY29uc3QgcGx1Z2luTWV0aG9kTWFwID0gbmV3IE1hcChbXG4gIFtBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9MT1RUSUUsIHsuLi5sb3R0aWV9XSxcbiAgW0FjdGlvblR5cGVDb25zdHMuUExVR0lOX1NQTElORSwgey4uLnNwbGluZX1dLFxuICBbQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fUklWRSwgey4uLnJpdmV9XSxcbiAgW0FjdGlvblR5cGVDb25zdHMuUExVR0lOX1ZBUklBQkxFLCB7Li4udmFyaWFibGV9XSxcbl0pO1xuIl0sIm5hbWVzIjpbInBsdWdpbk1ldGhvZE1hcCIsIk1hcCIsIkFjdGlvblR5cGVDb25zdHMiLCJQTFVHSU5fTE9UVElFIiwibG90dGllIiwiUExVR0lOX1NQTElORSIsInNwbGluZSIsIlBMVUdJTl9SSVZFIiwicml2ZSIsIlBMVUdJTl9WQVJJQUJMRSIsInZhcmlhYmxlIl0sIm1hcHBpbmdzIjoiOzs7OytCQWFhQTs7O2VBQUFBOzs7aUNBYmtCO21FQUVQO21FQUNBO2lFQUNGO3FFQUNJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRbkIsTUFBTUEsa0JBQWtCLElBQUlDLElBQUk7SUFDckM7UUFBQ0MsaUNBQWdCLENBQUNDLGFBQWE7UUFBRTtZQUFDLEdBQUdDLFVBQU07UUFBQTtLQUFFO0lBQzdDO1FBQUNGLGlDQUFnQixDQUFDRyxhQUFhO1FBQUU7WUFBQyxHQUFHQyxVQUFNO1FBQUE7S0FBRTtJQUM3QztRQUFDSixpQ0FBZ0IsQ0FBQ0ssV0FBVztRQUFFO1lBQUMsR0FBR0MsUUFBSTtRQUFBO0tBQUU7SUFDekM7UUFBQ04saUNBQWdCLENBQUNPLGVBQWU7UUFBRTtZQUFDLEdBQUdDLFlBQVE7UUFBQTtLQUFFO0NBQ2xEIn0= }), 8023: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { IX2_ACTION_LIST_PLAYBACK_CHANGED: function() { return IX2_ACTION_LIST_PLAYBACK_CHANGED; }, IX2_ANIMATION_FRAME_CHANGED: function() { return IX2_ANIMATION_FRAME_CHANGED; }, IX2_CLEAR_REQUESTED: function() { return IX2_CLEAR_REQUESTED; }, IX2_ELEMENT_STATE_CHANGED: function() { return IX2_ELEMENT_STATE_CHANGED; }, IX2_EVENT_LISTENER_ADDED: function() { return IX2_EVENT_LISTENER_ADDED; }, IX2_EVENT_STATE_CHANGED: function() { return IX2_EVENT_STATE_CHANGED; }, IX2_INSTANCE_ADDED: function() { return IX2_INSTANCE_ADDED; }, IX2_INSTANCE_REMOVED: function() { return IX2_INSTANCE_REMOVED; }, IX2_INSTANCE_STARTED: function() { return IX2_INSTANCE_STARTED; }, IX2_MEDIA_QUERIES_DEFINED: function() { return IX2_MEDIA_QUERIES_DEFINED; }, IX2_PARAMETER_CHANGED: function() { return IX2_PARAMETER_CHANGED; }, IX2_PLAYBACK_REQUESTED: function() { return IX2_PLAYBACK_REQUESTED; }, IX2_PREVIEW_REQUESTED: function() { return IX2_PREVIEW_REQUESTED; }, IX2_RAW_DATA_IMPORTED: function() { return IX2_RAW_DATA_IMPORTED; }, IX2_SESSION_INITIALIZED: function() { return IX2_SESSION_INITIALIZED; }, IX2_SESSION_STARTED: function() { return IX2_SESSION_STARTED; }, IX2_SESSION_STOPPED: function() { return IX2_SESSION_STOPPED; }, IX2_STOP_REQUESTED: function() { return IX2_STOP_REQUESTED; }, IX2_TEST_FRAME_RENDERED: function() { return IX2_TEST_FRAME_RENDERED; }, IX2_VIEWPORT_WIDTH_CHANGED: function() { return IX2_VIEWPORT_WIDTH_CHANGED; } }); const IX2_RAW_DATA_IMPORTED = 'IX2_RAW_DATA_IMPORTED'; const IX2_SESSION_INITIALIZED = 'IX2_SESSION_INITIALIZED'; const IX2_SESSION_STARTED = 'IX2_SESSION_STARTED'; const IX2_SESSION_STOPPED = 'IX2_SESSION_STOPPED'; const IX2_PREVIEW_REQUESTED = 'IX2_PREVIEW_REQUESTED'; const IX2_PLAYBACK_REQUESTED = 'IX2_PLAYBACK_REQUESTED'; const IX2_STOP_REQUESTED = 'IX2_STOP_REQUESTED'; const IX2_CLEAR_REQUESTED = 'IX2_CLEAR_REQUESTED'; const IX2_EVENT_LISTENER_ADDED = 'IX2_EVENT_LISTENER_ADDED'; const IX2_EVENT_STATE_CHANGED = 'IX2_EVENT_STATE_CHANGED'; const IX2_ANIMATION_FRAME_CHANGED = 'IX2_ANIMATION_FRAME_CHANGED'; const IX2_PARAMETER_CHANGED = 'IX2_PARAMETER_CHANGED'; const IX2_INSTANCE_ADDED = 'IX2_INSTANCE_ADDED'; const IX2_INSTANCE_STARTED = 'IX2_INSTANCE_STARTED'; const IX2_INSTANCE_REMOVED = 'IX2_INSTANCE_REMOVED'; const IX2_ELEMENT_STATE_CHANGED = 'IX2_ELEMENT_STATE_CHANGED'; const IX2_ACTION_LIST_PLAYBACK_CHANGED = 'IX2_ACTION_LIST_PLAYBACK_CHANGED'; const IX2_VIEWPORT_WIDTH_CHANGED = 'IX2_VIEWPORT_WIDTH_CHANGED'; const IX2_MEDIA_QUERIES_DEFINED = 'IX2_MEDIA_QUERIES_DEFINED'; const IX2_TEST_FRAME_RENDERED = 'IX2_TEST_FRAME_RENDERED'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVuZ2luZUFjdGlvblR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBJWDJfUkFXX0RBVEFfSU1QT1JURUQgPSAnSVgyX1JBV19EQVRBX0lNUE9SVEVEJztcbmV4cG9ydCBjb25zdCBJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCA9ICdJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCc7XG5leHBvcnQgY29uc3QgSVgyX1NFU1NJT05fU1RBUlRFRCA9ICdJWDJfU0VTU0lPTl9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBJWDJfU0VTU0lPTl9TVE9QUEVEID0gJ0lYMl9TRVNTSU9OX1NUT1BQRUQnO1xuZXhwb3J0IGNvbnN0IElYMl9QUkVWSUVXX1JFUVVFU1RFRCA9ICdJWDJfUFJFVklFV19SRVFVRVNURUQnO1xuZXhwb3J0IGNvbnN0IElYMl9QTEFZQkFDS19SRVFVRVNURUQgPSAnSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCc7XG5leHBvcnQgY29uc3QgSVgyX1NUT1BfUkVRVUVTVEVEID0gJ0lYMl9TVE9QX1JFUVVFU1RFRCc7XG5leHBvcnQgY29uc3QgSVgyX0NMRUFSX1JFUVVFU1RFRCA9ICdJWDJfQ0xFQVJfUkVRVUVTVEVEJztcbmV4cG9ydCBjb25zdCBJWDJfRVZFTlRfTElTVEVORVJfQURERUQgPSAnSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVEJztcbmV4cG9ydCBjb25zdCBJWDJfRVZFTlRfU1RBVEVfQ0hBTkdFRCA9ICdJWDJfRVZFTlRfU1RBVEVfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEID0gJ0lYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX1BBUkFNRVRFUl9DSEFOR0VEID0gJ0lYMl9QQVJBTUVURVJfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX0lOU1RBTkNFX0FEREVEID0gJ0lYMl9JTlNUQU5DRV9BRERFRCc7XG5leHBvcnQgY29uc3QgSVgyX0lOU1RBTkNFX1NUQVJURUQgPSAnSVgyX0lOU1RBTkNFX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IElYMl9JTlNUQU5DRV9SRU1PVkVEID0gJ0lYMl9JTlNUQU5DRV9SRU1PVkVEJztcbmV4cG9ydCBjb25zdCBJWDJfRUxFTUVOVF9TVEFURV9DSEFOR0VEID0gJ0lYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQnO1xuZXhwb3J0IGNvbnN0IElYMl9BQ1RJT05fTElTVF9QTEFZQkFDS19DSEFOR0VEID1cbiAgJ0lYMl9BQ1RJT05fTElTVF9QTEFZQkFDS19DSEFOR0VEJztcbmV4cG9ydCBjb25zdCBJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCA9ICdJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRCA9ICdJWDJfTUVESUFfUVVFUklFU19ERUZJTkVEJztcbmV4cG9ydCBjb25zdCBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCA9ICdJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCc7XG4iXSwibmFtZXMiOlsiSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQiLCJJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQiLCJJWDJfQ0xFQVJfUkVRVUVTVEVEIiwiSVgyX0VMRU1FTlRfU1RBVEVfQ0hBTkdFRCIsIklYMl9FVkVOVF9MSVNURU5FUl9BRERFRCIsIklYMl9FVkVOVF9TVEFURV9DSEFOR0VEIiwiSVgyX0lOU1RBTkNFX0FEREVEIiwiSVgyX0lOU1RBTkNFX1JFTU9WRUQiLCJJWDJfSU5TVEFOQ0VfU1RBUlRFRCIsIklYMl9NRURJQV9RVUVSSUVTX0RFRklORUQiLCJJWDJfUEFSQU1FVEVSX0NIQU5HRUQiLCJJWDJfUExBWUJBQ0tfUkVRVUVTVEVEIiwiSVgyX1BSRVZJRVdfUkVRVUVTVEVEIiwiSVgyX1JBV19EQVRBX0lNUE9SVEVEIiwiSVgyX1NFU1NJT05fSU5JVElBTElaRUQiLCJJWDJfU0VTU0lPTl9TVEFSVEVEIiwiSVgyX1NFU1NJT05fU1RPUFBFRCIsIklYMl9TVE9QX1JFUVVFU1RFRCIsIklYMl9URVNUX0ZSQU1FX1JFTkRFUkVEIiwiSVgyX1ZJRVdQT1JUX1dJRFRIX0NIQU5HRUQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBZ0JhQSxnQ0FBZ0M7ZUFBaENBOztJQU5BQywyQkFBMkI7ZUFBM0JBOztJQUhBQyxtQkFBbUI7ZUFBbkJBOztJQVFBQyx5QkFBeUI7ZUFBekJBOztJQVBBQyx3QkFBd0I7ZUFBeEJBOztJQUNBQyx1QkFBdUI7ZUFBdkJBOztJQUdBQyxrQkFBa0I7ZUFBbEJBOztJQUVBQyxvQkFBb0I7ZUFBcEJBOztJQURBQyxvQkFBb0I7ZUFBcEJBOztJQU1BQyx5QkFBeUI7ZUFBekJBOztJQVJBQyxxQkFBcUI7ZUFBckJBOztJQU5BQyxzQkFBc0I7ZUFBdEJBOztJQURBQyxxQkFBcUI7ZUFBckJBOztJQUpBQyxxQkFBcUI7ZUFBckJBOztJQUNBQyx1QkFBdUI7ZUFBdkJBOztJQUNBQyxtQkFBbUI7ZUFBbkJBOztJQUNBQyxtQkFBbUI7ZUFBbkJBOztJQUdBQyxrQkFBa0I7ZUFBbEJBOztJQWNBQyx1QkFBdUI7ZUFBdkJBOztJQUZBQywwQkFBMEI7ZUFBMUJBOzs7QUFsQk4sTUFBTU4sd0JBQXdCO0FBQzlCLE1BQU1DLDBCQUEwQjtBQUNoQyxNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMsc0JBQXNCO0FBQzVCLE1BQU1KLHdCQUF3QjtBQUM5QixNQUFNRCx5QkFBeUI7QUFDL0IsTUFBTU0scUJBQXFCO0FBQzNCLE1BQU1mLHNCQUFzQjtBQUM1QixNQUFNRSwyQkFBMkI7QUFDakMsTUFBTUMsMEJBQTBCO0FBQ2hDLE1BQU1KLDhCQUE4QjtBQUNwQyxNQUFNUyx3QkFBd0I7QUFDOUIsTUFBTUoscUJBQXFCO0FBQzNCLE1BQU1FLHVCQUF1QjtBQUM3QixNQUFNRCx1QkFBdUI7QUFDN0IsTUFBTUosNEJBQTRCO0FBQ2xDLE1BQU1ILG1DQUNYO0FBQ0ssTUFBTW1CLDZCQUE2QjtBQUNuQyxNQUFNViw0QkFBNEI7QUFDbEMsTUFBTVMsMEJBQTBCIn0= }), 2686: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ABSTRACT_NODE: function() { return ABSTRACT_NODE; }, AUTO: function() { return AUTO; }, BACKGROUND: function() { return BACKGROUND; }, BACKGROUND_COLOR: function() { return BACKGROUND_COLOR; }, BAR_DELIMITER: function() { return BAR_DELIMITER; }, BORDER_COLOR: function() { return BORDER_COLOR; }, BOUNDARY_SELECTOR: function() { return BOUNDARY_SELECTOR; }, CHILDREN: function() { return CHILDREN; }, COLON_DELIMITER: function() { return COLON_DELIMITER; }, COLOR: function() { return COLOR; }, COMMA_DELIMITER: function() { return COMMA_DELIMITER; }, CONFIG_UNIT: function() { return CONFIG_UNIT; }, CONFIG_VALUE: function() { return CONFIG_VALUE; }, CONFIG_X_UNIT: function() { return CONFIG_X_UNIT; }, CONFIG_X_VALUE: function() { return CONFIG_X_VALUE; }, CONFIG_Y_UNIT: function() { return CONFIG_Y_UNIT; }, CONFIG_Y_VALUE: function() { return CONFIG_Y_VALUE; }, CONFIG_Z_UNIT: function() { return CONFIG_Z_UNIT; }, CONFIG_Z_VALUE: function() { return CONFIG_Z_VALUE; }, DISPLAY: function() { return DISPLAY; }, FILTER: function() { return FILTER; }, FLEX: function() { return FLEX; }, FONT_VARIATION_SETTINGS: function() { return FONT_VARIATION_SETTINGS; }, HEIGHT: function() { return HEIGHT; }, HTML_ELEMENT: function() { return HTML_ELEMENT; }, IMMEDIATE_CHILDREN: function() { return IMMEDIATE_CHILDREN; }, IX2_ID_DELIMITER: function() { return IX2_ID_DELIMITER; }, OPACITY: function() { return OPACITY; }, PARENT: function() { return PARENT; }, PLAIN_OBJECT: function() { return PLAIN_OBJECT; }, PRESERVE_3D: function() { return PRESERVE_3D; }, RENDER_GENERAL: function() { return RENDER_GENERAL; }, RENDER_PLUGIN: function() { return RENDER_PLUGIN; }, RENDER_STYLE: function() { return RENDER_STYLE; }, RENDER_TRANSFORM: function() { return RENDER_TRANSFORM; }, ROTATE_X: function() { return ROTATE_X; }, ROTATE_Y: function() { return ROTATE_Y; }, ROTATE_Z: function() { return ROTATE_Z; }, SCALE_3D: function() { return SCALE_3D; }, SCALE_X: function() { return SCALE_X; }, SCALE_Y: function() { return SCALE_Y; }, SCALE_Z: function() { return SCALE_Z; }, SIBLINGS: function() { return SIBLINGS; }, SKEW: function() { return SKEW; }, SKEW_X: function() { return SKEW_X; }, SKEW_Y: function() { return SKEW_Y; }, TRANSFORM: function() { return TRANSFORM; }, TRANSLATE_3D: function() { return TRANSLATE_3D; }, TRANSLATE_X: function() { return TRANSLATE_X; }, TRANSLATE_Y: function() { return TRANSLATE_Y; }, TRANSLATE_Z: function() { return TRANSLATE_Z; }, WF_PAGE: function() { return WF_PAGE; }, WIDTH: function() { return WIDTH; }, WILL_CHANGE: function() { return WILL_CHANGE; }, W_MOD_IX: function() { return W_MOD_IX; }, W_MOD_JS: function() { return W_MOD_JS; } }); const IX2_ID_DELIMITER = '|'; const WF_PAGE = 'data-wf-page'; const W_MOD_JS = 'w-mod-js'; const W_MOD_IX = 'w-mod-ix'; const BOUNDARY_SELECTOR = '.w-dyn-item'; const CONFIG_X_VALUE = 'xValue'; const CONFIG_Y_VALUE = 'yValue'; const CONFIG_Z_VALUE = 'zValue'; const CONFIG_VALUE = 'value'; const CONFIG_X_UNIT = 'xUnit'; const CONFIG_Y_UNIT = 'yUnit'; const CONFIG_Z_UNIT = 'zUnit'; const CONFIG_UNIT = 'unit'; const TRANSFORM = 'transform'; const TRANSLATE_X = 'translateX'; const TRANSLATE_Y = 'translateY'; const TRANSLATE_Z = 'translateZ'; const TRANSLATE_3D = 'translate3d'; const SCALE_X = 'scaleX'; const SCALE_Y = 'scaleY'; const SCALE_Z = 'scaleZ'; const SCALE_3D = 'scale3d'; const ROTATE_X = 'rotateX'; const ROTATE_Y = 'rotateY'; const ROTATE_Z = 'rotateZ'; const SKEW = 'skew'; const SKEW_X = 'skewX'; const SKEW_Y = 'skewY'; const OPACITY = 'opacity'; const FILTER = 'filter'; const FONT_VARIATION_SETTINGS = 'font-variation-settings'; const WIDTH = 'width'; const HEIGHT = 'height'; const BACKGROUND_COLOR = 'backgroundColor'; const BACKGROUND = 'background'; const BORDER_COLOR = 'borderColor'; const COLOR = 'color'; const DISPLAY = 'display'; const FLEX = 'flex'; const WILL_CHANGE = 'willChange'; const AUTO = 'AUTO'; const COMMA_DELIMITER = ','; const COLON_DELIMITER = ':'; const BAR_DELIMITER = '|'; const CHILDREN = 'CHILDREN'; const IMMEDIATE_CHILDREN = 'IMMEDIATE_CHILDREN'; const SIBLINGS = 'SIBLINGS'; const PARENT = 'PARENT'; const PRESERVE_3D = 'preserve-3d'; const HTML_ELEMENT = 'HTML_ELEMENT'; const PLAIN_OBJECT = 'PLAIN_OBJECT'; const ABSTRACT_NODE = 'ABSTRACT_NODE'; const RENDER_TRANSFORM = 'RENDER_TRANSFORM'; const RENDER_GENERAL = 'RENDER_GENERAL'; const RENDER_STYLE = 'RENDER_STYLE'; const RENDER_PLUGIN = 'RENDER_PLUGIN'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVuZ2luZUNvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgSVgyX0lEX0RFTElNSVRFUiA9ICd8Jztcbi8qKlxuICogU3RvcmVzIHBhZ2VJZCBvZiB0aGUgY3VycmVudCBwYWdlLCBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIElYMkJyb3dzZXJBcGlcbiAqL1xuZXhwb3J0IGNvbnN0IFdGX1BBR0UgPSAnZGF0YS13Zi1wYWdlJztcbmV4cG9ydCBjb25zdCBXX01PRF9KUyA9ICd3LW1vZC1qcyc7XG5leHBvcnQgY29uc3QgV19NT0RfSVggPSAndy1tb2QtaXgnO1xuZXhwb3J0IGNvbnN0IEJPVU5EQVJZX1NFTEVDVE9SID0gJy53LWR5bi1pdGVtJztcbmV4cG9ydCBjb25zdCBDT05GSUdfWF9WQUxVRSA9ICd4VmFsdWUnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19ZX1ZBTFVFID0gJ3lWYWx1ZSc7XG5leHBvcnQgY29uc3QgQ09ORklHX1pfVkFMVUUgPSAnelZhbHVlJztcbmV4cG9ydCBjb25zdCBDT05GSUdfVkFMVUUgPSAndmFsdWUnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19YX1VOSVQgPSAneFVuaXQnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19ZX1VOSVQgPSAneVVuaXQnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19aX1VOSVQgPSAnelVuaXQnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19VTklUID0gJ3VuaXQnO1xuZXhwb3J0IGNvbnN0IFRSQU5TRk9STSA9ICd0cmFuc2Zvcm0nO1xuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9YID0gJ3RyYW5zbGF0ZVgnO1xuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9ZID0gJ3RyYW5zbGF0ZVknO1xuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9aID0gJ3RyYW5zbGF0ZVonO1xuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV8zRCA9ICd0cmFuc2xhdGUzZCc7XG5leHBvcnQgY29uc3QgU0NBTEVfWCA9ICdzY2FsZVgnO1xuZXhwb3J0IGNvbnN0IFNDQUxFX1kgPSAnc2NhbGVZJztcbmV4cG9ydCBjb25zdCBTQ0FMRV9aID0gJ3NjYWxlWic7XG5leHBvcnQgY29uc3QgU0NBTEVfM0QgPSAnc2NhbGUzZCc7XG5leHBvcnQgY29uc3QgUk9UQVRFX1ggPSAncm90YXRlWCc7XG5leHBvcnQgY29uc3QgUk9UQVRFX1kgPSAncm90YXRlWSc7XG5leHBvcnQgY29uc3QgUk9UQVRFX1ogPSAncm90YXRlWic7XG5leHBvcnQgY29uc3QgU0tFVyA9ICdza2V3JztcbmV4cG9ydCBjb25zdCBTS0VXX1ggPSAnc2tld1gnO1xuZXhwb3J0IGNvbnN0IFNLRVdfWSA9ICdza2V3WSc7XG5leHBvcnQgY29uc3QgT1BBQ0lUWSA9ICdvcGFjaXR5JztcbmV4cG9ydCBjb25zdCBGSUxURVIgPSAnZmlsdGVyJztcbmV4cG9ydCBjb25zdCBGT05UX1ZBUklBVElPTl9TRVRUSU5HUyA9ICdmb250LXZhcmlhdGlvbi1zZXR0aW5ncyc7XG5leHBvcnQgY29uc3QgV0lEVEggPSAnd2lkdGgnO1xuZXhwb3J0IGNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnO1xuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfQ09MT1IgPSAnYmFja2dyb3VuZENvbG9yJztcbmV4cG9ydCBjb25zdCBCQUNLR1JPVU5EID0gJ2JhY2tncm91bmQnO1xuZXhwb3J0IGNvbnN0IEJPUkRFUl9DT0xPUiA9ICdib3JkZXJDb2xvcic7XG5leHBvcnQgY29uc3QgQ09MT1IgPSAnY29sb3InO1xuZXhwb3J0IGNvbnN0IERJU1BMQVkgPSAnZGlzcGxheSc7XG5leHBvcnQgY29uc3QgRkxFWCA9ICdmbGV4JztcbmV4cG9ydCBjb25zdCBXSUxMX0NIQU5HRSA9ICd3aWxsQ2hhbmdlJztcbmV4cG9ydCBjb25zdCBBVVRPID0gJ0FVVE8nO1xuZXhwb3J0IGNvbnN0IENPTU1BX0RFTElNSVRFUiA9ICcsJztcbmV4cG9ydCBjb25zdCBDT0xPTl9ERUxJTUlURVIgPSAnOic7XG5leHBvcnQgY29uc3QgQkFSX0RFTElNSVRFUiA9ICd8JztcbmV4cG9ydCBjb25zdCBDSElMRFJFTiA9ICdDSElMRFJFTic7XG5leHBvcnQgY29uc3QgSU1NRURJQVRFX0NISUxEUkVOID0gJ0lNTUVESUFURV9DSElMRFJFTic7XG5leHBvcnQgY29uc3QgU0lCTElOR1MgPSAnU0lCTElOR1MnO1xuZXhwb3J0IGNvbnN0IFBBUkVOVCA9ICdQQVJFTlQnO1xuZXhwb3J0IGNvbnN0IFBSRVNFUlZFXzNEID0gJ3ByZXNlcnZlLTNkJztcbmV4cG9ydCBjb25zdCBIVE1MX0VMRU1FTlQgPSAnSFRNTF9FTEVNRU5UJztcbmV4cG9ydCBjb25zdCBQTEFJTl9PQkpFQ1QgPSAnUExBSU5fT0JKRUNUJztcbmV4cG9ydCBjb25zdCBBQlNUUkFDVF9OT0RFID0gJ0FCU1RSQUNUX05PREUnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9UUkFOU0ZPUk0gPSAnUkVOREVSX1RSQU5TRk9STSc7XG5leHBvcnQgY29uc3QgUkVOREVSX0dFTkVSQUwgPSAnUkVOREVSX0dFTkVSQUwnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9TVFlMRSA9ICdSRU5ERVJfU1RZTEUnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9QTFVHSU4gPSAnUkVOREVSX1BMVUdJTic7XG4iXSwibmFtZXMiOlsiQUJTVFJBQ1RfTk9ERSIsIkFVVE8iLCJCQUNLR1JPVU5EIiwiQkFDS0dST1VORF9DT0xPUiIsIkJBUl9ERUxJTUlURVIiLCJCT1JERVJfQ09MT1IiLCJCT1VOREFSWV9TRUxFQ1RPUiIsIkNISUxEUkVOIiwiQ09MT05fREVMSU1JVEVSIiwiQ09MT1IiLCJDT01NQV9ERUxJTUlURVIiLCJDT05GSUdfVU5JVCIsIkNPTkZJR19WQUxVRSIsIkNPTkZJR19YX1VOSVQiLCJDT05GSUdfWF9WQUxVRSIsIkNPTkZJR19ZX1VOSVQiLCJDT05GSUdfWV9WQUxVRSIsIkNPTkZJR19aX1VOSVQiLCJDT05GSUdfWl9WQUxVRSIsIkRJU1BMQVkiLCJGSUxURVIiLCJGTEVYIiwiRk9OVF9WQVJJQVRJT05fU0VUVElOR1MiLCJIRUlHSFQiLCJIVE1MX0VMRU1FTlQiLCJJTU1FRElBVEVfQ0hJTERSRU4iLCJJWDJfSURfREVMSU1JVEVSIiwiT1BBQ0lUWSIsIlBBUkVOVCIsIlBMQUlOX09CSkVDVCIsIlBSRVNFUlZFXzNEIiwiUkVOREVSX0dFTkVSQUwiLCJSRU5ERVJfUExVR0lOIiwiUkVOREVSX1NUWUxFIiwiUkVOREVSX1RSQU5TRk9STSIsIlJPVEFURV9YIiwiUk9UQVRFX1kiLCJST1RBVEVfWiIsIlNDQUxFXzNEIiwiU0NBTEVfWCIsIlNDQUxFX1kiLCJTQ0FMRV9aIiwiU0lCTElOR1MiLCJTS0VXIiwiU0tFV19YIiwiU0tFV19ZIiwiVFJBTlNGT1JNIiwiVFJBTlNMQVRFXzNEIiwiVFJBTlNMQVRFX1giLCJUUkFOU0xBVEVfWSIsIlRSQU5TTEFURV9aIiwiV0ZfUEFHRSIsIldJRFRIIiwiV0lMTF9DSEFOR0UiLCJXX01PRF9JWCIsIldfTU9EX0pTIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXNEYUEsYUFBYTtlQUFiQTs7SUFYQUMsSUFBSTtlQUFKQTs7SUFOQUMsVUFBVTtlQUFWQTs7SUFEQUMsZ0JBQWdCO2VBQWhCQTs7SUFVQUMsYUFBYTtlQUFiQTs7SUFSQUMsWUFBWTtlQUFaQTs7SUEvQkFDLGlCQUFpQjtlQUFqQkE7O0lBd0NBQyxRQUFRO2VBQVJBOztJQUZBQyxlQUFlO2VBQWZBOztJQU5BQyxLQUFLO2VBQUxBOztJQUtBQyxlQUFlO2VBQWZBOztJQTdCQUMsV0FBVztlQUFYQTs7SUFKQUMsWUFBWTtlQUFaQTs7SUFDQUMsYUFBYTtlQUFiQTs7SUFKQUMsY0FBYztlQUFkQTs7SUFLQUMsYUFBYTtlQUFiQTs7SUFKQUMsY0FBYztlQUFkQTs7SUFLQUMsYUFBYTtlQUFiQTs7SUFKQUMsY0FBYztlQUFkQTs7SUE4QkFDLE9BQU87ZUFBUEE7O0lBUkFDLE1BQU07ZUFBTkE7O0lBU0FDLElBQUk7ZUFBSkE7O0lBUkFDLHVCQUF1QjtlQUF2QkE7O0lBRUFDLE1BQU07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 }), 262: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ActionAppliesTo: function() { return ActionAppliesTo; }, ActionTypeConsts: function() { return ActionTypeConsts; } }); const ActionTypeConsts = { TRANSFORM_MOVE: 'TRANSFORM_MOVE', TRANSFORM_SCALE: 'TRANSFORM_SCALE', TRANSFORM_ROTATE: 'TRANSFORM_ROTATE', TRANSFORM_SKEW: 'TRANSFORM_SKEW', STYLE_OPACITY: 'STYLE_OPACITY', STYLE_SIZE: 'STYLE_SIZE', STYLE_FILTER: 'STYLE_FILTER', STYLE_FONT_VARIATION: 'STYLE_FONT_VARIATION', STYLE_BACKGROUND_COLOR: 'STYLE_BACKGROUND_COLOR', STYLE_BORDER: 'STYLE_BORDER', STYLE_TEXT_COLOR: 'STYLE_TEXT_COLOR', OBJECT_VALUE: 'OBJECT_VALUE', PLUGIN_LOTTIE: 'PLUGIN_LOTTIE', PLUGIN_SPLINE: 'PLUGIN_SPLINE', PLUGIN_RIVE: 'PLUGIN_RIVE', PLUGIN_VARIABLE: 'PLUGIN_VARIABLE', GENERAL_DISPLAY: 'GENERAL_DISPLAY', GENERAL_START_ACTION: 'GENERAL_START_ACTION', GENERAL_CONTINUOUS_ACTION: 'GENERAL_CONTINUOUS_ACTION', // TODO: Clean these up below because they're not used at this time GENERAL_COMBO_CLASS: 'GENERAL_COMBO_CLASS', GENERAL_STOP_ACTION: 'GENERAL_STOP_ACTION', GENERAL_LOOP: 'GENERAL_LOOP', STYLE_BOX_SHADOW: 'STYLE_BOX_SHADOW' }; const ActionAppliesTo = { ELEMENT: 'ELEMENT', ELEMENT_CLASS: 'ELEMENT_CLASS', TRIGGER_ELEMENT: 'TRIGGER_ELEMENT' }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuaW1hdGlvbi1hY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBY3Rpb25UeXBlQ29uc3RzID0ge1xuICBUUkFOU0ZPUk1fTU9WRTogJ1RSQU5TRk9STV9NT1ZFJyBhcyBjb25zdCxcbiAgVFJBTlNGT1JNX1NDQUxFOiAnVFJBTlNGT1JNX1NDQUxFJyBhcyBjb25zdCxcbiAgVFJBTlNGT1JNX1JPVEFURTogJ1RSQU5TRk9STV9ST1RBVEUnIGFzIGNvbnN0LFxuICBUUkFOU0ZPUk1fU0tFVzogJ1RSQU5TRk9STV9TS0VXJyBhcyBjb25zdCxcbiAgU1RZTEVfT1BBQ0lUWTogJ1NUWUxFX09QQUNJVFknIGFzIGNvbnN0LFxuICBTVFlMRV9TSVpFOiAnU1RZTEVfU0laRScgYXMgY29uc3QsXG4gIFNUWUxFX0ZJTFRFUjogJ1NUWUxFX0ZJTFRFUicgYXMgY29uc3QsXG4gIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiAnU1RZTEVfRk9OVF9WQVJJQVRJT04nIGFzIGNvbnN0LFxuICBTVFlMRV9CQUNLR1JPVU5EX0NPTE9SOiAnU1RZTEVfQkFDS0dST1VORF9DT0xPUicgYXMgY29uc3QsXG4gIFNUWUxFX0JPUkRFUjogJ1NUWUxFX0JPUkRFUicgYXMgY29uc3QsXG4gIFNUWUxFX1RFWFRfQ09MT1I6ICdTVFlMRV9URVhUX0NPTE9SJyBhcyBjb25zdCxcbiAgT0JKRUNUX1ZBTFVFOiAnT0JKRUNUX1ZBTFVFJyBhcyBjb25zdCxcbiAgUExVR0lOX0xPVFRJRTogJ1BMVUdJTl9MT1RUSUUnIGFzIGNvbnN0LFxuICBQTFVHSU5fU1BMSU5FOiAnUExVR0lOX1NQTElORScgYXMgY29uc3QsXG4gIFBMVUdJTl9SSVZFOiAnUExVR0lOX1JJVkUnIGFzIGNvbnN0LFxuICBQTFVHSU5fVkFSSUFCTEU6ICdQTFVHSU5fVkFSSUFCTEUnIGFzIGNvbnN0LFxuICBHRU5FUkFMX0RJU1BMQVk6ICdHRU5FUkFMX0RJU1BMQVknIGFzIGNvbnN0LFxuICBHRU5FUkFMX1NUQVJUX0FDVElPTjogJ0dFTkVSQUxfU1RBUlRfQUNUSU9OJyBhcyBjb25zdCxcbiAgR0VORVJBTF9DT05USU5VT1VTX0FDVElPTjogJ0dFTkVSQUxfQ09OVElOVU9VU19BQ1RJT04nIGFzIGNvbnN0LFxuXG4gIC8vIFRPRE86IENsZWFuIHRoZXNlIHVwIGJlbG93IGJlY2F1c2UgdGhleSdyZSBub3QgdXNlZCBhdCB0aGlzIHRpbWVcbiAgR0VORVJBTF9DT01CT19DTEFTUzogJ0dFTkVSQUxfQ09NQk9fQ0xBU1MnIGFzIGNvbnN0LFxuICBHRU5FUkFMX1NUT1BfQUNUSU9OOiAnR0VORVJBTF9TVE9QX0FDVElPTicgYXMgY29uc3QsXG4gIEdFTkVSQUxfTE9PUDogJ0dFTkVSQUxfTE9PUCcgYXMgY29uc3QsXG4gIFNUWUxFX0JPWF9TSEFET1c6ICdTVFlMRV9CT1hfU0hBRE9XJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblR5cGVJZFR5cGUgPSBrZXlvZiB0eXBlb2YgQWN0aW9uVHlwZUNvbnN0cztcblxuZXhwb3J0IGNvbnN0IEFjdGlvbkFwcGxpZXNUbyA9IHtcbiAgRUxFTUVOVDogJ0VMRU1FTlQnIGFzIGNvbnN0LFxuICBFTEVNRU5UX0NMQVNTOiAnRUxFTUVOVF9DTEFTUycgYXMgY29uc3QsXG4gIFRSSUdHRVJfRUxFTUVOVDogJ1RSSUdHRVJfRUxFTUVOVCcgYXMgY29uc3QsXG59IGFzIGNvbnN0O1xuIl0sIm5hbWVzIjpbIkFjdGlvbkFwcGxpZXNUbyIsIkFjdGlvblR5cGVDb25zdHMiLCJUUkFOU0ZPUk1fTU9WRSIsIlRSQU5TRk9STV9TQ0FMRSIsIlRSQU5TRk9STV9ST1RBVEUiLCJUUkFOU0ZPUk1fU0tFVyIsIlNUWUxFX09QQUNJVFkiLCJTVFlMRV9TSVpFIiwiU1RZTEVfRklMVEVSIiwiU1RZTEVfRk9OVF9WQVJJQVRJT04iLCJTVFlMRV9CQUNLR1JPVU5EX0NPTE9SIiwiU1RZTEVfQk9SREVSIiwiU1RZTEVfVEVYVF9DT0xPUiIsIk9CSkVDVF9WQUxVRSIsIlBMVUdJTl9MT1RUSUUiLCJQTFVHSU5fU1BMSU5FIiwiUExVR0lOX1JJVkUiLCJQTFVHSU5fVkFSSUFCTEUiLCJHRU5FUkFMX0RJU1BMQVkiLCJHRU5FUkFMX1NUQVJUX0FDVElPTiIsIkdFTkVSQUxfQ09OVElOVU9VU19BQ1RJT04iLCJHRU5FUkFMX0NPTUJPX0NMQVNTIiwiR0VORVJBTF9TVE9QX0FDVElPTiIsIkdFTkVSQUxfTE9PUCIsIlNUWUxFX0JPWF9TSEFET1ciLCJFTEVNRU5UIiwiRUxFTUVOVF9DTEFTUyIsIlRSSUdHRVJfRUxFTUVOVCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUE4QmFBLGVBQWU7ZUFBZkE7O0lBOUJBQyxnQkFBZ0I7ZUFBaEJBOzs7QUFBTixNQUFNQSxtQkFBbUI7SUFDOUJDLGdCQUFnQjtJQUNoQkMsaUJBQWlCO0lBQ2pCQyxrQkFBa0I7SUFDbEJDLGdCQUFnQjtJQUNoQkMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLGNBQWM7SUFDZEMsc0JBQXNCO0lBQ3RCQyx3QkFBd0I7SUFDeEJDLGNBQWM7SUFDZEMsa0JBQWtCO0lBQ2xCQyxjQUFjO0lBQ2RDLGVBQWU7SUFDZkMsZUFBZTtJQUNmQyxhQUFhO0lBQ2JDLGlCQUFpQjtJQUNqQkMsaUJBQWlCO0lBQ2pCQyxzQkFBc0I7SUFDdEJDLDJCQUEyQjtJQUUzQixtRUFBbUU7SUFDbkVDLHFCQUFxQjtJQUNyQkMscUJBQXFCO0lBQ3JCQyxjQUFjO0lBQ2RDLGtCQUFrQjtBQUNwQjtBQUlPLE1BQU14QixrQkFBa0I7SUFDN0J5QixTQUFTO0lBQ1RDLGVBQWU7SUFDZkMsaUJBQWlCO0FBQ25CIn0= }), 7087: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ActionTypeConsts: function() { return _animationactions.ActionTypeConsts; }, IX2EngineActionTypes: function() { return _IX2EngineActionTypes; }, IX2EngineConstants: function() { return _IX2EngineConstants; }, QuickEffectIds: function() { return _triggerevents.QuickEffectIds; } }); const _triggerevents = _export_star(__webpack_require__(1833), exports); const _animationactions = _export_star(__webpack_require__(262), exports); _export_star(__webpack_require__(8704), exports); _export_star(__webpack_require__(3213), exports); const _IX2EngineActionTypes = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8023)); const _IX2EngineConstants = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2686)); function _export_star(from, to) { Object.keys(from).forEach(function(k) { if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { Object.defineProperty(to, k, { enumerable: true, get: function() { return from[k]; } }); } }); return from; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHJpZ2dlci1ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9hbmltYXRpb24tYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3RyaWdnZXItaW50ZXJhY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vcmVkdWNlZC1tb3Rpb24nO1xuXG5pbXBvcnQgKiBhcyBJWDJFbmdpbmVBY3Rpb25UeXBlcyBmcm9tICcuL0lYMkVuZ2luZUFjdGlvblR5cGVzJztcbmltcG9ydCAqIGFzIElYMkVuZ2luZUNvbnN0YW50cyBmcm9tICcuL0lYMkVuZ2luZUNvbnN0YW50cyc7XG5leHBvcnQge0lYMkVuZ2luZUFjdGlvblR5cGVzLCBJWDJFbmdpbmVDb25zdGFudHN9O1xuXG5leHBvcnQge0FjdGlvblR5cGVDb25zdHN9IGZyb20gJy4vYW5pbWF0aW9uLWFjdGlvbnMnO1xuZXhwb3J0IHtRdWlja0VmZmVjdElkc30gZnJvbSAnLi90cmlnZ2VyLWV2ZW50cyc7XG4iXSwibmFtZXMiOlsiQWN0aW9uVHlwZUNvbnN0cyIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiUXVpY2tFZmZlY3RJZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBU1FBLGdCQUFnQjtlQUFoQkEsa0NBQWdCOztJQUZoQkMsb0JBQW9CO2VBQXBCQTs7SUFBc0JDLGtCQUFrQjtlQUFsQkE7O0lBR3RCQyxjQUFjO2VBQWRBLDZCQUFjOzs7NENBVlI7K0NBQ0E7cUJBQ0E7cUJBQ0E7OEVBRXdCOzRFQUNGIn0= }), 3213: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ReducedMotionTypes", ({ enumerable: true, get: function() { return ReducedMotionTypes; } })); const _animationactions = __webpack_require__(262); const { TRANSFORM_MOVE, TRANSFORM_SCALE, TRANSFORM_ROTATE, TRANSFORM_SKEW, STYLE_SIZE, STYLE_FILTER, STYLE_FONT_VARIATION } = _animationactions.ActionTypeConsts; const ReducedMotionTypes = { [TRANSFORM_MOVE]: true, [TRANSFORM_SCALE]: true, [TRANSFORM_ROTATE]: true, [TRANSFORM_SKEW]: true, [STYLE_SIZE]: true, [STYLE_FILTER]: true, [STYLE_FONT_VARIATION]: true }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlZHVjZWQtbW90aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9uVHlwZUNvbnN0c30gZnJvbSAnLi9hbmltYXRpb24tYWN0aW9ucyc7XG5cbmNvbnN0IHtcbiAgVFJBTlNGT1JNX01PVkUsXG4gIFRSQU5TRk9STV9TQ0FMRSxcbiAgVFJBTlNGT1JNX1JPVEFURSxcbiAgVFJBTlNGT1JNX1NLRVcsXG4gIFNUWUxFX1NJWkUsXG4gIFNUWUxFX0ZJTFRFUixcbiAgU1RZTEVfRk9OVF9WQVJJQVRJT04sXG59ID0gQWN0aW9uVHlwZUNvbnN0cztcblxuLyoqXG4gKiBSZWR1Y2VkIE1vdGlvbjogQWN0aW9uIHR5cGVzIHRvIGJ5cGFzcyBkdXJpbmcgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gXG4gKi9cblxuZXhwb3J0IGNvbnN0IFJlZHVjZWRNb3Rpb25UeXBlcyA9IHtcbiAgW1RSQU5TRk9STV9NT1ZFXTogdHJ1ZSxcbiAgW1RSQU5TRk9STV9TQ0FMRV06IHRydWUsXG4gIFtUUkFOU0ZPUk1fUk9UQVRFXTogdHJ1ZSxcbiAgW1RSQU5TRk9STV9TS0VXXTogdHJ1ZSxcbiAgW1NUWUxFX1NJWkVdOiB0cnVlLFxuICBbU1RZTEVfRklMVEVSXTogdHJ1ZSxcbiAgW1NUWUxFX0ZPTlRfVkFSSUFUSU9OXTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG4iXSwibmFtZXMiOlsiUmVkdWNlZE1vdGlvblR5cGVzIiwiVFJBTlNGT1JNX01PVkUiLCJUUkFOU0ZPUk1fU0NBTEUiLCJUUkFOU0ZPUk1fUk9UQVRFIiwiVFJBTlNGT1JNX1NLRVciLCJTVFlMRV9TSVpFIiwiU1RZTEVfRklMVEVSIiwiU1RZTEVfRk9OVF9WQVJJQVRJT04iLCJBY3Rpb25UeXBlQ29uc3RzIl0sIm1hcHBpbmdzIjoiOzs7OytCQWdCYUE7OztlQUFBQTs7O2tDQWhCa0I7QUFFL0IsTUFBTSxFQUNKQyxjQUFjLEVBQ2RDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxjQUFjLEVBQ2RDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxvQkFBb0IsRUFDckIsR0FBR0Msa0NBQWdCO0FBTWIsTUFBTVIscUJBQXFCO0lBQ2hDLENBQUNDLGVBQWUsRUFBRTtJQUNsQixDQUFDQyxnQkFBZ0IsRUFBRTtJQUNuQixDQUFDQyxpQkFBaUIsRUFBRTtJQUNwQixDQUFDQyxlQUFlLEVBQUU7SUFDbEIsQ0FBQ0MsV0FBVyxFQUFFO0lBQ2QsQ0FBQ0MsYUFBYSxFQUFFO0lBQ2hCLENBQUNDLHFCQUFxQixFQUFFO0FBQzFCIn0= }), 1833: (function (__unused_webpack_module, exports) { "use strict"; /** * Event Type IDs */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { EventAppliesTo: function() { return EventAppliesTo; }, EventBasedOn: function() { return EventBasedOn; }, EventContinuousMouseAxes: function() { return EventContinuousMouseAxes; }, EventLimitAffectedElements: function() { return EventLimitAffectedElements; }, EventTypeConsts: function() { return EventTypeConsts; }, QuickEffectDirectionConsts: function() { return QuickEffectDirectionConsts; }, QuickEffectIds: function() { return QuickEffectIds; } }); const EventTypeConsts = { NAVBAR_OPEN: 'NAVBAR_OPEN', NAVBAR_CLOSE: 'NAVBAR_CLOSE', TAB_ACTIVE: 'TAB_ACTIVE', TAB_INACTIVE: 'TAB_INACTIVE', SLIDER_ACTIVE: 'SLIDER_ACTIVE', SLIDER_INACTIVE: 'SLIDER_INACTIVE', DROPDOWN_OPEN: 'DROPDOWN_OPEN', DROPDOWN_CLOSE: 'DROPDOWN_CLOSE', MOUSE_CLICK: 'MOUSE_CLICK', MOUSE_SECOND_CLICK: 'MOUSE_SECOND_CLICK', MOUSE_DOWN: 'MOUSE_DOWN', MOUSE_UP: 'MOUSE_UP', MOUSE_OVER: 'MOUSE_OVER', MOUSE_OUT: 'MOUSE_OUT', MOUSE_MOVE: 'MOUSE_MOVE', MOUSE_MOVE_IN_VIEWPORT: 'MOUSE_MOVE_IN_VIEWPORT', SCROLL_INTO_VIEW: 'SCROLL_INTO_VIEW', SCROLL_OUT_OF_VIEW: 'SCROLL_OUT_OF_VIEW', SCROLLING_IN_VIEW: 'SCROLLING_IN_VIEW', ECOMMERCE_CART_OPEN: 'ECOMMERCE_CART_OPEN', ECOMMERCE_CART_CLOSE: 'ECOMMERCE_CART_CLOSE', PAGE_START: 'PAGE_START', PAGE_FINISH: 'PAGE_FINISH', PAGE_SCROLL_UP: 'PAGE_SCROLL_UP', PAGE_SCROLL_DOWN: 'PAGE_SCROLL_DOWN', PAGE_SCROLL: 'PAGE_SCROLL' }; const EventAppliesTo = { ELEMENT: 'ELEMENT', CLASS: 'CLASS', PAGE: 'PAGE' }; const EventBasedOn = { ELEMENT: 'ELEMENT', VIEWPORT: 'VIEWPORT' }; const EventContinuousMouseAxes = { X_AXIS: 'X_AXIS', Y_AXIS: 'Y_AXIS' }; const EventLimitAffectedElements = { CHILDREN: 'CHILDREN', SIBLINGS: 'SIBLINGS', IMMEDIATE_CHILDREN: 'IMMEDIATE_CHILDREN' }; const QuickEffectIds = { FADE_EFFECT: 'FADE_EFFECT', SLIDE_EFFECT: 'SLIDE_EFFECT', GROW_EFFECT: 'GROW_EFFECT', SHRINK_EFFECT: 'SHRINK_EFFECT', SPIN_EFFECT: 'SPIN_EFFECT', FLY_EFFECT: 'FLY_EFFECT', POP_EFFECT: 'POP_EFFECT', FLIP_EFFECT: 'FLIP_EFFECT', JIGGLE_EFFECT: 'JIGGLE_EFFECT', PULSE_EFFECT: 'PULSE_EFFECT', DROP_EFFECT: 'DROP_EFFECT', BLINK_EFFECT: 'BLINK_EFFECT', BOUNCE_EFFECT: 'BOUNCE_EFFECT', FLIP_LEFT_TO_RIGHT_EFFECT: 'FLIP_LEFT_TO_RIGHT_EFFECT', FLIP_RIGHT_TO_LEFT_EFFECT: 'FLIP_RIGHT_TO_LEFT_EFFECT', RUBBER_BAND_EFFECT: 'RUBBER_BAND_EFFECT', JELLO_EFFECT: 'JELLO_EFFECT', GROW_BIG_EFFECT: 'GROW_BIG_EFFECT', SHRINK_BIG_EFFECT: 'SHRINK_BIG_EFFECT', PLUGIN_LOTTIE_EFFECT: 'PLUGIN_LOTTIE_EFFECT' }; const QuickEffectDirectionConsts = { LEFT: 'LEFT', RIGHT: 'RIGHT', BOTTOM: 'BOTTOM', TOP: 'TOP', BOTTOM_LEFT: 'BOTTOM_LEFT', BOTTOM_RIGHT: 'BOTTOM_RIGHT', TOP_RIGHT: 'TOP_RIGHT', TOP_LEFT: 'TOP_LEFT', CLOCKWISE: 'CLOCKWISE', COUNTER_CLOCKWISE: 'COUNTER_CLOCKWISE' }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyaWdnZXItZXZlbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgVHlwZSBJRHNcbiAqL1xuXG5leHBvcnQgY29uc3QgRXZlbnRUeXBlQ29uc3RzID0ge1xuICBOQVZCQVJfT1BFTjogJ05BVkJBUl9PUEVOJyBhcyBjb25zdCxcbiAgTkFWQkFSX0NMT1NFOiAnTkFWQkFSX0NMT1NFJyBhcyBjb25zdCxcbiAgVEFCX0FDVElWRTogJ1RBQl9BQ1RJVkUnIGFzIGNvbnN0LFxuICBUQUJfSU5BQ1RJVkU6ICdUQUJfSU5BQ1RJVkUnIGFzIGNvbnN0LFxuICBTTElERVJfQUNUSVZFOiAnU0xJREVSX0FDVElWRScgYXMgY29uc3QsXG4gIFNMSURFUl9JTkFDVElWRTogJ1NMSURFUl9JTkFDVElWRScgYXMgY29uc3QsXG4gIERST1BET1dOX09QRU46ICdEUk9QRE9XTl9PUEVOJyBhcyBjb25zdCxcbiAgRFJPUERPV05fQ0xPU0U6ICdEUk9QRE9XTl9DTE9TRScgYXMgY29uc3QsXG4gIE1PVVNFX0NMSUNLOiAnTU9VU0VfQ0xJQ0snIGFzIGNvbnN0LFxuICBNT1VTRV9TRUNPTkRfQ0xJQ0s6ICdNT1VTRV9TRUNPTkRfQ0xJQ0snIGFzIGNvbnN0LFxuICBNT1VTRV9ET1dOOiAnTU9VU0VfRE9XTicgYXMgY29uc3QsXG4gIE1PVVNFX1VQOiAnTU9VU0VfVVAnIGFzIGNvbnN0LFxuICBNT1VTRV9PVkVSOiAnTU9VU0VfT1ZFUicgYXMgY29uc3QsXG4gIE1PVVNFX09VVDogJ01PVVNFX09VVCcgYXMgY29uc3QsXG4gIE1PVVNFX01PVkU6ICdNT1VTRV9NT1ZFJyBhcyBjb25zdCxcbiAgTU9VU0VfTU9WRV9JTl9WSUVXUE9SVDogJ01PVVNFX01PVkVfSU5fVklFV1BPUlQnIGFzIGNvbnN0LFxuICBTQ1JPTExfSU5UT19WSUVXOiAnU0NST0xMX0lOVE9fVklFVycgYXMgY29uc3QsXG4gIFNDUk9MTF9PVVRfT0ZfVklFVzogJ1NDUk9MTF9PVVRfT0ZfVklFVycgYXMgY29uc3QsXG4gIFNDUk9MTElOR19JTl9WSUVXOiAnU0NST0xMSU5HX0lOX1ZJRVcnIGFzIGNvbnN0LFxuICBFQ09NTUVSQ0VfQ0FSVF9PUEVOOiAnRUNPTU1FUkNFX0NBUlRfT1BFTicgYXMgY29uc3QsXG4gIEVDT01NRVJDRV9DQVJUX0NMT1NFOiAnRUNPTU1FUkNFX0NBUlRfQ0xPU0UnIGFzIGNvbnN0LFxuICBQQUdFX1NUQVJUOiAnUEFHRV9TVEFSVCcgYXMgY29uc3QsXG4gIFBBR0VfRklOSVNIOiAnUEFHRV9GSU5JU0gnIGFzIGNvbnN0LFxuICBQQUdFX1NDUk9MTF9VUDogJ1BBR0VfU0NST0xMX1VQJyBhcyBjb25zdCxcbiAgUEFHRV9TQ1JPTExfRE9XTjogJ1BBR0VfU0NST0xMX0RPV04nIGFzIGNvbnN0LFxuICBQQUdFX1NDUk9MTDogJ1BBR0VfU0NST0xMJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogRXZlbnQgQ29uZmlnIEVudW1zXG4gKi9cblxuZXhwb3J0IGNvbnN0IEV2ZW50QXBwbGllc1RvID0ge1xuICBFTEVNRU5UOiAnRUxFTUVOVCcgYXMgY29uc3QsXG4gIENMQVNTOiAnQ0xBU1MnIGFzIGNvbnN0LFxuICBQQUdFOiAnUEFHRScgYXMgY29uc3QsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgRXZlbnRCYXNlZE9uID0ge1xuICBFTEVNRU5UOiAnRUxFTUVOVCcgYXMgY29uc3QsXG4gIFZJRVdQT1JUOiAnVklFV1BPUlQnIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEV2ZW50Q29udGludW91c01vdXNlQXhlcyA9IHtcbiAgWF9BWElTOiAnWF9BWElTJyBhcyBjb25zdCxcbiAgWV9BWElTOiAnWV9BWElTJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBFdmVudExpbWl0QWZmZWN0ZWRFbGVtZW50cyA9IHtcbiAgQ0hJTERSRU46ICdDSElMRFJFTicgYXMgY29uc3QsXG4gIFNJQkxJTkdTOiAnU0lCTElOR1MnIGFzIGNvbnN0LFxuICBJTU1FRElBVEVfQ0hJTERSRU46ICdJTU1FRElBVEVfQ0hJTERSRU4nIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBRdWljayBFZmZlY3QgRW51bXNcbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrRWZmZWN0SWRzID0ge1xuICBGQURFX0VGRkVDVDogJ0ZBREVfRUZGRUNUJyBhcyBjb25zdCxcbiAgU0xJREVfRUZGRUNUOiAnU0xJREVfRUZGRUNUJyBhcyBjb25zdCxcbiAgR1JPV19FRkZFQ1Q6ICdHUk9XX0VGRkVDVCcgYXMgY29uc3QsXG4gIFNIUklOS19FRkZFQ1Q6ICdTSFJJTktfRUZGRUNUJyBhcyBjb25zdCxcbiAgU1BJTl9FRkZFQ1Q6ICdTUElOX0VGRkVDVCcgYXMgY29uc3QsXG4gIEZMWV9FRkZFQ1Q6ICdGTFlfRUZGRUNUJyBhcyBjb25zdCxcbiAgUE9QX0VGRkVDVDogJ1BPUF9FRkZFQ1QnIGFzIGNvbnN0LFxuICBGTElQX0VGRkVDVDogJ0ZMSVBfRUZGRUNUJyBhcyBjb25zdCxcbiAgSklHR0xFX0VGRkVDVDogJ0pJR0dMRV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBQVUxTRV9FRkZFQ1Q6ICdQVUxTRV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBEUk9QX0VGRkVDVDogJ0RST1BfRUZGRUNUJyBhcyBjb25zdCxcbiAgQkxJTktfRUZGRUNUOiAnQkxJTktfRUZGRUNUJyBhcyBjb25zdCxcbiAgQk9VTkNFX0VGRkVDVDogJ0JPVU5DRV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBGTElQX0xFRlRfVE9fUklHSFRfRUZGRUNUOiAnRkxJUF9MRUZUX1RPX1JJR0hUX0VGRkVDVCcgYXMgY29uc3QsXG4gIEZMSVBfUklHSFRfVE9fTEVGVF9FRkZFQ1Q6ICdGTElQX1JJR0hUX1RPX0xFRlRfRUZGRUNUJyBhcyBjb25zdCxcbiAgUlVCQkVSX0JBTkRfRUZGRUNUOiAnUlVCQkVSX0JBTkRfRUZGRUNUJyBhcyBjb25zdCxcbiAgSkVMTE9fRUZGRUNUOiAnSkVMTE9fRUZGRUNUJyBhcyBjb25zdCxcbiAgR1JPV19CSUdfRUZGRUNUOiAnR1JPV19CSUdfRUZGRUNUJyBhcyBjb25zdCxcbiAgU0hSSU5LX0JJR19FRkZFQ1Q6ICdTSFJJTktfQklHX0VGRkVDVCcgYXMgY29uc3QsXG4gIFBMVUdJTl9MT1RUSUVfRUZGRUNUOiAnUExVR0lOX0xPVFRJRV9FRkZFQ1QnIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBRdWljayBFZmZlY3QgRGlyZWN0aW9uIEVudW1zXG4gKi9cbmV4cG9ydCBjb25zdCBRdWlja0VmZmVjdERpcmVjdGlvbkNvbnN0cyA9IHtcbiAgTEVGVDogJ0xFRlQnIGFzIGNvbnN0LFxuICBSSUdIVDogJ1JJR0hUJyBhcyBjb25zdCxcbiAgQk9UVE9NOiAnQk9UVE9NJyBhcyBjb25zdCxcbiAgVE9QOiAnVE9QJyBhcyBjb25zdCxcbiAgQk9UVE9NX0xFRlQ6ICdCT1RUT01fTEVGVCcgYXMgY29uc3QsXG4gIEJPVFRPTV9SSUdIVDogJ0JPVFRPTV9SSUdIVCcgYXMgY29uc3QsXG4gIFRPUF9SSUdIVDogJ1RPUF9SSUdIVCcgYXMgY29uc3QsXG4gIFRPUF9MRUZUOiAnVE9QX0xFRlQnIGFzIGNvbnN0LFxuICBDTE9DS1dJU0U6ICdDTE9DS1dJU0UnIGFzIGNvbnN0LFxuICBDT1VOVEVSX0NMT0NLV0lTRTogJ0NPVU5URVJfQ0xPQ0tXSVNFJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG4iXSwibmFtZXMiOlsiRXZlbnRBcHBsaWVzVG8iLCJFdmVudEJhc2VkT24iLCJFdmVudENvbnRpbnVvdXNNb3VzZUF4ZXMiLCJFdmVudExpbWl0QWZmZWN0ZWRFbGVtZW50cyIsIkV2ZW50VHlwZUNvbnN0cyIsIlF1aWNrRWZmZWN0RGlyZWN0aW9uQ29uc3RzIiwiUXVpY2tFZmZlY3RJZHMiLCJOQVZCQVJfT1BFTiIsIk5BVkJBUl9DTE9TRSIsIlRBQl9BQ1RJVkUiLCJUQUJfSU5BQ1RJVkUiLCJTTElERVJfQUNUSVZFIiwiU0xJREVSX0lOQUNUSVZFIiwiRFJPUERPV05fT1BFTiIsIkRST1BET1dOX0NMT1NFIiwiTU9VU0VfQ0xJQ0siLCJNT1VTRV9TRUNPTkRfQ0xJQ0siLCJNT1VTRV9ET1dOIiwiTU9VU0VfVVAiLCJNT1VTRV9PVkVSIiwiTU9VU0VfT1VUIiwiTU9VU0VfTU9WRSIsIk1PVVNFX01PVkVfSU5fVklFV1BPUlQiLCJTQ1JPTExfSU5UT19WSUVXIiwiU0NST0xMX09VVF9PRl9WSUVXIiwiU0NST0xMSU5HX0lOX1ZJRVciLCJFQ09NTUVSQ0VfQ0FSVF9PUEVOIiwiRUNPTU1FUkNFX0NBUlRfQ0xPU0UiLCJQQUdFX1NUQVJUIiwiUEFHRV9GSU5JU0giLCJQQUdFX1NDUk9MTF9VUCIsIlBBR0VfU0NST0xMX0RPV04iLCJQQUdFX1NDUk9MTCIsIkVMRU1FTlQiLCJDTEFTUyIsIlBBR0UiLCJWSUVXUE9SVCIsIlhfQVhJUyIsIllfQVhJUyIsIkNISUxEUkVOIiwiU0lCTElOR1MiLCJJTU1FRElBVEVfQ0hJTERSRU4iLCJGQURFX0VGRkVDVCIsIlNMSURFX0VGRkVDVCIsIkdST1dfRUZGRUNUIiwiU0hSSU5LX0VGRkVDVCIsIlNQSU5fRUZGRUNUIiwiRkxZX0VGRkVDVCIsIlBPUF9FRkZFQ1QiLCJGTElQX0VGRkVDVCIsIkpJR0dMRV9FRkZFQ1QiLCJQVUxTRV9FRkZFQ1QiLCJEUk9QX0VGRkVDVCIsIkJMSU5LX0VGRkVDVCIsIkJPVU5DRV9FRkZFQ1QiLCJGTElQX0xFRlRfVE9fUklHSFRfRUZGRUNUIiwiRkxJUF9SSUdIVF9UT19MRUZUX0VGRkVDVCIsIlJVQkJFUl9CQU5EX0VGRkVDVCIsIkpFTExPX0VGRkVDVCIsIkdST1dfQklHX0VGRkVDVCIsIlNIUklOS19CSUdfRUZGRUNUIiwiUExVR0lOX0xPVFRJRV9FRkZFQ1QiLCJMRUZUIiwiUklHSFQiLCJCT1RUT00iLCJUT1AiLCJCT1RUT01fTEVGVCIsIkJPVFRPTV9SSUdIVCIsIlRPUF9SSUdIVCIsIlRPUF9MRUZUIiwiQ0xPQ0tXSVNFIiwiQ09VTlRFUl9DTE9DS1dJU0UiXSwibWFwcGluZ3MiOiJBQUFBOztDQUVDOzs7Ozs7Ozs7OztJQW1DWUEsY0FBYztlQUFkQTs7SUFNQUMsWUFBWTtlQUFaQTs7SUFLQUMsd0JBQXdCO2VBQXhCQTs7SUFLQUMsMEJBQTBCO2VBQTFCQTs7SUFqREFDLGVBQWU7ZUFBZkE7O0lBb0ZBQywwQkFBMEI7ZUFBMUJBOztJQTFCQUMsY0FBYztlQUFkQTs7O0FBMUROLE1BQU1GLGtCQUFrQjtJQUM3QkcsYUFBYTtJQUNiQyxjQUFjO0lBQ2RDLFlBQVk7SUFDWkMsY0FBYztJQUNkQyxlQUFlO0lBQ2ZDLGlCQUFpQjtJQUNqQkMsZUFBZTtJQUNmQyxnQkFBZ0I7SUFDaEJDLGFBQWE7SUFDYkMsb0JBQW9CO0lBQ3BCQyxZQUFZO0lBQ1pDLFVBQVU7SUFDVkMsWUFBWTtJQUNaQyxXQUFXO0lBQ1hDLFlBQVk7SUFDWkMsd0JBQXdCO0lBQ3hCQyxrQkFBa0I7SUFDbEJDLG9CQUFvQjtJQUNwQkMsbUJBQW1CO0lBQ25CQyxxQkFBcUI7SUFDckJDLHNCQUFzQjtJQUN0QkMsWUFBWTtJQUNaQyxhQUFhO0lBQ2JDLGdCQUFnQjtJQUNoQkMsa0JBQWtCO0lBQ2xCQyxhQUFhO0FBQ2Y7QUFNTyxNQUFNaEMsaUJBQWlCO0lBQzVCaUMsU0FBUztJQUNUQyxPQUFPO0lBQ1BDLE1BQU07QUFDUjtBQUVPLE1BQU1sQyxlQUFlO0lBQzFCZ0MsU0FBUztJQUNURyxVQUFVO0FBQ1o7QUFFTyxNQUFNbEMsMkJBQTJCO0lBQ3RDbUMsUUFBUTtJQUNSQyxRQUFRO0FBQ1Y7QUFFTyxNQUFNbkMsNkJBQTZCO0lBQ3hDb0MsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLG9CQUFvQjtBQUN0QjtBQUtPLE1BQU1uQyxpQkFBaUI7SUFDNUJvQyxhQUFhO0lBQ2JDLGNBQWM7SUFDZEMsYUFBYTtJQUNiQyxlQUFlO0lBQ2ZDLGFBQWE7SUFDYkMsWUFBWTtJQUNaQyxZQUFZO0lBQ1pDLGFBQWE7SUFDYkMsZUFBZTtJQUNmQyxjQUFjO0lBQ2RDLGFBQWE7SUFDYkMsY0FBYztJQUNkQyxlQUFlO0lBQ2ZDLDJCQUEyQjtJQUMzQkMsMkJBQTJCO0lBQzNCQyxvQkFBb0I7SUFDcEJDLGNBQWM7SUFDZEMsaUJBQWlCO0lBQ2pCQyxtQkFBbUI7SUFDbkJDLHNCQUFzQjtBQUN4QjtBQUtPLE1BQU14RCw2QkFBNkI7SUFDeEN5RCxNQUFNO0lBQ05DLE9BQU87SUFDUEMsUUFBUTtJQUNSQyxLQUFLO0lBQ0xDLGFBQWE7SUFDYkMsY0FBYztJQUNkQyxXQUFXO0lBQ1hDLFVBQVU7SUFDVkMsV0FBVztJQUNYQyxtQkFBbUI7QUFDckIifQ== }), 8704: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "InteractionTypeConsts", ({ enumerable: true, get: function() { return InteractionTypeConsts; } })); const InteractionTypeConsts = { MOUSE_CLICK_INTERACTION: 'MOUSE_CLICK_INTERACTION', MOUSE_HOVER_INTERACTION: 'MOUSE_HOVER_INTERACTION', MOUSE_MOVE_INTERACTION: 'MOUSE_MOVE_INTERACTION', SCROLL_INTO_VIEW_INTERACTION: 'SCROLL_INTO_VIEW_INTERACTION', SCROLLING_IN_VIEW_INTERACTION: 'SCROLLING_IN_VIEW_INTERACTION', MOUSE_MOVE_IN_VIEWPORT_INTERACTION: 'MOUSE_MOVE_IN_VIEWPORT_INTERACTION', PAGE_IS_SCROLLING_INTERACTION: 'PAGE_IS_SCROLLING_INTERACTION', PAGE_LOAD_INTERACTION: 'PAGE_LOAD_INTERACTION', PAGE_SCROLLED_INTERACTION: 'PAGE_SCROLLED_INTERACTION', NAVBAR_INTERACTION: 'NAVBAR_INTERACTION', DROPDOWN_INTERACTION: 'DROPDOWN_INTERACTION', ECOMMERCE_CART_INTERACTION: 'ECOMMERCE_CART_INTERACTION', TAB_INTERACTION: 'TAB_INTERACTION', SLIDER_INTERACTION: 'SLIDER_INTERACTION' }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyaWdnZXItaW50ZXJhY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBJbnRlcmFjdGlvblR5cGVDb25zdHMgPSB7XG4gIE1PVVNFX0NMSUNLX0lOVEVSQUNUSU9OOiAnTU9VU0VfQ0xJQ0tfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBNT1VTRV9IT1ZFUl9JTlRFUkFDVElPTjogJ01PVVNFX0hPVkVSX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgTU9VU0VfTU9WRV9JTlRFUkFDVElPTjogJ01PVVNFX01PVkVfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBTQ1JPTExfSU5UT19WSUVXX0lOVEVSQUNUSU9OOiAnU0NST0xMX0lOVE9fVklFV19JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFNDUk9MTElOR19JTl9WSUVXX0lOVEVSQUNUSU9OOiAnU0NST0xMSU5HX0lOX1ZJRVdfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBNT1VTRV9NT1ZFX0lOX1ZJRVdQT1JUX0lOVEVSQUNUSU9OOlxuICAgICdNT1VTRV9NT1ZFX0lOX1ZJRVdQT1JUX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgUEFHRV9JU19TQ1JPTExJTkdfSU5URVJBQ1RJT046ICdQQUdFX0lTX1NDUk9MTElOR19JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFBBR0VfTE9BRF9JTlRFUkFDVElPTjogJ1BBR0VfTE9BRF9JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFBBR0VfU0NST0xMRURfSU5URVJBQ1RJT046ICdQQUdFX1NDUk9MTEVEX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgTkFWQkFSX0lOVEVSQUNUSU9OOiAnTkFWQkFSX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgRFJPUERPV05fSU5URVJBQ1RJT046ICdEUk9QRE9XTl9JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIEVDT01NRVJDRV9DQVJUX0lOVEVSQUNUSU9OOiAnRUNPTU1FUkNFX0NBUlRfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBUQUJfSU5URVJBQ1RJT046ICdUQUJfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBTTElERVJfSU5URVJBQ1RJT046ICdTTElERVJfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcbiJdLCJuYW1lcyI6WyJJbnRlcmFjdGlvblR5cGVDb25zdHMiLCJNT1VTRV9DTElDS19JTlRFUkFDVElPTiIsIk1PVVNFX0hPVkVSX0lOVEVSQUNUSU9OIiwiTU9VU0VfTU9WRV9JTlRFUkFDVElPTiIsIlNDUk9MTF9JTlRPX1ZJRVdfSU5URVJBQ1RJT04iLCJTQ1JPTExJTkdfSU5fVklFV19JTlRFUkFDVElPTiIsIk1PVVNFX01PVkVfSU5fVklFV1BPUlRfSU5URVJBQ1RJT04iLCJQQUdFX0lTX1NDUk9MTElOR19JTlRFUkFDVElPTiIsIlBBR0VfTE9BRF9JTlRFUkFDVElPTiIsIlBBR0VfU0NST0xMRURfSU5URVJBQ1RJT04iLCJOQVZCQVJfSU5URVJBQ1RJT04iLCJEUk9QRE9XTl9JTlRFUkFDVElPTiIsIkVDT01NRVJDRV9DQVJUX0lOVEVSQUNUSU9OIiwiVEFCX0lOVEVSQUNUSU9OIiwiU0xJREVSX0lOVEVSQUNUSU9OIl0sIm1hcHBpbmdzIjoiOzs7OytCQUFhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSx3QkFBd0I7SUFDbkNDLHlCQUF5QjtJQUN6QkMseUJBQXlCO0lBQ3pCQyx3QkFBd0I7SUFDeEJDLDhCQUE4QjtJQUM5QkMsK0JBQStCO0lBQy9CQyxvQ0FDRTtJQUNGQywrQkFBK0I7SUFDL0JDLHVCQUF1QjtJQUN2QkMsMkJBQTJCO0lBQzNCQyxvQkFBb0I7SUFDcEJDLHNCQUFzQjtJQUN0QkMsNEJBQTRCO0lBQzVCQyxpQkFBaUI7SUFDakJDLG9CQUFvQjtBQUN0QiJ9 }), 380: (function (__unused_webpack_module, exports) { "use strict"; // Big List of Colors // ------------------ // Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "normalizeColor", ({ enumerable: true, get: function() { return normalizeColor; } })); const colorNamesObj = { aliceblue: '#F0F8FF', antiquewhite: '#FAEBD7', aqua: '#00FFFF', aquamarine: '#7FFFD4', azure: '#F0FFFF', beige: '#F5F5DC', bisque: '#FFE4C4', black: '#000000', blanchedalmond: '#FFEBCD', blue: '#0000FF', blueviolet: '#8A2BE2', brown: '#A52A2A', burlywood: '#DEB887', cadetblue: '#5F9EA0', chartreuse: '#7FFF00', chocolate: '#D2691E', coral: '#FF7F50', cornflowerblue: '#6495ED', cornsilk: '#FFF8DC', crimson: '#DC143C', cyan: '#00FFFF', darkblue: '#00008B', darkcyan: '#008B8B', darkgoldenrod: '#B8860B', darkgray: '#A9A9A9', darkgreen: '#006400', darkgrey: '#A9A9A9', darkkhaki: '#BDB76B', darkmagenta: '#8B008B', darkolivegreen: '#556B2F', darkorange: '#FF8C00', darkorchid: '#9932CC', darkred: '#8B0000', darksalmon: '#E9967A', darkseagreen: '#8FBC8F', darkslateblue: '#483D8B', darkslategray: '#2F4F4F', darkslategrey: '#2F4F4F', darkturquoise: '#00CED1', darkviolet: '#9400D3', deeppink: '#FF1493', deepskyblue: '#00BFFF', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1E90FF', firebrick: '#B22222', floralwhite: '#FFFAF0', forestgreen: '#228B22', fuchsia: '#FF00FF', gainsboro: '#DCDCDC', ghostwhite: '#F8F8FF', gold: '#FFD700', goldenrod: '#DAA520', gray: '#808080', green: '#008000', greenyellow: '#ADFF2F', grey: '#808080', honeydew: '#F0FFF0', hotpink: '#FF69B4', indianred: '#CD5C5C', indigo: '#4B0082', ivory: '#FFFFF0', khaki: '#F0E68C', lavender: '#E6E6FA', lavenderblush: '#FFF0F5', lawngreen: '#7CFC00', lemonchiffon: '#FFFACD', lightblue: '#ADD8E6', lightcoral: '#F08080', lightcyan: '#E0FFFF', lightgoldenrodyellow: '#FAFAD2', lightgray: '#D3D3D3', lightgreen: '#90EE90', lightgrey: '#D3D3D3', lightpink: '#FFB6C1', lightsalmon: '#FFA07A', lightseagreen: '#20B2AA', lightskyblue: '#87CEFA', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#B0C4DE', lightyellow: '#FFFFE0', lime: '#00FF00', limegreen: '#32CD32', linen: '#FAF0E6', magenta: '#FF00FF', maroon: '#800000', mediumaquamarine: '#66CDAA', mediumblue: '#0000CD', mediumorchid: '#BA55D3', mediumpurple: '#9370DB', mediumseagreen: '#3CB371', mediumslateblue: '#7B68EE', mediumspringgreen: '#00FA9A', mediumturquoise: '#48D1CC', mediumvioletred: '#C71585', midnightblue: '#191970', mintcream: '#F5FFFA', mistyrose: '#FFE4E1', moccasin: '#FFE4B5', navajowhite: '#FFDEAD', navy: '#000080', oldlace: '#FDF5E6', olive: '#808000', olivedrab: '#6B8E23', orange: '#FFA500', orangered: '#FF4500', orchid: '#DA70D6', palegoldenrod: '#EEE8AA', palegreen: '#98FB98', paleturquoise: '#AFEEEE', palevioletred: '#DB7093', papayawhip: '#FFEFD5', peachpuff: '#FFDAB9', peru: '#CD853F', pink: '#FFC0CB', plum: '#DDA0DD', powderblue: '#B0E0E6', purple: '#800080', rebeccapurple: '#663399', red: '#FF0000', rosybrown: '#BC8F8F', royalblue: '#4169E1', saddlebrown: '#8B4513', salmon: '#FA8072', sandybrown: '#F4A460', seagreen: '#2E8B57', seashell: '#FFF5EE', sienna: '#A0522D', silver: '#C0C0C0', skyblue: '#87CEEB', slateblue: '#6A5ACD', slategray: '#708090', slategrey: '#708090', snow: '#FFFAFA', springgreen: '#00FF7F', steelblue: '#4682B4', tan: '#D2B48C', teal: '#008080', thistle: '#D8BFD8', tomato: '#FF6347', turquoise: '#40E0D0', violet: '#EE82EE', wheat: '#F5DEB3', white: '#FFFFFF', whitesmoke: '#F5F5F5', yellow: '#FFFF00', yellowgreen: '#9ACD32' }; function normalizeColor(inputColor) { let red; let green; let blue; let alpha = 1; // Default alpha to 1 const rawColor = inputColor.replace(/\s/g, '').toLowerCase(); const namedColor = typeof colorNamesObj[rawColor] === 'string' ? colorNamesObj[rawColor].toLowerCase() : null; const cleanColor = namedColor || rawColor; if (cleanColor.startsWith('#')) { const hex = cleanColor.substring(1); if (hex.length === 3 || hex.length === 4) { red = parseInt(hex[0] + hex[0], 16); green = parseInt(hex[1] + hex[1], 16); blue = parseInt(hex[2] + hex[2], 16); if (hex.length === 4) { alpha = parseInt(hex[3] + hex[3], 16) / 255; } } else if (hex.length === 6 || hex.length === 8) { red = parseInt(hex.substring(0, 2), 16); green = parseInt(hex.substring(2, 4), 16); blue = parseInt(hex.substring(4, 6), 16); if (hex.length === 8) { alpha = parseInt(hex.substring(6, 8), 16) / 255; } } } else if (cleanColor.startsWith('rgba')) { const rgbaValues = cleanColor.match(/rgba\(([^)]+)\)/)[1].split(','); red = parseInt(rgbaValues[0], 10); green = parseInt(rgbaValues[1], 10); blue = parseInt(rgbaValues[2], 10); alpha = parseFloat(rgbaValues[3]); } else if (cleanColor.startsWith('rgb')) { const rgbValues = cleanColor.match(/rgb\(([^)]+)\)/)[1].split(','); red = parseInt(rgbValues[0], 10); green = parseInt(rgbValues[1], 10); blue = parseInt(rgbValues[2], 10); } else if (cleanColor.startsWith('hsla')) { const hslaValues = cleanColor.match(/hsla\(([^)]+)\)/)[1].split(','); const h = parseFloat(hslaValues[0]); const s = parseFloat(hslaValues[1].replace('%', '')) / 100; const l = parseFloat(hslaValues[2].replace('%', '')) / 100; alpha = parseFloat(hslaValues[3]); // Convert HSL to RGB const C = (1 - Math.abs(2 * l - 1)) * s; const X = C * (1 - Math.abs(h / 60 % 2 - 1)); const m = l - C / 2; let R; let G; let B; if (h >= 0 && h < 60) { R = C; G = X; B = 0; } else if (h >= 60 && h < 120) { R = X; G = C; B = 0; } else if (h >= 120 && h < 180) { R = 0; G = C; B = X; } else if (h >= 180 && h < 240) { R = 0; G = X; B = C; } else if (h >= 240 && h < 300) { R = X; G = 0; B = C; } else { R = C; G = 0; B = X; } red = Math.round((R + m) * 255); green = Math.round((G + m) * 255); blue = Math.round((B + m) * 255); } else if (cleanColor.startsWith('hsl')) { const hslValues = cleanColor.match(/hsl\(([^)]+)\)/)[1].split(','); const h = parseFloat(hslValues[0]); const s = parseFloat(hslValues[1].replace('%', '')) / 100; const l = parseFloat(hslValues[2].replace('%', '')) / 100; // Convert HSL to RGB (without alpha) const C = (1 - Math.abs(2 * l - 1)) * s; const X = C * (1 - Math.abs(h / 60 % 2 - 1)); const m = l - C / 2; let R; let G; let B; if (h >= 0 && h < 60) { R = C; G = X; B = 0; } else if (h >= 60 && h < 120) { R = X; G = C; B = 0; } else if (h >= 120 && h < 180) { R = 0; G = C; B = X; } else if (h >= 180 && h < 240) { R = 0; G = X; B = C; } else if (h >= 240 && h < 300) { R = X; G = 0; B = C; } else { R = C; G = 0; B = X; } red = Math.round((R + m) * 255); green = Math.round((G + m) * 255); blue = Math.round((B + m) * 255); } if (Number.isNaN(red) || Number.isNaN(green) || Number.isNaN(blue)) { throw new Error(`Invalid color in [ix2/shared/utils/normalizeColor.js] '${inputColor}'`); } return { red, green, blue, alpha }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vcm1hbGl6ZUNvbG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEJpZyBMaXN0IG9mIENvbG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyNuYW1lZC1jb2xvcnM+XG5jb25zdCBjb2xvck5hbWVzT2JqID0ge1xuICBhbGljZWJsdWU6ICcjRjBGOEZGJyxcbiAgYW50aXF1ZXdoaXRlOiAnI0ZBRUJENycsXG4gIGFxdWE6ICcjMDBGRkZGJyxcbiAgYXF1YW1hcmluZTogJyM3RkZGRDQnLFxuICBhenVyZTogJyNGMEZGRkYnLFxuICBiZWlnZTogJyNGNUY1REMnLFxuICBiaXNxdWU6ICcjRkZFNEM0JyxcbiAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgYmxhbmNoZWRhbG1vbmQ6ICcjRkZFQkNEJyxcbiAgYmx1ZTogJyMwMDAwRkYnLFxuICBibHVldmlvbGV0OiAnIzhBMkJFMicsXG4gIGJyb3duOiAnI0E1MkEyQScsXG4gIGJ1cmx5d29vZDogJyNERUI4ODcnLFxuICBjYWRldGJsdWU6ICcjNUY5RUEwJyxcbiAgY2hhcnRyZXVzZTogJyM3RkZGMDAnLFxuICBjaG9jb2xhdGU6ICcjRDI2OTFFJyxcbiAgY29yYWw6ICcjRkY3RjUwJyxcbiAgY29ybmZsb3dlcmJsdWU6ICcjNjQ5NUVEJyxcbiAgY29ybnNpbGs6ICcjRkZGOERDJyxcbiAgY3JpbXNvbjogJyNEQzE0M0MnLFxuICBjeWFuOiAnIzAwRkZGRicsXG4gIGRhcmtibHVlOiAnIzAwMDA4QicsXG4gIGRhcmtjeWFuOiAnIzAwOEI4QicsXG4gIGRhcmtnb2xkZW5yb2Q6ICcjQjg4NjBCJyxcbiAgZGFya2dyYXk6ICcjQTlBOUE5JyxcbiAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gIGRhcmtncmV5OiAnI0E5QTlBOScsXG4gIGRhcmtraGFraTogJyNCREI3NkInLFxuICBkYXJrbWFnZW50YTogJyM4QjAwOEInLFxuICBkYXJrb2xpdmVncmVlbjogJyM1NTZCMkYnLFxuICBkYXJrb3JhbmdlOiAnI0ZGOEMwMCcsXG4gIGRhcmtvcmNoaWQ6ICcjOTkzMkNDJyxcbiAgZGFya3JlZDogJyM4QjAwMDAnLFxuICBkYXJrc2FsbW9uOiAnI0U5OTY3QScsXG4gIGRhcmtzZWFncmVlbjogJyM4RkJDOEYnLFxuICBkYXJrc2xhdGVibHVlOiAnIzQ4M0Q4QicsXG4gIGRhcmtzbGF0ZWdyYXk6ICcjMkY0RjRGJyxcbiAgZGFya3NsYXRlZ3JleTogJyMyRjRGNEYnLFxuICBkYXJrdHVycXVvaXNlOiAnIzAwQ0VEMScsXG4gIGRhcmt2aW9sZXQ6ICcjOTQwMEQzJyxcbiAgZGVlcHBpbms6ICcjRkYxNDkzJyxcbiAgZGVlcHNreWJsdWU6ICcjMDBCRkZGJyxcbiAgZGltZ3JheTogJyM2OTY5NjknLFxuICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gIGRvZGdlcmJsdWU6ICcjMUU5MEZGJyxcbiAgZmlyZWJyaWNrOiAnI0IyMjIyMicsXG4gIGZsb3JhbHdoaXRlOiAnI0ZGRkFGMCcsXG4gIGZvcmVzdGdyZWVuOiAnIzIyOEIyMicsXG4gIGZ1Y2hzaWE6ICcjRkYwMEZGJyxcbiAgZ2FpbnNib3JvOiAnI0RDRENEQycsXG4gIGdob3N0d2hpdGU6ICcjRjhGOEZGJyxcbiAgZ29sZDogJyNGRkQ3MDAnLFxuICBnb2xkZW5yb2Q6ICcjREFBNTIwJyxcbiAgZ3JheTogJyM4MDgwODAnLFxuICBncmVlbjogJyMwMDgwMDAnLFxuICBncmVlbnllbGxvdzogJyNBREZGMkYnLFxuICBncmV5OiAnIzgwODA4MCcsXG4gIGhvbmV5ZGV3OiAnI0YwRkZGMCcsXG4gIGhvdHBpbms6ICcjRkY2OUI0JyxcbiAgaW5kaWFucmVkOiAnI0NENUM1QycsXG4gIGluZGlnbzogJyM0QjAwODInLFxuICBpdm9yeTogJyNGRkZGRjAnLFxuICBraGFraTogJyNGMEU2OEMnLFxuICBsYXZlbmRlcjogJyNFNkU2RkEnLFxuICBsYXZlbmRlcmJsdXNoOiAnI0ZGRjBGNScsXG4gIGxhd25ncmVlbjogJyM3Q0ZDMDAnLFxuICBsZW1vbmNoaWZmb246ICcjRkZGQUNEJyxcbiAgbGlnaHRibHVlOiAnI0FERDhFNicsXG4gIGxpZ2h0Y29yYWw6ICcjRjA4MDgwJyxcbiAgbGlnaHRjeWFuOiAnI0UwRkZGRicsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI0ZBRkFEMicsXG4gIGxpZ2h0Z3JheTogJyNEM0QzRDMnLFxuICBsaWdodGdyZWVuOiAnIzkwRUU5MCcsXG4gIGxpZ2h0Z3JleTogJyNEM0QzRDMnLFxuICBsaWdodHBpbms6ICcjRkZCNkMxJyxcbiAgbGlnaHRzYWxtb246ICcjRkZBMDdBJyxcbiAgbGlnaHRzZWFncmVlbjogJyMyMEIyQUEnLFxuICBsaWdodHNreWJsdWU6ICcjODdDRUZBJyxcbiAgbGlnaHRzbGF0ZWdyYXk6ICcjNzc4ODk5JyxcbiAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgbGlnaHRzdGVlbGJsdWU6ICcjQjBDNERFJyxcbiAgbGlnaHR5ZWxsb3c6ICcjRkZGRkUwJyxcbiAgbGltZTogJyMwMEZGMDAnLFxuICBsaW1lZ3JlZW46ICcjMzJDRDMyJyxcbiAgbGluZW46ICcjRkFGMEU2JyxcbiAgbWFnZW50YTogJyNGRjAwRkYnLFxuICBtYXJvb246ICcjODAwMDAwJyxcbiAgbWVkaXVtYXF1YW1hcmluZTogJyM2NkNEQUEnLFxuICBtZWRpdW1ibHVlOiAnIzAwMDBDRCcsXG4gIG1lZGl1bW9yY2hpZDogJyNCQTU1RDMnLFxuICBtZWRpdW1wdXJwbGU6ICcjOTM3MERCJyxcbiAgbWVkaXVtc2VhZ3JlZW46ICcjM0NCMzcxJyxcbiAgbWVkaXVtc2xhdGVibHVlOiAnIzdCNjhFRScsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwRkE5QScsXG4gIG1lZGl1bXR1cnF1b2lzZTogJyM0OEQxQ0MnLFxuICBtZWRpdW12aW9sZXRyZWQ6ICcjQzcxNTg1JyxcbiAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gIG1pbnRjcmVhbTogJyNGNUZGRkEnLFxuICBtaXN0eXJvc2U6ICcjRkZFNEUxJyxcbiAgbW9jY2FzaW46ICcjRkZFNEI1JyxcbiAgbmF2YWpvd2hpdGU6ICcjRkZERUFEJyxcbiAgbmF2eTogJyMwMDAwODAnLFxuICBvbGRsYWNlOiAnI0ZERjVFNicsXG4gIG9saXZlOiAnIzgwODAwMCcsXG4gIG9saXZlZHJhYjogJyM2QjhFMjMnLFxuICBvcmFuZ2U6ICcjRkZBNTAwJyxcbiAgb3JhbmdlcmVkOiAnI0ZGNDUwMCcsXG4gIG9yY2hpZDogJyNEQTcwRDYnLFxuICBwYWxlZ29sZGVucm9kOiAnI0VFRThBQScsXG4gIHBhbGVncmVlbjogJyM5OEZCOTgnLFxuICBwYWxldHVycXVvaXNlOiAnI0FGRUVFRScsXG4gIHBhbGV2aW9sZXRyZWQ6ICcjREI3MDkzJyxcbiAgcGFwYXlhd2hpcDogJyNGRkVGRDUnLFxuICBwZWFjaHB1ZmY6ICcjRkZEQUI5JyxcbiAgcGVydTogJyNDRDg1M0YnLFxuICBwaW5rOiAnI0ZGQzBDQicsXG4gIHBsdW06ICcjRERBMEREJyxcbiAgcG93ZGVyYmx1ZTogJyNCMEUwRTYnLFxuICBwdXJwbGU6ICcjODAwMDgwJyxcbiAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICByZWQ6ICcjRkYwMDAwJyxcbiAgcm9zeWJyb3duOiAnI0JDOEY4RicsXG4gIHJveWFsYmx1ZTogJyM0MTY5RTEnLFxuICBzYWRkbGVicm93bjogJyM4QjQ1MTMnLFxuICBzYWxtb246ICcjRkE4MDcyJyxcbiAgc2FuZHlicm93bjogJyNGNEE0NjAnLFxuICBzZWFncmVlbjogJyMyRThCNTcnLFxuICBzZWFzaGVsbDogJyNGRkY1RUUnLFxuICBzaWVubmE6ICcjQTA1MjJEJyxcbiAgc2lsdmVyOiAnI0MwQzBDMCcsXG4gIHNreWJsdWU6ICcjODdDRUVCJyxcbiAgc2xhdGVibHVlOiAnIzZBNUFDRCcsXG4gIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICBzbGF0ZWdyZXk6ICcjNzA4MDkwJyxcbiAgc25vdzogJyNGRkZBRkEnLFxuICBzcHJpbmdncmVlbjogJyMwMEZGN0YnLFxuICBzdGVlbGJsdWU6ICcjNDY4MkI0JyxcbiAgdGFuOiAnI0QyQjQ4QycsXG4gIHRlYWw6ICcjMDA4MDgwJyxcbiAgdGhpc3RsZTogJyNEOEJGRDgnLFxuICB0b21hdG86ICcjRkY2MzQ3JyxcbiAgdHVycXVvaXNlOiAnIzQwRTBEMCcsXG4gIHZpb2xldDogJyNFRTgyRUUnLFxuICB3aGVhdDogJyNGNURFQjMnLFxuICB3aGl0ZTogJyNGRkZGRkYnLFxuICB3aGl0ZXNtb2tlOiAnI0Y1RjVGNScsXG4gIHllbGxvdzogJyNGRkZGMDAnLFxuICB5ZWxsb3dncmVlbjogJyM5QUNEMzInLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbG9yKGlucHV0Q29sb3IpIHtcbiAgbGV0IHJlZDtcbiAgbGV0IGdyZWVuO1xuICBsZXQgYmx1ZTtcbiAgbGV0IGFscGhhID0gMTsgLy8gRGVmYXVsdCBhbHBoYSB0byAxXG4gIGNvbnN0IHJhd0NvbG9yID0gaW5wdXRDb2xvci5yZXBsYWNlKC9cXHMvZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG5hbWVkQ29sb3IgPVxuICAgIHR5cGVvZiBjb2xvck5hbWVzT2JqW3Jhd0NvbG9yXSA9PT0gJ3N0cmluZydcbiAgICAgID8gY29sb3JOYW1lc09ialtyYXdDb2xvcl0udG9Mb3dlckNhc2UoKVxuICAgICAgOiBudWxsO1xuICBjb25zdCBjbGVhbkNvbG9yID0gbmFtZWRDb2xvciB8fCByYXdDb2xvcjtcblxuICBpZiAoY2xlYW5Db2xvci5zdGFydHNXaXRoKCcjJykpIHtcbiAgICBjb25zdCBoZXggPSBjbGVhbkNvbG9yLnN1YnN0cmluZygxKTtcblxuICAgIGlmIChoZXgubGVuZ3RoID09PSAzIHx8IGhleC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHJlZCA9IHBhcnNlSW50KGhleFswXSArIGhleFswXSwgMTYpO1xuICAgICAgZ3JlZW4gPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTtcbiAgICAgIGJsdWUgPSBwYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIDE2KTtcbiAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIGFscGhhID0gcGFyc2VJbnQoaGV4WzNdICsgaGV4WzNdLCAxNikgLyAyNTU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHtcbiAgICAgIHJlZCA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcbiAgICAgIGdyZWVuID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xuICAgICAgYmx1ZSA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcbiAgICAgIGlmIChoZXgubGVuZ3RoID09PSA4KSB7XG4gICAgICAgIGFscGhhID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg2LCA4KSwgMTYpIC8gMjU1O1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChjbGVhbkNvbG9yLnN0YXJ0c1dpdGgoJ3JnYmEnKSkge1xuICAgIGNvbnN0IHJnYmFWYWx1ZXMgPSBjbGVhbkNvbG9yLm1hdGNoKC9yZ2JhXFwoKFteKV0rKVxcKS8pWzFdLnNwbGl0KCcsJyk7XG4gICAgcmVkID0gcGFyc2VJbnQocmdiYVZhbHVlc1swXSwgMTApO1xuICAgIGdyZWVuID0gcGFyc2VJbnQocmdiYVZhbHVlc1sxXSwgMTApO1xuICAgIGJsdWUgPSBwYXJzZUludChyZ2JhVmFsdWVzWzJdLCAxMCk7XG4gICAgYWxwaGEgPSBwYXJzZUZsb2F0KHJnYmFWYWx1ZXNbM10pO1xuICB9IGVsc2UgaWYgKGNsZWFuQ29sb3Iuc3RhcnRzV2l0aCgncmdiJykpIHtcbiAgICBjb25zdCByZ2JWYWx1ZXMgPSBjbGVhbkNvbG9yLm1hdGNoKC9yZ2JcXCgoW14pXSspXFwpLylbMV0uc3BsaXQoJywnKTtcbiAgICByZWQgPSBwYXJzZUludChyZ2JWYWx1ZXNbMF0sIDEwKTtcbiAgICBncmVlbiA9IHBhcnNlSW50KHJnYlZhbHVlc1sxXSwgMTApO1xuICAgIGJsdWUgPSBwYXJzZUludChyZ2JWYWx1ZXNbMl0sIDEwKTtcbiAgfSBlbHNlIGlmIChjbGVhbkNvbG9yLnN0YXJ0c1dpdGgoJ2hzbGEnKSkge1xuICAgIGNvbnN0IGhzbGFWYWx1ZXMgPSBjbGVhbkNvbG9yLm1hdGNoKC9oc2xhXFwoKFteKV0rKVxcKS8pWzFdLnNwbGl0KCcsJyk7XG4gICAgY29uc3QgaCA9IHBhcnNlRmxvYXQoaHNsYVZhbHVlc1swXSk7XG4gICAgY29uc3QgcyA9IHBhcnNlRmxvYXQoaHNsYVZhbHVlc1sxXS5yZXBsYWNlKCclJywgJycpKSAvIDEwMDtcbiAgICBjb25zdCBsID0gcGFyc2VGbG9hdChoc2xhVmFsdWVzWzJdLnJlcGxhY2UoJyUnLCAnJykpIC8gMTAwO1xuICAgIGFscGhhID0gcGFyc2VGbG9hdChoc2xhVmFsdWVzWzNdKTtcblxuICAgIC8vIENvbnZlcnQgSFNMIHRvIFJHQlxuICAgIGNvbnN0IEMgPSAoMSAtIE1hdGguYWJzKDIgKiBsIC0gMSkpICogcztcbiAgICBjb25zdCBYID0gQyAqICgxIC0gTWF0aC5hYnMoKChoIC8gNjApICUgMikgLSAxKSk7XG4gICAgY29uc3QgbSA9IGwgLSBDIC8gMjtcbiAgICBsZXQgUjtcbiAgICBsZXQgRztcbiAgICBsZXQgQjtcblxuICAgIGlmIChoID49IDAgJiYgaCA8IDYwKSB7XG4gICAgICBSID0gQztcbiAgICAgIEcgPSBYO1xuICAgICAgQiA9IDA7XG4gICAgfSBlbHNlIGlmIChoID49IDYwICYmIGggPCAxMjApIHtcbiAgICAgIFIgPSBYO1xuICAgICAgRyA9IEM7XG4gICAgICBCID0gMDtcbiAgICB9IGVsc2UgaWYgKGggPj0gMTIwICYmIGggPCAxODApIHtcbiAgICAgIFIgPSAwO1xuICAgICAgRyA9IEM7XG4gICAgICBCID0gWDtcbiAgICB9IGVsc2UgaWYgKGggPj0gMTgwICYmIGggPCAyNDApIHtcbiAgICAgIFIgPSAwO1xuICAgICAgRyA9IFg7XG4gICAgICBCID0gQztcbiAgICB9IGVsc2UgaWYgKGggPj0gMjQwICYmIGggPCAzMDApIHtcbiAgICAgIFIgPSBYO1xuICAgICAgRyA9IDA7XG4gICAgICBCID0gQztcbiAgICB9IGVsc2Uge1xuICAgICAgUiA9IEM7XG4gICAgICBHID0gMDtcbiAgICAgIEIgPSBYO1xuICAgIH1cblxuICAgIHJlZCA9IE1hdGgucm91bmQoKFIgKyBtKSAqIDI1NSk7XG4gICAgZ3JlZW4gPSBNYXRoLnJvdW5kKChHICsgbSkgKiAyNTUpO1xuICAgIGJsdWUgPSBNYXRoLnJvdW5kKChCICsgbSkgKiAyNTUpO1xuICB9IGVsc2UgaWYgKGNsZWFuQ29sb3Iuc3RhcnRzV2l0aCgnaHNsJykpIHtcbiAgICBjb25zdCBoc2xWYWx1ZXMgPSBjbGVhbkNvbG9yLm1hdGNoKC9oc2xcXCgoW14pXSspXFwpLylbMV0uc3BsaXQoJywnKTtcbiAgICBjb25zdCBoID0gcGFyc2VGbG9hdChoc2xWYWx1ZXNbMF0pO1xuICAgIGNvbnN0IHMgPSBwYXJzZUZsb2F0KGhzbFZhbHVlc1sxXS5yZXBsYWNlKCclJywgJycpKSAvIDEwMDtcbiAgICBjb25zdCBsID0gcGFyc2VGbG9hdChoc2xWYWx1ZXNbMl0ucmVwbGFjZSgnJScsICcnKSkgLyAxMDA7XG5cbiAgICAvLyBDb252ZXJ0IEhTTCB0byBSR0IgKHdpdGhvdXQgYWxwaGEpXG4gICAgY29uc3QgQyA9ICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSkgKiBzO1xuICAgIGNvbnN0IFggPSBDICogKDEgLSBNYXRoLmFicygoKGggLyA2MCkgJSAyKSAtIDEpKTtcbiAgICBjb25zdCBtID0gbCAtIEMgLyAyO1xuICAgIGxldCBSO1xuICAgIGxldCBHO1xuICAgIGxldCBCO1xuXG4gICAgaWYgKGggPj0gMCAmJiBoIDwgNjApIHtcbiAgICAgIFIgPSBDO1xuICAgICAgRyA9IFg7XG4gICAgICBCID0gMDtcbiAgICB9IGVsc2UgaWYgKGggPj0gNjAgJiYgaCA8IDEyMCkge1xuICAgICAgUiA9IFg7XG4gICAgICBHID0gQztcbiAgICAgIEIgPSAwO1xuICAgIH0gZWxzZSBpZiAoaCA+PSAxMjAgJiYgaCA8IDE4MCkge1xuICAgICAgUiA9IDA7XG4gICAgICBHID0gQztcbiAgICAgIEIgPSBYO1xuICAgIH0gZWxzZSBpZiAoaCA+PSAxODAgJiYgaCA8IDI0MCkge1xuICAgICAgUiA9IDA7XG4gICAgICBHID0gWDtcbiAgICAgIEIgPSBDO1xuICAgIH0gZWxzZSBpZiAoaCA+PSAyNDAgJiYgaCA8IDMwMCkge1xuICAgICAgUiA9IFg7XG4gICAgICBHID0gMDtcbiAgICAgIEIgPSBDO1xuICAgIH0gZWxzZSB7XG4gICAgICBSID0gQztcbiAgICAgIEcgPSAwO1xuICAgICAgQiA9IFg7XG4gICAgfVxuXG4gICAgcmVkID0gTWF0aC5yb3VuZCgoUiArIG0pICogMjU1KTtcbiAgICBncmVlbiA9IE1hdGgucm91bmQoKEcgKyBtKSAqIDI1NSk7XG4gICAgYmx1ZSA9IE1hdGgucm91bmQoKEIgKyBtKSAqIDI1NSk7XG4gIH1cblxuICBpZiAoTnVtYmVyLmlzTmFOKHJlZCkgfHwgTnVtYmVyLmlzTmFOKGdyZWVuKSB8fCBOdW1iZXIuaXNOYU4oYmx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb2xvciBpbiBbaXgyL3NoYXJlZC91dGlscy9ub3JtYWxpemVDb2xvci5qc10gJyR7aW5wdXRDb2xvcn0nYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhfTtcbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVDb2xvciIsImNvbG9yTmFtZXNPYmoiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsImlucHV0Q29sb3IiLCJhbHBoYSIsInJhd0NvbG9yIiwicmVwbGFjZSIsInRvTG93ZXJDYXNlIiwibmFtZWRDb2xvciIsImNsZWFuQ29sb3IiLCJzdGFydHNXaXRoIiwiaGV4Iiwic3Vic3RyaW5nIiwibGVuZ3RoIiwicGFyc2VJbnQiLCJyZ2JhVmFsdWVzIiwibWF0Y2giLCJzcGxpdCIsInBhcnNlRmxvYXQiLCJyZ2JWYWx1ZXMiLCJoc2xhVmFsdWVzIiwiaCIsInMiLCJsIiwiQyIsIk1hdGgiLCJhYnMiLCJYIiwibSIsIlIiLCJHIiwiQiIsInJvdW5kIiwiaHNsVmFsdWVzIiwiTnVtYmVyIiwiaXNOYU4iLCJFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBQ3JCLHFCQUFxQjtBQUNyQixvREFBb0Q7Ozs7OytCQXdKcENBOzs7ZUFBQUE7OztBQXZKaEIsTUFBTUMsZ0JBQWdCO0lBQ3BCQyxXQUFXO0lBQ1hDLGNBQWM7SUFDZEMsTUFBTTtJQUNOQyxZQUFZO0lBQ1pDLE9BQU87SUFDUEMsT0FBTztJQUNQQyxRQUFRO0lBQ1JDLE9BQU87SUFDUEMsZ0JBQWdCO0lBQ2hCQyxNQUFNO0lBQ05DLFlBQVk7SUFDWkMsT0FBTztJQUNQQyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsWUFBWTtJQUNaQyxXQUFXO0lBQ1hDLE9BQU87SUFDUEMsZ0JBQWdCO0lBQ2hCQyxVQUFVO0lBQ1ZDLFNBQVM7SUFDVEMsTUFBTTtJQUNOQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsZUFBZTtJQUNmQyxVQUFVO0lBQ1ZDLFdBQVc7SUFDWEMsVUFBVTtJQUNWQyxXQUFXO0lBQ1hDLGFBQWE7SUFDYkMsZ0JBQWdCO0lBQ2hCQyxZQUFZO0lBQ1pDLFlBQVk7SUFDWkMsU0FBUztJQUNUQyxZQUFZO0lBQ1pDLGNBQWM7SUFDZEMsZUFBZTtJQUNmQyxlQUFlO0lBQ2ZDLGVBQWU7SUFDZkMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLFVBQVU7SUFDVkMsYUFBYTtJQUNiQyxTQUFTO0lBQ1RDLFNBQVM7SUFDVEMsWUFBWTtJQUNaQyxXQUFXO0lBQ1hDLGFBQWE7SUFDYkMsYUFBYTtJQUNiQyxTQUFTO0lBQ1RDLFdBQVc7SUFDWEMsWUFBWTtJQUNaQyxNQUFNO0lBQ05DLFdBQVc7SUFDWEMsTUFBTTtJQUNOQyxPQUFPO0lBQ1BDLGFBQWE7SUFDYkMsTUFBTTtJQUNOQyxVQUFVO0lBQ1ZDLFNBQVM7SUFDVEMsV0FBVztJQUNYQyxRQUFRO0lBQ1JDLE9BQU87SUFDUEMsT0FBTztJQUNQQyxVQUFVO0lBQ1ZDLGVBQWU7SUFDZkMs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 }), 9468: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { // IX2Actions, IX2BrowserSupport: function() { return _IX2BrowserSupport; }, IX2EasingUtils: function() { return _IX2EasingUtils; }, IX2Easings: function() { return _IX2Easings; }, IX2ElementsReducer: function() { return _IX2ElementsReducer; }, IX2VanillaPlugins: function() { return _IX2VanillaPlugins; }, IX2VanillaUtils: function() { return _IX2VanillaUtils; } }); const _IX2BrowserSupport = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2662)); const _IX2Easings = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8686)); const _IX2EasingUtils = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(3767)); const _IX2ElementsReducer = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(5861)); const _IX2VanillaPlugins = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(1799)); const _IX2VanillaUtils = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(4124)); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIElYMkJyb3dzZXJTdXBwb3J0IGZyb20gJy4vbG9naWMvSVgyQnJvd3NlclN1cHBvcnQnO1xuaW1wb3J0ICogYXMgSVgyRWFzaW5ncyBmcm9tICcuL2xvZ2ljL0lYMkVhc2luZ3MnO1xuaW1wb3J0ICogYXMgSVgyRWFzaW5nVXRpbHMgZnJvbSAnLi9sb2dpYy9JWDJFYXNpbmdVdGlscyc7XG5pbXBvcnQgKiBhcyBJWDJFbGVtZW50c1JlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycy9JWDJFbGVtZW50c1JlZHVjZXInO1xuaW1wb3J0ICogYXMgSVgyVmFuaWxsYVBsdWdpbnMgZnJvbSAnLi9sb2dpYy9JWDJWYW5pbGxhUGx1Z2lucyc7XG5pbXBvcnQgKiBhcyBJWDJWYW5pbGxhVXRpbHMgZnJvbSAnLi9sb2dpYy9JWDJWYW5pbGxhVXRpbHMnO1xuZXhwb3J0IHtcbiAgLy8gSVgyQWN0aW9ucyxcbiAgSVgyQnJvd3NlclN1cHBvcnQsXG4gIElYMkVhc2luZ3MsXG4gIElYMkVhc2luZ1V0aWxzLFxuICBJWDJFbGVtZW50c1JlZHVjZXIsXG4gIElYMlZhbmlsbGFQbHVnaW5zLFxuICBJWDJWYW5pbGxhVXRpbHMsXG59O1xuIl0sIm5hbWVzIjpbIklYMkJyb3dzZXJTdXBwb3J0IiwiSVgyRWFzaW5nVXRpbHMiLCJJWDJFYXNpbmdzIiwiSVgyRWxlbWVudHNSZWR1Y2VyIiwiSVgyVmFuaWxsYVBsdWdpbnMiLCJJWDJWYW5pbGxhVXRpbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBT0UsY0FBYztJQUNkQSxpQkFBaUI7ZUFBakJBOztJQUVBQyxjQUFjO2VBQWRBOztJQURBQyxVQUFVO2VBQVZBOztJQUVBQyxrQkFBa0I7ZUFBbEJBOztJQUNBQyxpQkFBaUI7ZUFBakJBOztJQUNBQyxlQUFlO2VBQWZBOzs7MkVBYmlDO29FQUNQO3dFQUNJOzRFQUNJOzJFQUNEO3lFQUNGIn0= }), 2662: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ELEMENT_MATCHES: function() { return ELEMENT_MATCHES; }, FLEX_PREFIXED: function() { return FLEX_PREFIXED; }, IS_BROWSER_ENV: function() { return IS_BROWSER_ENV; }, TRANSFORM_PREFIXED: function() { return TRANSFORM_PREFIXED; }, TRANSFORM_STYLE_PREFIXED: function() { return TRANSFORM_STYLE_PREFIXED; }, withBrowser: function() { return withBrowser; } }); const _find = /*#__PURE__*/ _interop_require_default(__webpack_require__(9777)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const IS_BROWSER_ENV = typeof window !== 'undefined'; const withBrowser = (fn, fallback)=>{ if (IS_BROWSER_ENV) { return fn(); } return fallback; }; const ELEMENT_MATCHES = withBrowser(()=>{ return (0, _find.default)([ 'matches', 'matchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector', 'webkitMatchesSelector' ], (key)=>key in Element.prototype); }); const FLEX_PREFIXED = withBrowser(()=>{ const el = document.createElement('i'); const values = [ 'flex', '-webkit-flex', '-ms-flexbox', '-moz-box', '-webkit-box' ]; const none = ''; try { const { length } = values; for(let i = 0; i < length; i++){ const value = values[i]; // @ts-expect-error - TS2322 - Type 'string | undefined' is not assignable to type 'string'. el.style.display = value; if (el.style.display === value) { return value; } } return none; } catch (err) { return none; } }, 'flex'); const TRANSFORM_PREFIXED = withBrowser(()=>{ const el = document.createElement('i'); if (el.style.transform == null) { const prefixes = [ 'Webkit', 'Moz', 'ms' ]; const suffix = 'Transform'; const { length } = prefixes; for(let i = 0; i < length; i++){ const prop = prefixes[i] + suffix; // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'. if (el.style[prop] !== undefined) { return prop; } } } return 'transform'; }, 'transform'); const TRANSFORM_PREFIX = TRANSFORM_PREFIXED.split('transform')[0]; const TRANSFORM_STYLE_PREFIXED = TRANSFORM_PREFIX ? TRANSFORM_PREFIX + 'TransformStyle' : 'transformStyle'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkJyb3dzZXJTdXBwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuaW1wb3J0IGZpbmQgZnJvbSAnbG9kYXNoL2ZpbmQnO1xuXG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUl9FTlYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGNvbnN0IHdpdGhCcm93c2VyID0gKGZuOiBhbnksIGZhbGxiYWNrOiBhbnkpID0+IHtcbiAgaWYgKElTX0JST1dTRVJfRU5WKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cbiAgcmV0dXJuIGZhbGxiYWNrO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG5leHBvcnQgY29uc3QgRUxFTUVOVF9NQVRDSEVTID0gd2l0aEJyb3dzZXIoKCkgPT4ge1xuICByZXR1cm4gZmluZChcbiAgICBbXG4gICAgICAnbWF0Y2hlcycsXG4gICAgICAnbWF0Y2hlc1NlbGVjdG9yJyxcbiAgICAgICdtb3pNYXRjaGVzU2VsZWN0b3InLFxuICAgICAgJ21zTWF0Y2hlc1NlbGVjdG9yJyxcbiAgICAgICdvTWF0Y2hlc1NlbGVjdG9yJyxcbiAgICAgICd3ZWJraXRNYXRjaGVzU2VsZWN0b3InLFxuICAgIF0sXG4gICAgKGtleSkgPT4ga2V5IGluIEVsZW1lbnQucHJvdG90eXBlXG4gICk7XG59KTtcblxuZXhwb3J0IGNvbnN0IEZMRVhfUFJFRklYRUQgPSB3aXRoQnJvd3NlcigoKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgJ2ZsZXgnLFxuICAgICctd2Via2l0LWZsZXgnLFxuICAgICctbXMtZmxleGJveCcsXG4gICAgJy1tb3otYm94JyxcbiAgICAnLXdlYmtpdC1ib3gnLFxuICBdO1xuICBjb25zdCBub25lID0gJyc7XG4gIHRyeSB7XG4gICAgY29uc3Qge2xlbmd0aH0gPSB2YWx1ZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzIyIC0gVHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdzdHJpbmcnLlxuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlO1xuICAgICAgaWYgKGVsLnN0eWxlLmRpc3BsYXkgPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vbmU7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgcmV0dXJuIG5vbmU7XG4gIH1cbn0sICdmbGV4Jyk7XG5cbmV4cG9ydCBjb25zdCBUUkFOU0ZPUk1fUFJFRklYRUQgPSB3aXRoQnJvd3NlcigoKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuICBpZiAoZWwuc3R5bGUudHJhbnNmb3JtID09IG51bGwpIHtcbiAgICBjb25zdCBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ01veicsICdtcyddO1xuICAgIGNvbnN0IHN1ZmZpeCA9ICdUcmFuc2Zvcm0nO1xuICAgIGNvbnN0IHtsZW5ndGh9ID0gcHJlZml4ZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcHJvcCA9IHByZWZpeGVzW2ldICsgc3VmZml4O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAxNSAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGluZGV4IGV4cHJlc3Npb24gaXMgbm90IG9mIHR5cGUgJ251bWJlcicuXG4gICAgICBpZiAoZWwuc3R5bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuICd0cmFuc2Zvcm0nO1xufSwgJ3RyYW5zZm9ybScpO1xuXG5jb25zdCBUUkFOU0ZPUk1fUFJFRklYID0gVFJBTlNGT1JNX1BSRUZJWEVELnNwbGl0KCd0cmFuc2Zvcm0nKVswXTtcblxuZXhwb3J0IGNvbnN0IFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCA9IFRSQU5TRk9STV9QUkVGSVhcbiAgPyBUUkFOU0ZPUk1fUFJFRklYICsgJ1RyYW5zZm9ybVN0eWxlJ1xuICA6ICd0cmFuc2Zvcm1TdHlsZSc7XG4iXSwibmFtZXMiOlsiRUxFTUVOVF9NQVRDSEVTIiwiRkxFWF9QUkVGSVhFRCIsIklTX0JST1dTRVJfRU5WIiwiVFJBTlNGT1JNX1BSRUZJWEVEIiwiVFJBTlNGT1JNX1NUWUxFX1BSRUZJWEVEIiwid2l0aEJyb3dzZXIiLCJ3aW5kb3ciLCJmbiIsImZhbGxiYWNrIiwiZmluZCIsImtleSIsIkVsZW1lbnQiLCJwcm90b3R5cGUiLCJlbCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInZhbHVlcyIsIm5vbmUiLCJsZW5ndGgiLCJpIiwidmFsdWUiLCJzdHlsZSIsImRpc3BsYXkiLCJlcnIiLCJ0cmFuc2Zvcm0iLCJwcmVmaXhlcyIsInN1ZmZpeCIsInByb3AiLCJ1bmRlZmluZWQiLCJUUkFOU0ZPUk1fUFJFRklYIiwic3BsaXQiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUFhVEEsZUFBZTtlQUFmQTs7SUFjQUMsYUFBYTtlQUFiQTs7SUF4QkFDLGNBQWM7ZUFBZEE7O0lBa0RBQyxrQkFBa0I7ZUFBbEJBOztJQW1CQUMsd0JBQXdCO2VBQXhCQTs7SUFuRUFDLFdBQVc7ZUFBWEE7Ozs2REFKSTs7Ozs7O0FBRVYsTUFBTUgsaUJBQWlCLE9BQU9JLFdBQVc7QUFFekMsTUFBTUQsY0FBYyxDQUFDRSxJQUFTQztJQUNuQyxJQUFJTixnQkFBZ0I7UUFDbEIsT0FBT0s7SUFDVDtJQUNBLE9BQU9DO0FBQ1Q7QUFHTyxNQUFNUixrQkFBa0JLLFlBQVk7SUFDekMsT0FBT0ksSUFBQUEsYUFBSSxFQUNUO1FBQ0U7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO0tBQ0QsRUFDRCxDQUFDQyxNQUFRQSxPQUFPQyxRQUFRQyxTQUFTO0FBRXJDO0FBRU8sTUFBTVgsZ0JBQWdCSSxZQUFZO0lBQ3ZDLE1BQU1RLEtBQUtDLFNBQVNDLGFBQWEsQ0FBQztJQUNsQyxNQUFNQyxTQUFTO1FBQ2I7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBQ0QsTUFBTUMsT0FBTztJQUNiLElBQUk7UUFDRixNQUFNLEVBQUNDLE1BQU0sRUFBQyxHQUFHRjtRQUNqQixJQUFLLElBQUlHLElBQUksR0FBR0EsSUFBSUQsUUFBUUMsSUFBSztZQUMvQixNQUFNQyxRQUFRSixNQUFNLENBQUNHLEVBQUU7WUFDdkIsNEZBQTRGO1lBQzVGTixHQUFHUSxLQUFLLENBQUNDLE9BQU8sR0FBR0Y7WUFDbkIsSUFBSVAsR0FBR1EsS0FBSyxDQUFDQyxPQUFPLEtBQUtGLE9BQU87Z0JBQzlCLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBLE9BQU9IO0lBQ1QsRUFBRSxPQUFPTSxLQUFVO1FBQ2pCLE9BQU9OO0lBQ1Q7QUFDRixHQUFHO0FBRUksTUFBTWQscUJBQXFCRSxZQUFZO0lBQzVDLE1BQU1RLEtBQUtDLFNBQVNDLGFBQWEsQ0FBQztJQUNsQyxJQUFJRixHQUFHUSxLQUFLLENBQUNHLFNBQVMsSUFBSSxNQUFNO1FBQzlCLE1BQU1DLFdBQVc7WUFBQztZQUFVO1lBQU87U0FBSztRQUN4QyxNQUFNQyxTQUFTO1FBQ2YsTUFBTSxFQUFDUixNQUFNLEVBQUMsR0FBR087UUFDakIsSUFBSyxJQUFJTixJQUFJLEdBQUdBLElBQUlELFFBQVFDLElBQUs7WUFDL0IsTUFBTVEsT0FBT0YsUUFBUSxDQUFDTixFQUFFLEdBQUdPO1lBQzNCLHFIQUFxSDtZQUNySCxJQUFJYixHQUFHUSxLQUFLLENBQUNNLEtBQUssS0FBS0MsV0FBVztnQkFDaEMsT0FBT0Q7WUFDVDtRQUNGO0lBQ0Y7SUFDQSxPQUFPO0FBQ1QsR0FBRztBQUVILE1BQU1FLG1CQUFtQjFCLG1CQUFtQjJCLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUUxRCxNQUFNMUIsMkJBQTJCeUIsbUJBQ3BDQSxtQkFBbUIsbUJBQ25CIn0= }), 3767: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { applyEasing: function() { return applyEasing; }, createBezierEasing: function() { return createBezierEasing; }, optimizeFloat: function() { return optimizeFloat; } }); const _IX2Easings = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8686)); const _beziereasing = /*#__PURE__*/ _interop_require_default(__webpack_require__(1361)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function optimizeFloat(value, digits = 5, base = 10) { const pow = Math.pow(base, digits); const float = Number(Math.round(value * pow) / pow); return Math.abs(float) > 0.0001 ? float : 0; } function createBezierEasing(easing) { return (0, _beziereasing.default)(...easing); } function applyEasing(easing, position, customEasingFn) { if (position === 0) { return 0; } if (position === 1) { return 1; } if (customEasingFn) { return optimizeFloat(position > 0 ? customEasingFn(position) : position); } return optimizeFloat(position > 0 && easing && _IX2Easings[easing] ? _IX2Easings[easing](position) : position); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVhc2luZ1V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgSVgyRWFzaW5nRW51bVR5cGUsXG4gIElYMkVhc2luZ0N1c3RvbVR5cGUsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcbmltcG9ydCAqIGFzIGVhc2luZ3MgZnJvbSAnLi9JWDJFYXNpbmdzJztcbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMTYgLSBDb3VsZCBub3QgZmluZCBhIGRlY2xhcmF0aW9uIGZpbGUgZm9yIG1vZHVsZSAnYmV6aWVyLWVhc2luZycuICcvaG9tZS9ydW5uZXIvd29yay9mbG93LXRvLXR5cGVzY3JpcHQtY29kZW1vZC9mbG93LXRvLXR5cGVzY3JpcHQtY29kZW1vZC93ZWJmbG93L25vZGVfbW9kdWxlcy9iZXppZXItZWFzaW5nL3NyYy9pbmRleC5qcycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmltcG9ydCBCZXppZXJFYXNpbmcgZnJvbSAnYmV6aWVyLWVhc2luZyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHRpbWl6ZUZsb2F0KFxuICB2YWx1ZTogbnVtYmVyLFxuICBkaWdpdHM6IG51bWJlciA9IDUsXG4gIGJhc2U6IG51bWJlciA9IDEwXG4pOiBudW1iZXIge1xuICBjb25zdCBwb3cgPSBNYXRoLnBvdyhiYXNlLCBkaWdpdHMpO1xuICBjb25zdCBmbG9hdCA9IE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICogcG93KSAvIHBvdyk7XG4gIHJldHVybiBNYXRoLmFicyhmbG9hdCkgPiAwLjAwMDEgPyBmbG9hdCA6IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCZXppZXJFYXNpbmcoXG4gIGVhc2luZzogSVgyRWFzaW5nQ3VzdG9tVHlwZVxuKTogKGFyZzE6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgcmV0dXJuIEJlemllckVhc2luZyguLi5lYXNpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlFYXNpbmcoXG4gIGVhc2luZzogSVgyRWFzaW5nRW51bVR5cGUsXG4gIHBvc2l0aW9uOiBudW1iZXIsXG4gIGN1c3RvbUVhc2luZ0ZuPzogKGFyZzE6IG51bWJlcikgPT4gbnVtYmVyXG4pIHtcbiAgaWYgKHBvc2l0aW9uID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoY3VzdG9tRWFzaW5nRm4pIHtcbiAgICByZXR1cm4gb3B0aW1pemVGbG9hdChwb3NpdGlvbiA+IDAgPyBjdXN0b21FYXNpbmdGbihwb3NpdGlvbikgOiBwb3NpdGlvbik7XG4gIH1cblxuICByZXR1cm4gb3B0aW1pemVGbG9hdChcbiAgICBwb3NpdGlvbiA+IDAgJiYgZWFzaW5nICYmIGVhc2luZ3NbZWFzaW5nXVxuICAgICAgPyBlYXNpbmdzW2Vhc2luZ10ocG9zaXRpb24pXG4gICAgICA6IHBvc2l0aW9uXG4gICk7XG59XG4iXSwibmFtZXMiOlsiYXBwbHlFYXNpbmciLCJjcmVhdGVCZXppZXJFYXNpbmciLCJvcHRpbWl6ZUZsb2F0IiwidmFsdWUiLCJkaWdpdHMiLCJiYXNlIiwicG93IiwiTWF0aCIsImZsb2F0IiwiTnVtYmVyIiwicm91bmQiLCJhYnMiLCJlYXNpbmciLCJCZXppZXJFYXNpbmciLCJwb3NpdGlvbiIsImN1c3RvbUVhc2luZ0ZuIiwiZWFzaW5ncyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUF3QmdCQSxXQUFXO2VBQVhBOztJQU5BQyxrQkFBa0I7ZUFBbEJBOztJQVZBQyxhQUFhO2VBQWJBOzs7b0VBSlM7cUVBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWxCLFNBQVNBLGNBQ2RDLEtBQWEsRUFDYkMsU0FBaUIsQ0FBQyxFQUNsQkMsT0FBZSxFQUFFO0lBRWpCLE1BQU1DLE1BQU1DLEtBQUtELEdBQUcsQ0FBQ0QsTUFBTUQ7SUFDM0IsTUFBTUksUUFBUUMsT0FBT0YsS0FBS0csS0FBSyxDQUFDUCxRQUFRRyxPQUFPQTtJQUMvQyxPQUFPQyxLQUFLSSxHQUFHLENBQUNILFNBQVMsU0FBU0EsUUFBUTtBQUM1QztBQUVPLFNBQVNQLG1CQUNkVyxNQUEyQjtJQUUzQixPQUFPQyxJQUFBQSxxQkFBWSxLQUFJRDtBQUN6QjtBQUVPLFNBQVNaLFlBQ2RZLE1BQXlCLEVBQ3pCRSxRQUFnQixFQUNoQkMsY0FBeUM7SUFFekMsSUFBSUQsYUFBYSxHQUFHO1FBQ2xCLE9BQU87SUFDVDtJQUNBLElBQUlBLGFBQWEsR0FBRztRQUNsQixPQUFPO0lBQ1Q7SUFFQSxJQUFJQyxnQkFBZ0I7UUFDbEIsT0FBT2IsY0FBY1ksV0FBVyxJQUFJQyxlQUFlRCxZQUFZQTtJQUNqRTtJQUVBLE9BQU9aLGNBQ0xZLFdBQVcsS0FBS0YsVUFBVUksV0FBTyxDQUFDSixPQUFPLEdBQ3JDSSxXQUFPLENBQUNKLE9BQU8sQ0FBQ0UsWUFDaEJBO0FBRVIifQ== }), 8686: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; // @ts-expect-error - TS7016 - Could not find a declaration file for module 'bezier-easing'. '/home/runner/work/flow-to-typescript-codemod/flow-to-typescript-codemod/webflow/node_modules/bezier-easing/src/index.js' implicitly has an 'any' type. Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { bounce: function() { return bounce; }, bouncePast: function() { return bouncePast; }, ease: function() { return ease; }, easeIn: function() { return easeIn; }, easeInOut: function() { return easeInOut; }, easeOut: function() { return easeOut; }, inBack: function() { return inBack; }, inCirc: function() { return inCirc; }, inCubic: function() { return inCubic; }, inElastic: function() { return inElastic; }, inExpo: function() { return inExpo; }, inOutBack: function() { return inOutBack; }, inOutCirc: function() { return inOutCirc; }, inOutCubic: function() { return inOutCubic; }, inOutElastic: function() { return inOutElastic; }, inOutExpo: function() { return inOutExpo; }, inOutQuad: function() { return inOutQuad; }, inOutQuart: function() { return inOutQuart; }, inOutQuint: function() { return inOutQuint; }, inOutSine: function() { return inOutSine; }, inQuad: function() { return inQuad; }, inQuart: function() { return inQuart; }, inQuint: function() { return inQuint; }, inSine: function() { return inSine; }, outBack: function() { return outBack; }, outBounce: function() { return outBounce; }, outCirc: function() { return outCirc; }, outCubic: function() { return outCubic; }, outElastic: function() { return outElastic; }, outExpo: function() { return outExpo; }, outQuad: function() { return outQuad; }, outQuart: function() { return outQuart; }, outQuint: function() { return outQuint; }, outSine: function() { return outSine; }, swingFrom: function() { return swingFrom; }, swingFromTo: function() { return swingFromTo; }, swingTo: function() { return swingTo; } }); const _beziereasing = /*#__PURE__*/ _interop_require_default(__webpack_require__(1361)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // Easing functions adapted from Thomas Fuchs & Jeremy Kahn // Easing Equations (c) 2003 Robert Penner, BSD license // https://raw.github.com/danro/easing-js/master/LICENSE const magicSwing = 1.70158; const ease = (0, _beziereasing.default)(0.25, 0.1, 0.25, 1.0); const easeIn = (0, _beziereasing.default)(0.42, 0.0, 1.0, 1.0); const easeOut = (0, _beziereasing.default)(0.0, 0.0, 0.58, 1.0); const easeInOut = (0, _beziereasing.default)(0.42, 0.0, 0.58, 1.0); function inQuad(pos) { return Math.pow(pos, 2); } function outQuad(pos) { return -(Math.pow(pos - 1, 2) - 1); } function inOutQuad(pos) { if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(pos, 2); } return -0.5 * ((pos -= 2) * pos - 2); } function inCubic(pos) { return Math.pow(pos, 3); } function outCubic(pos) { return Math.pow(pos - 1, 3) + 1; } function inOutCubic(pos) { if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(pos, 3); } return 0.5 * (Math.pow(pos - 2, 3) + 2); } function inQuart(pos) { return Math.pow(pos, 4); } function outQuart(pos) { return -(Math.pow(pos - 1, 4) - 1); } function inOutQuart(pos) { if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(pos, 4); } return -0.5 * ((pos -= 2) * Math.pow(pos, 3) - 2); } function inQuint(pos) { return Math.pow(pos, 5); } function outQuint(pos) { return Math.pow(pos - 1, 5) + 1; } function inOutQuint(pos) { if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(pos, 5); } return 0.5 * (Math.pow(pos - 2, 5) + 2); } function inSine(pos) { return -Math.cos(pos * (Math.PI / 2)) + 1; } function outSine(pos) { return Math.sin(pos * (Math.PI / 2)); } function inOutSine(pos) { return -0.5 * (Math.cos(Math.PI * pos) - 1); } function inExpo(pos) { return pos === 0 ? 0 : Math.pow(2, 10 * (pos - 1)); } function outExpo(pos) { return pos === 1 ? 1 : -Math.pow(2, -10 * pos) + 1; } function inOutExpo(pos) { if (pos === 0) { return 0; } if (pos === 1) { return 1; } if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(2, 10 * (pos - 1)); } return 0.5 * (-Math.pow(2, -10 * --pos) + 2); } function inCirc(pos) { return -(Math.sqrt(1 - pos * pos) - 1); } function outCirc(pos) { return Math.sqrt(1 - Math.pow(pos - 1, 2)); } function inOutCirc(pos) { if ((pos /= 0.5) < 1) { return -0.5 * (Math.sqrt(1 - pos * pos) - 1); } return 0.5 * (Math.sqrt(1 - (pos -= 2) * pos) + 1); } function outBounce(pos) { if (pos < 1 / 2.75) { return 7.5625 * pos * pos; } else if (pos < 2 / 2.75) { return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; } else if (pos < 2.5 / 2.75) { return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; } else { return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; } } function inBack(pos) { const s = magicSwing; return pos * pos * ((s + 1) * pos - s); } function outBack(pos) { const s = magicSwing; return (pos -= 1) * pos * ((s + 1) * pos + s) + 1; } function inOutBack(pos) { let s = magicSwing; if ((pos /= 0.5) < 1) { return 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s)); } return 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2); } function inElastic(pos) { let s = magicSwing; let p = 0; let a = 1; if (pos === 0) { return 0; } if (pos === 1) { return 1; } if (!p) { p = 0.3; } if (a < 1) { a = 1; s = p / 4; } else { s = p / (2 * Math.PI) * Math.asin(1 / a); } return -(a * Math.pow(2, 10 * (pos -= 1)) * Math.sin((pos - s) * (2 * Math.PI) / p)); } function outElastic(pos) { let s = magicSwing; let p = 0; let a = 1; if (pos === 0) { return 0; } if (pos === 1) { return 1; } if (!p) { p = 0.3; } if (a < 1) { a = 1; s = p / 4; } else { s = p / (2 * Math.PI) * Math.asin(1 / a); } return a * Math.pow(2, -10 * pos) * Math.sin((pos - s) * (2 * Math.PI) / p) + 1; } function inOutElastic(pos) { let s = magicSwing; let p = 0; let a = 1; if (pos === 0) { return 0; } if ((pos /= 1 / 2) === 2) { return 1; } if (!p) { p = 0.3 * 1.5; } if (a < 1) { a = 1; s = p / 4; } else { s = p / (2 * Math.PI) * Math.asin(1 / a); } if (pos < 1) { return -0.5 * (a * Math.pow(2, 10 * (pos -= 1)) * Math.sin((pos - s) * (2 * Math.PI) / p)); } return a * Math.pow(2, -10 * (pos -= 1)) * Math.sin((pos - s) * (2 * Math.PI) / p) * 0.5 + 1; } function swingFromTo(pos) { let s = magicSwing; return (pos /= 0.5) < 1 ? 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s)) : 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2); } function swingFrom(pos) { const s = magicSwing; return pos * pos * ((s + 1) * pos - s); } function swingTo(pos) { const s = magicSwing; return (pos -= 1) * pos * ((s + 1) * pos + s) + 1; } function bounce(pos) { if (pos < 1 / 2.75) { return 7.5625 * pos * pos; } else if (pos < 2 / 2.75) { return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; } else if (pos < 2.5 / 2.75) { return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; } else { return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; } } function bouncePast(pos) { if (pos < 1 / 2.75) { return 7.5625 * pos * pos; } else if (pos < 2 / 2.75) { return 2 - (7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75); } else if (pos < 2.5 / 2.75) { return 2 - (7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375); } else { return 2 - (7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVhc2luZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAxNiAtIENvdWxkIG5vdCBmaW5kIGEgZGVjbGFyYXRpb24gZmlsZSBmb3IgbW9kdWxlICdiZXppZXItZWFzaW5nJy4gJy9ob21lL3J1bm5lci93b3JrL2Zsb3ctdG8tdHlwZXNjcmlwdC1jb2RlbW9kL2Zsb3ctdG8tdHlwZXNjcmlwdC1jb2RlbW9kL3dlYmZsb3cvbm9kZV9tb2R1bGVzL2Jlemllci1lYXNpbmcvc3JjL2luZGV4LmpzJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuaW1wb3J0IEJlemllckVhc2luZyBmcm9tICdiZXppZXItZWFzaW5nJztcblxuLy8gRWFzaW5nIGZ1bmN0aW9ucyBhZGFwdGVkIGZyb20gVGhvbWFzIEZ1Y2hzICYgSmVyZW15IEthaG5cbi8vIEVhc2luZyBFcXVhdGlvbnMgKGMpIDIwMDMgUm9iZXJ0IFBlbm5lciwgQlNEIGxpY2Vuc2Vcbi8vIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZGFucm8vZWFzaW5nLWpzL21hc3Rlci9MSUNFTlNFXG5cbmNvbnN0IG1hZ2ljU3dpbmcgPSAxLjcwMTU4O1xuXG50eXBlIEVhc2luZ0Z1bmN0aW9uID0gKGFyZzE6IG51bWJlcikgPT4gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgZWFzZTogRWFzaW5nRnVuY3Rpb24gPSBCZXppZXJFYXNpbmcoMC4yNSwgMC4xLCAwLjI1LCAxLjApO1xuZXhwb3J0IGNvbnN0IGVhc2VJbjogRWFzaW5nRnVuY3Rpb24gPSBCZXppZXJFYXNpbmcoMC40MiwgMC4wLCAxLjAsIDEuMCk7XG5leHBvcnQgY29uc3QgZWFzZU91dDogRWFzaW5nRnVuY3Rpb24gPSBCZXppZXJFYXNpbmcoMC4wLCAwLjAsIDAuNTgsIDEuMCk7XG5leHBvcnQgY29uc3QgZWFzZUluT3V0OiBFYXNpbmdGdW5jdGlvbiA9IEJlemllckVhc2luZygwLjQyLCAwLjAsIDAuNTgsIDEuMCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpblF1YWQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5wb3cocG9zLCAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dFF1YWQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gLShNYXRoLnBvdyhwb3MgLSAxLCAyKSAtIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRRdWFkKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gMC41ICogTWF0aC5wb3cocG9zLCAyKTtcbiAgfVxuICByZXR1cm4gLTAuNSAqICgocG9zIC09IDIpICogcG9zIC0gMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkN1YmljKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucG93KHBvcywgMyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRDdWJpYyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnBvdyhwb3MgLSAxLCAzKSArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbk91dEN1YmljKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gMC41ICogTWF0aC5wb3cocG9zLCAzKTtcbiAgfVxuICByZXR1cm4gMC41ICogKE1hdGgucG93KHBvcyAtIDIsIDMpICsgMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpblF1YXJ0KHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucG93KHBvcywgNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRRdWFydChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAtKE1hdGgucG93KHBvcyAtIDEsIDQpIC0gMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbk91dFF1YXJ0KHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gMC41ICogTWF0aC5wb3cocG9zLCA0KTtcbiAgfVxuICByZXR1cm4gLTAuNSAqICgocG9zIC09IDIpICogTWF0aC5wb3cocG9zLCAzKSAtIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5RdWludChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnBvdyhwb3MsIDUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0UXVpbnQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5wb3cocG9zIC0gMSwgNSkgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRRdWludChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICgocG9zIC89IDAuNSkgPCAxKSB7XG4gICAgcmV0dXJuIDAuNSAqIE1hdGgucG93KHBvcywgNSk7XG4gIH1cbiAgcmV0dXJuIDAuNSAqIChNYXRoLnBvdyhwb3MgLSAyLCA1KSArIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5TaW5lKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIC1NYXRoLmNvcyhwb3MgKiAoTWF0aC5QSSAvIDIpKSArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRTaW5lKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguc2luKHBvcyAqIChNYXRoLlBJIC8gMikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRTaW5lKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIC0wLjUgKiAoTWF0aC5jb3MoTWF0aC5QSSAqIHBvcykgLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluRXhwbyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBwb3MgPT09IDAgPyAwIDogTWF0aC5wb3coMiwgMTAgKiAocG9zIC0gMSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0RXhwbyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBwb3MgPT09IDEgPyAxIDogLU1hdGgucG93KDIsIC0xMCAqIHBvcykgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRFeHBvKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHBvcyA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChwb3MgPT09IDEpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoKHBvcyAvPSAwLjUpIDwgMSkge1xuICAgIHJldHVybiAwLjUgKiBNYXRoLnBvdygyLCAxMCAqIChwb3MgLSAxKSk7XG4gIH1cbiAgcmV0dXJuIDAuNSAqICgtTWF0aC5wb3coMiwgLTEwICogLS1wb3MpICsgMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkNpcmMocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gLShNYXRoLnNxcnQoMSAtIHBvcyAqIHBvcykgLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dENpcmMocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5zcXJ0KDEgLSBNYXRoLnBvdyhwb3MgLSAxLCAyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbk91dENpcmMocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoKHBvcyAvPSAwLjUpIDwgMSkge1xuICAgIHJldHVybiAtMC41ICogKE1hdGguc3FydCgxIC0gcG9zICogcG9zKSAtIDEpO1xuICB9XG4gIHJldHVybiAwLjUgKiAoTWF0aC5zcXJ0KDEgLSAocG9zIC09IDIpICogcG9zKSArIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0Qm91bmNlKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHBvcyA8IDEgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDcuNTYyNSAqIHBvcyAqIHBvcztcbiAgfSBlbHNlIGlmIChwb3MgPCAyIC8gMi43NSkge1xuICAgIHJldHVybiA3LjU2MjUgKiAocG9zIC09IDEuNSAvIDIuNzUpICogcG9zICsgMC43NTtcbiAgfSBlbHNlIGlmIChwb3MgPCAyLjUgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDcuNTYyNSAqIChwb3MgLT0gMi4yNSAvIDIuNzUpICogcG9zICsgMC45Mzc1O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA3LjU2MjUgKiAocG9zIC09IDIuNjI1IC8gMi43NSkgKiBwb3MgKyAwLjk4NDM3NTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5CYWNrKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgcyA9IG1hZ2ljU3dpbmc7XG4gIHJldHVybiBwb3MgKiBwb3MgKiAoKHMgKyAxKSAqIHBvcyAtIHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0QmFjayhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHMgPSBtYWdpY1N3aW5nO1xuICByZXR1cm4gKHBvcyAtPSAxKSAqIHBvcyAqICgocyArIDEpICogcG9zICsgcykgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRCYWNrKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHMgPSBtYWdpY1N3aW5nO1xuICBpZiAoKHBvcyAvPSAwLjUpIDwgMSkge1xuICAgIHJldHVybiAwLjUgKiAocG9zICogcG9zICogKCgocyAqPSAxLjUyNSkgKyAxKSAqIHBvcyAtIHMpKTtcbiAgfVxuICByZXR1cm4gMC41ICogKChwb3MgLT0gMikgKiBwb3MgKiAoKChzICo9IDEuNTI1KSArIDEpICogcG9zICsgcykgKyAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluRWxhc3RpYyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBzID0gbWFnaWNTd2luZztcbiAgbGV0IHAgPSAwO1xuICBsZXQgYSA9IDE7XG4gIGlmIChwb3MgPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBpZiAocG9zID09PSAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKCFwKSB7XG4gICAgcCA9IDAuMztcbiAgfVxuICBpZiAoYSA8IDEpIHtcbiAgICBhID0gMTtcbiAgICBzID0gcCAvIDQ7XG4gIH0gZWxzZSB7XG4gICAgcyA9IChwIC8gKDIgKiBNYXRoLlBJKSkgKiBNYXRoLmFzaW4oMSAvIGEpO1xuICB9XG4gIHJldHVybiAtKFxuICAgIGEgKlxuICAgIE1hdGgucG93KDIsIDEwICogKHBvcyAtPSAxKSkgKlxuICAgIE1hdGguc2luKCgocG9zIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRFbGFzdGljKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHMgPSBtYWdpY1N3aW5nO1xuICBsZXQgcCA9IDA7XG4gIGxldCBhID0gMTtcbiAgaWYgKHBvcyA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChwb3MgPT09IDEpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoIXApIHtcbiAgICBwID0gMC4zO1xuICB9XG4gIGlmIChhIDwgMSkge1xuICAgIGEgPSAxO1xuICAgIHMgPSBwIC8gNDtcbiAgfSBlbHNlIHtcbiAgICBzID0gKHAgLyAoMiAqIE1hdGguUEkpKSAqIE1hdGguYXNpbigxIC8gYSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBhICogTWF0aC5wb3coMiwgLTEwICogcG9zKSAqIE1hdGguc2luKCgocG9zIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICsgMVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRFbGFzdGljKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHMgPSBtYWdpY1N3aW5nO1xuICBsZXQgcCA9IDA7XG4gIGxldCBhID0gMTtcbiAgaWYgKHBvcyA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICgocG9zIC89IDEgLyAyKSA9PT0gMikge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmICghcCkge1xuICAgIHAgPSAwLjMgKiAxLjU7XG4gIH1cbiAgaWYgKGEgPCAxKSB7XG4gICAgYSA9IDE7XG4gICAgcyA9IHAgLyA0O1xuICB9IGVsc2Uge1xuICAgIHMgPSAocCAvICgyICogTWF0aC5QSSkpICogTWF0aC5hc2luKDEgLyBhKTtcbiAgfVxuICBpZiAocG9zIDwgMSkge1xuICAgIHJldHVybiAoXG4gICAgICAtMC41ICpcbiAgICAgIChhICpcbiAgICAgICAgTWF0aC5wb3coMiwgMTAgKiAocG9zIC09IDEpKSAqXG4gICAgICAgIE1hdGguc2luKCgocG9zIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBhICpcbiAgICAgIE1hdGgucG93KDIsIC0xMCAqIChwb3MgLT0gMSkpICpcbiAgICAgIE1hdGguc2luKCgocG9zIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICpcbiAgICAgIDAuNSArXG4gICAgMVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3dpbmdGcm9tVG8ocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgcyA9IG1hZ2ljU3dpbmc7XG4gIHJldHVybiAocG9zIC89IDAuNSkgPCAxXG4gICAgPyAwLjUgKiAocG9zICogcG9zICogKCgocyAqPSAxLjUyNSkgKyAxKSAqIHBvcyAtIHMpKVxuICAgIDogMC41ICogKChwb3MgLT0gMikgKiBwb3MgKiAoKChzICo9IDEuNTI1KSArIDEpICogcG9zICsgcykgKyAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN3aW5nRnJvbShwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHMgPSBtYWdpY1N3aW5nO1xuICByZXR1cm4gcG9zICogcG9zICogKChzICsgMSkgKiBwb3MgLSBzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN3aW5nVG8ocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBzID0gbWFnaWNTd2luZztcbiAgcmV0dXJuIChwb3MgLT0gMSkgKiBwb3MgKiAoKHMgKyAxKSAqIHBvcyArIHMpICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5jZShwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChwb3MgPCAxIC8gMi43NSkge1xuICAgIHJldHVybiA3LjU2MjUgKiBwb3MgKiBwb3M7XG4gIH0gZWxzZSBpZiAocG9zIDwgMiAvIDIuNzUpIHtcbiAgICByZXR1cm4gNy41NjI1ICogKHBvcyAtPSAxLjUgLyAyLjc1KSAqIHBvcyArIDAuNzU7XG4gIH0gZWxzZSBpZiAocG9zIDwgMi41IC8gMi43NSkge1xuICAgIHJldHVybiA3LjU2MjUgKiAocG9zIC09IDIuMjUgLyAyLjc1KSAqIHBvcyArIDAuOTM3NTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gNy41NjI1ICogKHBvcyAtPSAyLjYyNSAvIDIuNzUpICogcG9zICsgMC45ODQzNzU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5jZVBhc3QocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAocG9zIDwgMSAvIDIuNzUpIHtcbiAgICByZXR1cm4gNy41NjI1ICogcG9zICogcG9zO1xuICB9IGVsc2UgaWYgKHBvcyA8IDIgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDIgLSAoNy41NjI1ICogKHBvcyAtPSAxLjUgLyAyLjc1KSAqIHBvcyArIDAuNzUpO1xuICB9IGVsc2UgaWYgKHBvcyA8IDIuNSAvIDIuNzUpIHtcbiAgICByZXR1cm4gMiAtICg3LjU2MjUgKiAocG9zIC09IDIuMjUgLyAyLjc1KSAqIHBvcyArIDAuOTM3NSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDIgLSAoNy41NjI1ICogKHBvcyAtPSAyLjYyNSAvIDIuNzUpICogcG9zICsgMC45ODQzNzUpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiYm91bmNlIiwiYm91bmNlUGFzdCIsImVhc2UiLCJlYXNlSW4iLCJlYXNlSW5PdXQiLCJlYXNlT3V0IiwiaW5CYWNrIiwiaW5DaXJjIiwiaW5DdWJpYyIsImluRWxhc3RpYyIsImluRXhwbyIsImluT3V0QmFjayIsImluT3V0Q2lyYyIsImluT3V0Q3ViaWMiLCJpbk91dEVsYXN0aWMiLCJpbk91dEV4cG8iLCJpbk91dFF1YWQiLCJpbk91dFF1YXJ0IiwiaW5PdXRRdWludCIsImluT3V0U2luZSIsImluUXVhZCIsImluUXVhcnQiLCJpblF1aW50IiwiaW5TaW5lIiwib3V0QmFjayIsIm91dEJvdW5jZSIsIm91dENpcmMiLCJvdXRDdWJpYyIsIm91dEVsYXN0aWMiLCJvdXRFeHBvIiwib3V0UXVhZCIsIm91dFF1YXJ0Iiwib3V0UXVpbnQiLCJvdXRTaW5lIiwic3dpbmdGcm9tIiwic3dpbmdGcm9tVG8iLCJzd2luZ1RvIiwibWFnaWNTd2luZyIsIkJlemllckVhc2luZyIsInBvcyIsIk1hdGgiLCJwb3ciLCJjb3MiLCJQSSIsInNpbiIsInNxcnQiLCJzIiwicCIsImEiLCJhc2luIl0sIm1hcHBpbmdzIjoiQUFBQSxvUEFBb1A7Ozs7Ozs7Ozs7OztJQWlRcE9BLE1BQU07ZUFBTkE7O0lBWUFDLFVBQVU7ZUFBVkE7O0lBbFFIQyxJQUFJO2VBQUpBOztJQUNBQyxNQUFNO2VBQU5BOztJQUVBQyxTQUFTO2VBQVRBOztJQURBQyxPQUFPO2VBQVBBOztJQTJIR0MsTUFBTTtlQUFOQTs7SUEzQkFDLE1BQU07ZUFBTkE7O0lBOUVBQyxPQUFPO2VBQVBBOztJQTJIQUMsU0FBUztlQUFUQTs7SUFsRUFDLE1BQU07ZUFBTkE7O0lBMERBQyxTQUFTO2VBQVRBOztJQTdCQUMsU0FBUztlQUFUQTs7SUE5RUFDLFVBQVU7ZUFBVkE7O0lBcUtBQyxZQUFZO2VBQVpBOztJQTVHQUMsU0FBUztlQUFUQTs7SUF4RUFDLFNBQVM7ZUFBVEE7O0lBOEJBQyxVQUFVO2VBQVZBOztJQWVBQyxVQUFVO2VBQVZBOztJQWVBQyxTQUFTO2VBQVRBOztJQXBFQUMsTUFBTTtlQUFOQTs7SUE4QkFDLE9BQU87ZUFBUEE7O0lBZUFDLE9BQU87ZUFBUEE7O0lBZUFDLE1BQU07ZUFBTkE7O0lBaUVBQyxPQUFPO2VBQVBBOztJQWpCQUMsU0FBUztlQUFUQTs7SUFYQUMs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 }), 1799: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, isPluginType: function() { return isPluginType; }, renderPlugin: function() { return renderPlugin; } }); const _IX2BrowserSupport = __webpack_require__(2662); const _plugins = __webpack_require__(3690); function isPluginType(actionTypeId) { // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | ... 12 more ... | "STYLE_BOX_SHADOW"' is not assignable to parameter of type '"PLUGIN_LOTTIE" | "PLUGIN_SPLINE" | "PLUGIN_VARIABLE"'. return _plugins.pluginMethodMap.has(actionTypeId); } const pluginMethod = (methodName)=>(actionTypeId)=>{ if (!_IX2BrowserSupport.IS_BROWSER_ENV) { // IX2 plugins require browser libs for now return ()=>null; } const plugin = _plugins.pluginMethodMap.get(actionTypeId); if (!plugin) { throw new Error(`IX2 no plugin configured for: ${actionTypeId}`); } const method = plugin[methodName]; if (!method) { throw new Error(`IX2 invalid plugin method: ${methodName}`); } return method; }; const getPluginConfig = pluginMethod('getPluginConfig'); const getPluginOrigin = pluginMethod('getPluginOrigin'); const getPluginDuration = pluginMethod('getPluginDuration'); const getPluginDestination = pluginMethod('getPluginDestination'); const createPluginInstance = pluginMethod('createPluginInstance'); const renderPlugin = pluginMethod('renderPlugin'); const clearPlugin = pluginMethod('clearPlugin'); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhbmlsbGFQbHVnaW5zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVNfQlJPV1NFUl9FTlZ9IGZyb20gJy4vSVgyQnJvd3NlclN1cHBvcnQnO1xuaW1wb3J0IHtwbHVnaW5NZXRob2RNYXB9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9wbHVnaW5zJztcblxuaW1wb3J0IHR5cGUge0FjdGlvblR5cGVJZFR5cGV9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcbmltcG9ydCB0eXBlIHtQbHVnaW5UeXBlfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvcGx1Z2lucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkOiBBY3Rpb25UeXBlSWRUeXBlKTogYm9vbGVhbiB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCIgfCBcIlNUWUxFX09QQUNJVFlcIiB8IFwiU1RZTEVfU0laRVwiIHwgXCJTVFlMRV9GSUxURVJcIiB8IFwiU1RZTEVfRk9OVF9WQVJJQVRJT05cIiB8IFwiU1RZTEVfQkFDS0dST1VORF9DT0xPUlwiIHwgLi4uIDEyIG1vcmUgLi4uIHwgXCJTVFlMRV9CT1hfU0hBRE9XXCInIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdcIlBMVUdJTl9MT1RUSUVcIiB8IFwiUExVR0lOX1NQTElORVwiIHwgXCJQTFVHSU5fVkFSSUFCTEVcIicuXG4gIHJldHVybiBwbHVnaW5NZXRob2RNYXAuaGFzKGFjdGlvblR5cGVJZCk7XG59XG5cbnR5cGUgUGx1Z2luTWV0aG9kTmFtZSA9XG4gIHwgJ2dldFBsdWdpbkNvbmZpZydcbiAgfCAnZ2V0UGx1Z2luT3JpZ2luJ1xuICB8ICdnZXRQbHVnaW5EdXJhdGlvbidcbiAgfCAnZ2V0UGx1Z2luRGVzdGluYXRpb24nXG4gIHwgJ2NyZWF0ZVBsdWdpbkluc3RhbmNlJ1xuICB8ICdyZW5kZXJQbHVnaW4nXG4gIHwgJ2NsZWFyUGx1Z2luJztcblxuY29uc3QgcGx1Z2luTWV0aG9kID1cbiAgKG1ldGhvZE5hbWU6IFBsdWdpbk1ldGhvZE5hbWUpID0+IChhY3Rpb25UeXBlSWQ6IFBsdWdpblR5cGUpID0+IHtcbiAgICBpZiAoIUlTX0JST1dTRVJfRU5WKSB7XG4gICAgICAvLyBJWDIgcGx1Z2lucyByZXF1aXJlIGJyb3dzZXIgbGlicyBmb3Igbm93XG4gICAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcGx1Z2luID0gcGx1Z2luTWV0aG9kTWFwLmdldChhY3Rpb25UeXBlSWQpO1xuICAgIGlmICghcGx1Z2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYElYMiBubyBwbHVnaW4gY29uZmlndXJlZCBmb3I6ICR7YWN0aW9uVHlwZUlkfWApO1xuICAgIH1cbiAgICBjb25zdCBtZXRob2QgPSBwbHVnaW5bbWV0aG9kTmFtZV07XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSVgyIGludmFsaWQgcGx1Z2luIG1ldGhvZDogJHttZXRob2ROYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kO1xuICB9O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luQ29uZmlnID0gcGx1Z2luTWV0aG9kKCdnZXRQbHVnaW5Db25maWcnKTtcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5PcmlnaW4gPSBwbHVnaW5NZXRob2QoJ2dldFBsdWdpbk9yaWdpbicpO1xuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkR1cmF0aW9uID0gcGx1Z2luTWV0aG9kKCdnZXRQbHVnaW5EdXJhdGlvbicpO1xuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkRlc3RpbmF0aW9uID0gcGx1Z2luTWV0aG9kKCdnZXRQbHVnaW5EZXN0aW5hdGlvbicpO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsdWdpbkluc3RhbmNlID0gcGx1Z2luTWV0aG9kKCdjcmVhdGVQbHVnaW5JbnN0YW5jZScpO1xuZXhwb3J0IGNvbnN0IHJlbmRlclBsdWdpbiA9IHBsdWdpbk1ldGhvZCgncmVuZGVyUGx1Z2luJyk7XG5leHBvcnQgY29uc3QgY2xlYXJQbHVnaW4gPSBwbHVnaW5NZXRob2QoJ2NsZWFyUGx1Z2luJyk7XG4iXSwibmFtZXMiOlsiY2xlYXJQbHVnaW4iLCJjcmVhdGVQbHVnaW5JbnN0YW5jZSIsImdldFBsdWdpbkNvbmZpZyIsImdldFBsdWdpbkRlc3RpbmF0aW9uIiwiZ2V0UGx1Z2luRHVyYXRpb24iLCJnZXRQbHVnaW5PcmlnaW4iLCJpc1BsdWdpblR5cGUiLCJyZW5kZXJQbHVnaW4iLCJhY3Rpb25UeXBlSWQiLCJwbHVnaW5NZXRob2RNYXAiLCJoYXMiLCJwbHVnaW5NZXRob2QiLCJtZXRob2ROYW1lIiwiSVNfQlJPV1NFUl9FTlYiLCJwbHVnaW4iLCJnZXQiLCJFcnJvciIsIm1ldGhvZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUEyQ2FBLFdBQVc7ZUFBWEE7O0lBRkFDLG9CQUFvQjtlQUFwQkE7O0lBSkFDLGVBQWU7ZUFBZkE7O0lBR0FDLG9CQUFvQjtlQUFwQkE7O0lBREFDLGlCQUFpQjtlQUFqQkE7O0lBREFDLGVBQWU7ZUFBZkE7O0lBaENHQyxZQUFZO2VBQVpBOztJQW9DSEMsWUFBWTtlQUFaQTs7O21DQTFDZ0I7eUJBQ0M7QUFLdkIsU0FBU0QsYUFBYUUsWUFBOEI7SUFDekQsMldBQTJXO0lBQzNXLE9BQU9DLHdCQUFlLENBQUNDLEdBQUcsQ0FBQ0Y7QUFDN0I7QUFXQSxNQUFNRyxlQUNKLENBQUNDLGFBQWlDLENBQUNKO1FBQ2pDLElBQUksQ0FBQ0ssaUNBQWMsRUFBRTtZQUNuQiwyQ0FBMkM7WUFDM0MsT0FBTyxJQUFNO1FBQ2Y7UUFDQSxNQUFNQyxTQUFTTCx3QkFBZSxDQUFDTSxHQUFHLENBQUNQO1FBQ25DLElBQUksQ0FBQ00sUUFBUTtZQUNYLE1BQU0sSUFBSUUsTUFBTSxDQUFDLDhCQUE4QixFQUFFUixhQUFhLENBQUM7UUFDakU7UUFDQSxNQUFNUyxTQUFTSCxNQUFNLENBQUNGLFdBQVc7UUFDakMsSUFBSSxDQUFDSyxRQUFRO1lBQ1gsTUFBTSxJQUFJRCxNQUFNLENBQUMsMkJBQTJCLEVBQUVKLFdBQVcsQ0FBQztRQUM1RDtRQUNBLE9BQU9LO0lBQ1Q7QUFFSyxNQUFNZixrQkFBa0JTLGFBQWE7QUFDckMsTUFBTU4sa0JBQWtCTSxhQUFhO0FBQ3JDLE1BQU1QLG9CQUFvQk8sYUFBYTtBQUN2QyxNQUFNUix1QkFBdUJRLGFBQWE7QUFDMUMsTUFBTVYsdUJBQXVCVSxhQUFhO0FBQzFDLE1BQU1KLGVBQWVJLGFBQWE7QUFDbEMsTUFBTVgsY0FBY1csYUFBYSJ9 }), 4124: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* eslint-env browser */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { cleanupHTMLElement: function() { return cleanupHTMLElement; }, clearAllStyles: function() { return clearAllStyles; }, clearObjectCache: function() { return clearObjectCache; }, getActionListProgress: function() { return getActionListProgress; }, getAffectedElements: function() { return getAffectedElements; }, getComputedStyle: function() { return getComputedStyle; }, getDestinationValues: function() { return getDestinationValues; }, getElementId: function() { return getElementId; }, getInstanceId: function() { return getInstanceId; }, getInstanceOrigin: function() { return getInstanceOrigin; }, getItemConfigByKey: function() { return getItemConfigByKey; }, getMaxDurationItemIndex: function() { return getMaxDurationItemIndex; }, getNamespacedParameterId: function() { return getNamespacedParameterId; }, getRenderType: function() { return getRenderType; }, getStyleProp: function() { return getStyleProp; }, mediaQueriesEqual: function() { return mediaQueriesEqual; }, observeStore: function() { return observeStore; }, reduceListToGroup: function() { return reduceListToGroup; }, reifyState: function() { return reifyState; }, renderHTMLElement: function() { return renderHTMLElement; }, shallowEqual: function() { return _shallowEqual.default; }, shouldAllowMediaQuery: function() { return shouldAllowMediaQuery; }, shouldNamespaceEventParameter: function() { return shouldNamespaceEventParameter; }, stringifyTarget: function() { return stringifyTarget; } }); const _defaultTo = /*#__PURE__*/ _interop_require_default(__webpack_require__(4075)); const _reduce = /*#__PURE__*/ _interop_require_default(__webpack_require__(1455)); const _findLast = /*#__PURE__*/ _interop_require_default(__webpack_require__(5720)); const _timm = __webpack_require__(1185); const _sharedconstants = __webpack_require__(7087); const _shallowEqual = /*#__PURE__*/ _interop_require_default(__webpack_require__(7164)); const _IX2EasingUtils = __webpack_require__(3767); const _normalizeColor = __webpack_require__(380); const _IX2VanillaPlugins = __webpack_require__(1799); const _IX2BrowserSupport = __webpack_require__(2662); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const { BACKGROUND, TRANSFORM, TRANSLATE_3D, SCALE_3D, ROTATE_X, ROTATE_Y, ROTATE_Z, SKEW, PRESERVE_3D, FLEX, OPACITY, FILTER, FONT_VARIATION_SETTINGS, WIDTH, HEIGHT, BACKGROUND_COLOR, BORDER_COLOR, COLOR, CHILDREN, IMMEDIATE_CHILDREN, SIBLINGS, PARENT, DISPLAY, WILL_CHANGE, AUTO, COMMA_DELIMITER, COLON_DELIMITER, BAR_DELIMITER, RENDER_TRANSFORM, RENDER_GENERAL, RENDER_STYLE, RENDER_PLUGIN } = _sharedconstants.IX2EngineConstants; const { TRANSFORM_MOVE, TRANSFORM_SCALE, TRANSFORM_ROTATE, TRANSFORM_SKEW, STYLE_OPACITY, STYLE_FILTER, STYLE_FONT_VARIATION, STYLE_SIZE, STYLE_BACKGROUND_COLOR, STYLE_BORDER, STYLE_TEXT_COLOR, GENERAL_DISPLAY, OBJECT_VALUE } = _sharedconstants.ActionTypeConsts; // @ts-expect-error - TS7006 - Parameter 'v' implicitly has an 'any' type. const trim = (v)=>v.trim(); const colorStyleProps = Object.freeze({ [STYLE_BACKGROUND_COLOR]: BACKGROUND_COLOR, [STYLE_BORDER]: BORDER_COLOR, [STYLE_TEXT_COLOR]: COLOR }); const willChangeProps = Object.freeze({ [_IX2BrowserSupport.TRANSFORM_PREFIXED]: TRANSFORM, [BACKGROUND_COLOR]: BACKGROUND, [OPACITY]: OPACITY, [FILTER]: FILTER, [WIDTH]: WIDTH, [HEIGHT]: HEIGHT, [FONT_VARIATION_SETTINGS]: FONT_VARIATION_SETTINGS }); const objectCache = new Map(); function clearObjectCache() { objectCache.clear(); } let instanceCount = 1; function getInstanceId() { return 'i' + instanceCount++; } let elementCount = 1; function getElementId(ixElements, ref) { // TODO: optimize element lookup for(const key in ixElements){ const ixEl = ixElements[key]; if (ixEl && ixEl.ref === ref) { return ixEl.id; } } return 'e' + elementCount++; } function reifyState({ events, actionLists, site } = {}) { const eventTypeMap = (0, _reduce.default)(events, (result, event)=>{ const { eventTypeId } = event; if (!result[eventTypeId]) { result[eventTypeId] = {}; } result[eventTypeId][event.id] = event; return result; }, {}); let mediaQueries = site && site.mediaQueries; let mediaQueryKeys = []; if (mediaQueries) { mediaQueryKeys = mediaQueries.map((mq)=>mq.key); } else { mediaQueries = []; console.warn(`IX2 missing mediaQueries in site data`); } return { ixData: { events, actionLists, eventTypeMap, mediaQueries, mediaQueryKeys } }; } const strictEqual = (a, b)=>a === b; function observeStore({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. store, // @ts-expect-error - TS7031 - Binding element 'select' implicitly has an 'any' type. select, // @ts-expect-error - TS7031 - Binding element 'onChange' implicitly has an 'any' type. onChange, comparator = strictEqual }) { const { getState, subscribe } = store; const unsubscribe = subscribe(handleChange); let currentState = select(getState()); function handleChange() { const nextState = select(getState()); if (nextState == null) { unsubscribe(); return; } if (!comparator(nextState, currentState)) { currentState = nextState; onChange(currentState, store); } } return unsubscribe; } // @ts-expect-error - TS7006 - Parameter 'target' implicitly has an 'any' type. function normalizeTarget(target) { const type = typeof target; if (type === 'string') { return { id: target }; } else if (target != null && type === 'object') { const { id, objectId, selector, selectorGuids, appliesTo, useEventTarget } = target; return { id, objectId, selector, selectorGuids, appliesTo, useEventTarget }; } return {}; } function getAffectedElements({ config, event, eventTarget, elementRoot, elementApi }) { if (!elementApi) { throw new Error('IX2 missing elementApi'); } const { targets } = config; if (Array.isArray(targets) && targets.length > 0) { return targets.reduce((accumulator, target)=>accumulator.concat(getAffectedElements({ config: { target }, event, eventTarget, elementRoot, elementApi })), []); } const { getValidDocument, getQuerySelector, queryDocument, getChildElements, getSiblingElements, matchSelector, elementContains, isSiblingNode } = elementApi; const { target } = config; if (!target) { return []; } const { id, objectId, selector, selectorGuids, appliesTo, useEventTarget } = normalizeTarget(target); if (objectId) { const ref = objectCache.has(objectId) ? objectCache.get(objectId) : objectCache.set(objectId, {}).get(objectId); return [ ref ]; } if (appliesTo === _sharedconstants.EventAppliesTo.PAGE) { const doc = getValidDocument(id); return doc ? [ doc ] : []; } const overrides = event?.action?.config?.affectedElements ?? {}; const override = overrides[id || selector] || {}; const validOverride = Boolean(override.id || override.selector); let limitAffectedElements; let baseSelector; let finalSelector; const eventTargetSelector = event && getQuerySelector(normalizeTarget(event.target)); if (validOverride) { limitAffectedElements = override.limitAffectedElements; baseSelector = eventTargetSelector; finalSelector = getQuerySelector(override); } else { // pass in selectorGuids as well for server-side rendering. baseSelector = finalSelector = getQuerySelector({ id, selector, selectorGuids }); } if (event && useEventTarget) { // eventTarget is not defined when this function is called in a clear request, so find // all target elements associated with the event data, and return affected elements. const eventTargets = eventTarget && (finalSelector || useEventTarget === true) ? [ eventTarget ] : queryDocument(eventTargetSelector); if (finalSelector) { if (useEventTarget === PARENT) { return queryDocument(finalSelector).filter((parentElement)=>eventTargets.some((targetElement)=>elementContains(parentElement, targetElement))); } if (useEventTarget === CHILDREN) { return queryDocument(finalSelector).filter((childElement)=>eventTargets.some((targetElement)=>elementContains(targetElement, childElement))); } if (useEventTarget === SIBLINGS) { return queryDocument(finalSelector).filter((siblingElement)=>eventTargets.some((targetElement)=>isSiblingNode(targetElement, siblingElement))); } } return eventTargets; } if (baseSelector == null || finalSelector == null) { return []; } if (_IX2BrowserSupport.IS_BROWSER_ENV && elementRoot) { return queryDocument(finalSelector).filter((element)=>elementRoot.contains(element)); } if (limitAffectedElements === CHILDREN) { return queryDocument(baseSelector, finalSelector); } else if (limitAffectedElements === IMMEDIATE_CHILDREN) { return getChildElements(queryDocument(baseSelector)).filter(matchSelector(finalSelector)); } else if (limitAffectedElements === SIBLINGS) { return getSiblingElements(queryDocument(baseSelector)).filter(matchSelector(finalSelector)); } else { return queryDocument(finalSelector); } } function getComputedStyle({ element, actionItem }) { if (!_IX2BrowserSupport.IS_BROWSER_ENV) { return {}; } const { actionTypeId } = actionItem; switch(actionTypeId){ case STYLE_SIZE: case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: case GENERAL_DISPLAY: return window.getComputedStyle(element); default: return {}; } } const pxValueRegex = /px/; // @ts-expect-error - TS7006 - Parameter 'filters' implicitly has an 'any' type. const getFilterDefaults = (actionState, filters)=>// @ts-expect-error - TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'filter' implicitly has an 'any' type. filters.reduce((result, filter)=>{ if (result[filter.type] == null) { result[filter.type] = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'Readonly<{ blur: 0; 'hue-rotate': 0; invert: 0; grayscale: 0; saturate: 100; sepia: 0; contrast: 100; brightness: 100; }>'. filterDefaults[filter.type]; } return result; }, actionState || {}); const getFontVariationDefaults = (actionState, fontVariations)=>fontVariations.reduce((result, fontVariation)=>{ if (result[fontVariation.type] == null) { result[fontVariation.type] = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Readonly<{ wght: 0; opsz: 0; wdth: 0; slnt: 0; }>'. fontVariationDefaults[fontVariation.type] || // @ts-expect-error - TS2339 - Property 'defaultValue' does not exist on type 'FontVariationItemConfigType'. fontVariation.defaultValue || 0; } return result; }, actionState || {}); function getInstanceOrigin(element, refState = {}, computedStyle = {}, actionItem, elementApi) { const { getStyle } = elementApi; // Flow Hack: Passing actionTypeId to isPluginType and then trying // to do type refinement using the same variable via a switch statement // breaks down. This is is a workaround to ensure we can use type refinement. const { actionTypeId } = actionItem; if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) { // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' is not assignable to parameter of type 'PluginType'. | TS7053 - Element implicitly has an 'any' type because expression of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' can't be used to index type '{}'. return (0, _IX2VanillaPlugins.getPluginOrigin)(actionTypeId)(refState[actionTypeId], actionItem); } switch(actionItem.actionTypeId){ case TRANSFORM_MOVE: case TRANSFORM_SCALE: case TRANSFORM_ROTATE: case TRANSFORM_SKEW: { return(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW"' can't be used to index type '{}'. refState[actionItem.actionTypeId] || transformDefaults[actionItem.actionTypeId]); } case STYLE_FILTER: return getFilterDefaults(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"STYLE_FILTER"' can't be used to index type '{}'. refState[actionItem.actionTypeId], actionItem.config.filters); case STYLE_FONT_VARIATION: return getFontVariationDefaults(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"STYLE_FONT_VARIATION"' can't be used to index type '{}'. refState[actionItem.actionTypeId], actionItem.config.fontVariations); case STYLE_OPACITY: return { value: (0, _defaultTo.default)(parseFloat(getStyle(element, OPACITY)), 1.0) }; case STYLE_SIZE: { const inlineWidth = getStyle(element, WIDTH); const inlineHeight = getStyle(element, HEIGHT); let widthValue; let heightValue; // When destination unit is 'AUTO', ensure origin values are in px if (actionItem.config.widthUnit === AUTO) { widthValue = pxValueRegex.test(inlineWidth) ? parseFloat(inlineWidth) : parseFloat(computedStyle.width); } else { widthValue = (0, _defaultTo.default)(parseFloat(inlineWidth), // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'. parseFloat(computedStyle.width)); } if (actionItem.config.heightUnit === AUTO) { heightValue = pxValueRegex.test(inlineHeight) ? parseFloat(inlineHeight) : parseFloat(computedStyle.height); } else { heightValue = (0, _defaultTo.default)(parseFloat(inlineHeight), // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'. parseFloat(computedStyle.height)); } return { widthValue, heightValue }; } case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: return parseColor({ element, actionTypeId: actionItem.actionTypeId, computedStyle, getStyle }); case GENERAL_DISPLAY: return { // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'. value: (0, _defaultTo.default)(getStyle(element, DISPLAY), computedStyle.display) }; // @ts-expect-error - `OBJECT_VALUE` is not an expected `actionTypeId` case OBJECT_VALUE: // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{}'. | TS2339 - Property 'actionTypeId' does not exist on type 'never'. return refState[actionItem.actionTypeId] || { value: 0 }; default: { // As far as the type system can tell, we're missing a handler for // PLUGIN_LOTTIE. // // This is actually handled by `isPluginType` above. // /*:: (actionItem: empty); */ return; } } } // @ts-expect-error - TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'filter' implicitly has an 'any' type. const reduceFilters = (result, filter)=>{ if (filter) { result[filter.type] = filter.value || 0; } return result; }; const reduceFontVariations = (result, fontVariation)=>{ if (fontVariation) { result[fontVariation.type] = fontVariation.value || 0; } return result; }; const getItemConfigByKey = (actionTypeId, key, config)=>{ if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) { return (0, _IX2VanillaPlugins.getPluginConfig)(actionTypeId)(config, key); } switch(actionTypeId){ case STYLE_FILTER: { const filter = (0, _findLast.default)(config.filters, ({ type })=>type === key); return filter ? filter.value : 0; } case STYLE_FONT_VARIATION: { const fontVariation = (0, _findLast.default)(config.fontVariations, ({ type })=>type === key); return fontVariation ? fontVariation.value : 0; } default: return config[key]; } }; function getDestinationValues({ element, actionItem, elementApi }) { if ((0, _IX2VanillaPlugins.isPluginType)(actionItem.actionTypeId)) { // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' is not assignable to parameter of type 'PluginType'. return (0, _IX2VanillaPlugins.getPluginDestination)(actionItem.actionTypeId)(actionItem.config); } switch(actionItem.actionTypeId){ case TRANSFORM_MOVE: case TRANSFORM_SCALE: case TRANSFORM_ROTATE: case TRANSFORM_SKEW: { const { xValue, yValue, zValue } = actionItem.config; return { xValue, yValue, zValue }; } case STYLE_SIZE: { const { getStyle, setStyle, getProperty } = elementApi; const { widthUnit, heightUnit } = actionItem.config; let { widthValue, heightValue } = actionItem.config; if (!_IX2BrowserSupport.IS_BROWSER_ENV) { return { widthValue, heightValue }; } if (widthUnit === AUTO) { const temp = getStyle(element, WIDTH); setStyle(element, WIDTH, ''); // @ts-expect-error - TS2322 - Type 'string | null' is not assignable to type 'number | undefined'. widthValue = getProperty(element, 'offsetWidth'); setStyle(element, WIDTH, temp); } if (heightUnit === AUTO) { const temp = getStyle(element, HEIGHT); setStyle(element, HEIGHT, ''); // @ts-expect-error - TS2322 - Type 'string | null' is not assignable to type 'number | undefined'. heightValue = getProperty(element, 'offsetHeight'); setStyle(element, HEIGHT, temp); } return { widthValue, heightValue }; } case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: { const { rValue, gValue, bValue, aValue, globalSwatchId } = actionItem.config; if (globalSwatchId && globalSwatchId.startsWith('--')) { const { getStyle } = elementApi; const value = getStyle(element, globalSwatchId); const normalizedValue = (0, _normalizeColor.normalizeColor)(value); return { rValue: normalizedValue.red, gValue: normalizedValue.green, bValue: normalizedValue.blue, aValue: normalizedValue.alpha }; } return { rValue, gValue, bValue, aValue }; } case STYLE_FILTER: { return actionItem.config.filters.reduce(reduceFilters, {}); } case STYLE_FONT_VARIATION: { return actionItem.config.fontVariations.reduce(reduceFontVariations, {}); } default: { const { value } = actionItem.config; return { value }; } } } function getRenderType(actionTypeId) { if (/^TRANSFORM_/.test(actionTypeId)) { return RENDER_TRANSFORM; } if (/^STYLE_/.test(actionTypeId)) { return RENDER_STYLE; } if (/^GENERAL_/.test(actionTypeId)) { return RENDER_GENERAL; } if (/^PLUGIN_/.test(actionTypeId)) { return RENDER_PLUGIN; } } function getStyleProp(renderType, actionTypeId) { return renderType === RENDER_STYLE ? actionTypeId.replace('STYLE_', '').toLowerCase() : null; } function renderHTMLElement(element, refState, actionState, eventId, actionItem, styleProp, elementApi, renderType, pluginInstance) { switch(renderType){ case RENDER_TRANSFORM: { return renderTransform(element, refState, actionState, actionItem, elementApi); } case RENDER_STYLE: { return renderStyle(element, refState, actionState, actionItem, styleProp, elementApi); } case RENDER_GENERAL: { return renderGeneral(element, actionItem, elementApi); } case RENDER_PLUGIN: { const { actionTypeId } = actionItem; if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) { return (0, _IX2VanillaPlugins.renderPlugin)(actionTypeId)(pluginInstance, refState, actionItem); } } } } const transformDefaults = { [TRANSFORM_MOVE]: Object.freeze({ xValue: 0, yValue: 0, zValue: 0 }), [TRANSFORM_SCALE]: Object.freeze({ xValue: 1, yValue: 1, zValue: 1 }), [TRANSFORM_ROTATE]: Object.freeze({ xValue: 0, yValue: 0, zValue: 0 }), [TRANSFORM_SKEW]: Object.freeze({ xValue: 0, yValue: 0 }) }; const filterDefaults = Object.freeze({ blur: 0, 'hue-rotate': 0, invert: 0, grayscale: 0, saturate: 100, sepia: 0, contrast: 100, brightness: 100 }); const fontVariationDefaults = Object.freeze({ wght: 0, opsz: 0, wdth: 0, slnt: 0 }); // @ts-expect-error - TS7006 - Parameter 'filterType' implicitly has an 'any' type. | TS7006 - Parameter 'actionItemConfig' implicitly has an 'any' type. const getFilterUnit = (filterType, actionItemConfig)=>{ const filter = (0, _findLast.default)(actionItemConfig.filters, ({ type })=>type === filterType); if (filter && filter.unit) { return filter.unit; } switch(filterType){ case 'blur': return 'px'; case 'hue-rotate': return 'deg'; default: return '%'; } }; const transformKeys = Object.keys(transformDefaults); function renderTransform(element, refState, actionState, actionItem, elementApi) { const newTransform = transformKeys.map((actionTypeId)=>{ // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ readonly TRANSFORM_MOVE: Readonly<{ xValue: 0; yValue: 0; zValue: 0; }>; readonly TRANSFORM_SCALE: Readonly<{ xValue: 1; yValue: 1; zValue: 1; }>; readonly TRANSFORM_ROTATE: Readonly<{ xValue: 0; yValue: 0; zValue: 0; }>; readonly TRANSFORM_SKEW: Readonly<...>; }'. const defaults = transformDefaults[actionTypeId]; const { xValue = defaults.xValue, yValue = defaults.yValue, zValue = defaults.zValue, xUnit = '', yUnit = '', zUnit = '' } = refState[actionTypeId] || {}; switch(actionTypeId){ case TRANSFORM_MOVE: return `${TRANSLATE_3D}(${xValue}${xUnit}, ${yValue}${yUnit}, ${zValue}${zUnit})`; case TRANSFORM_SCALE: return `${SCALE_3D}(${xValue}${xUnit}, ${yValue}${yUnit}, ${zValue}${zUnit})`; case TRANSFORM_ROTATE: return `${ROTATE_X}(${xValue}${xUnit}) ${ROTATE_Y}(${yValue}${yUnit}) ${ROTATE_Z}(${zValue}${zUnit})`; case TRANSFORM_SKEW: return `${SKEW}(${xValue}${xUnit}, ${yValue}${yUnit})`; default: return ''; } }).join(' '); const { setStyle } = elementApi; addWillChange(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, elementApi); setStyle(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, newTransform); // Set transform-style: preserve-3d if (hasDefined3dTransform(actionItem, actionState)) { setStyle(element, _IX2BrowserSupport.TRANSFORM_STYLE_PREFIXED, PRESERVE_3D); } } function renderFilter(element, actionState, // @ts-expect-error - TS7006 - Parameter 'actionItemConfig' implicitly has an 'any' type. actionItemConfig, elementApi) { const filterValue = (0, _reduce.default)(actionState, (result, value, type)=>`${result} ${type}(${value}${getFilterUnit(type, actionItemConfig)})`, ''); const { setStyle } = elementApi; addWillChange(element, FILTER, elementApi); setStyle(element, FILTER, filterValue); } function renderFontVariation(element, actionState, actionItemConfig, elementApi) { const fontVariationValue = (0, _reduce.default)(actionState, (result, value, type)=>{ // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'never'. result.push(`"${type}" ${value}`); return result; }, []).join(', '); const { setStyle } = elementApi; addWillChange(element, FONT_VARIATION_SETTINGS, elementApi); setStyle(element, FONT_VARIATION_SETTINGS, fontVariationValue); } // @ts-expect-error - TS7031 - Binding element 'actionTypeId' implicitly has an 'any' type. | TS7031 - Binding element 'xValue' implicitly has an 'any' type. | TS7031 - Binding element 'yValue' implicitly has an 'any' type. | TS7031 - Binding element 'zValue' implicitly has an 'any' type. function hasDefined3dTransform({ actionTypeId }, { xValue, yValue, zValue }) { // TRANSLATE_Z return actionTypeId === TRANSFORM_MOVE && zValue !== undefined || // SCALE_Z actionTypeId === TRANSFORM_SCALE && zValue !== undefined || // ROTATE_X or ROTATE_Y actionTypeId === TRANSFORM_ROTATE && (xValue !== undefined || yValue !== undefined); } const paramCapture = '\\(([^)]+)\\)'; const rgbValidRegex = /^rgb/; const rgbMatchRegex = RegExp(`rgba?${paramCapture}`); function getFirstMatch(regex, value) { const match = regex.exec(value); return match ? match[1] : ''; } // @ts-expect-error - TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'actionTypeId' implicitly has an 'any' type. | TS7031 - Binding element 'computedStyle' implicitly has an 'any' type. | TS7031 - Binding element 'getStyle' implicitly has an 'any' type. function parseColor({ element, actionTypeId, computedStyle, getStyle }) { // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'Readonly<{ STYLE_BACKGROUND_COLOR: "backgroundColor"; STYLE_BORDER: "borderColor"; STYLE_TEXT_COLOR: "color"; }>'. const prop = colorStyleProps[actionTypeId]; const inlineValue = getStyle(element, prop); const value = rgbValidRegex.test(inlineValue) ? inlineValue : computedStyle[prop]; // @ts-expect-error - TS2532 - Object is possibly 'undefined'. const matches = getFirstMatch(rgbMatchRegex, value).split(COMMA_DELIMITER); return { // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'. rValue: (0, _defaultTo.default)(parseInt(matches[0], 10), 255), // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'. gValue: (0, _defaultTo.default)(parseInt(matches[1], 10), 255), // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'. bValue: (0, _defaultTo.default)(parseInt(matches[2], 10), 255), // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'. aValue: (0, _defaultTo.default)(parseFloat(matches[3]), 1) }; } function renderStyle(element, refState, actionState, actionItem, styleProp, elementApi) { const { setStyle } = elementApi; switch(actionItem.actionTypeId){ case STYLE_SIZE: { let { widthUnit = '', heightUnit = '' } = actionItem.config; const { widthValue, heightValue } = actionState; if (widthValue !== undefined) { if (widthUnit === AUTO) { widthUnit = 'px'; } addWillChange(element, WIDTH, elementApi); setStyle(element, WIDTH, widthValue + widthUnit); } if (heightValue !== undefined) { if (heightUnit === AUTO) { heightUnit = 'px'; } addWillChange(element, HEIGHT, elementApi); setStyle(element, HEIGHT, heightValue + heightUnit); } break; } case STYLE_FILTER: { renderFilter(element, actionState, actionItem.config, elementApi); break; } case STYLE_FONT_VARIATION: { renderFontVariation(element, actionState, actionItem.config, elementApi); break; } case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: { const prop = colorStyleProps[actionItem.actionTypeId]; const rValue = Math.round(actionState.rValue); const gValue = Math.round(actionState.gValue); const bValue = Math.round(actionState.bValue); const aValue = actionState.aValue; addWillChange(element, prop, elementApi); setStyle(element, prop, aValue >= 1 ? `rgb(${rValue},${gValue},${bValue})` : `rgba(${rValue},${gValue},${bValue},${aValue})`); break; } default: { // @ts-expect-error - TS2339 - Property 'unit' does not exist on type '{ delay: number; easing: IX2EasingType; duration: number; target: ActionItemTargetType; xValue: number | undefined; yValue: number | undefined; zValue: number | undefined; xUnit: "%" | ... 4 more ... | "VW"; yUnit: "%" | ... 4 more ... | "VW"; zUnit: "%" | ... 4 more ... | "VW"; } | ... 5 more ... | { ...; }'. const { unit = '' } = actionItem.config; addWillChange(element, styleProp, elementApi); setStyle(element, styleProp, actionState.value + unit); break; } } } function renderGeneral(element, actionItem, elementApi) { const { setStyle } = elementApi; switch(actionItem.actionTypeId){ case GENERAL_DISPLAY: { const { value } = actionItem.config; if (value === FLEX && _IX2BrowserSupport.IS_BROWSER_ENV) { setStyle(element, DISPLAY, _IX2BrowserSupport.FLEX_PREFIXED); } else { setStyle(element, DISPLAY, value); } return; } } } // @ts-expect-error - TS7006 - Parameter 'element' implicitly has an 'any' type. | TS7006 - Parameter 'prop' implicitly has an 'any' type. function addWillChange(element, prop, elementApi) { if (!_IX2BrowserSupport.IS_BROWSER_ENV) { return; } const validProp = willChangeProps[prop]; if (!validProp) { return; } const { getStyle, setStyle } = elementApi; const value = getStyle(element, WILL_CHANGE); if (!value) { setStyle(element, WILL_CHANGE, validProp); return; } const values = value.split(COMMA_DELIMITER).map(trim); if (values.indexOf(validProp) === -1) { setStyle(element, WILL_CHANGE, values.concat(validProp).join(COMMA_DELIMITER)); } } // @ts-expect-error - TS7006 - Parameter 'prop' implicitly has an 'any' type. function removeWillChange(element, prop, elementApi) { if (!_IX2BrowserSupport.IS_BROWSER_ENV) { return; } const validProp = willChangeProps[prop]; if (!validProp) { return; } const { getStyle, setStyle } = elementApi; const value = getStyle(element, WILL_CHANGE); if (!value || value.indexOf(validProp) === -1) { return; } setStyle(element, WILL_CHANGE, value.split(COMMA_DELIMITER).map(trim)// @ts-expect-error - TS7006 - Parameter 'v' implicitly has an 'any' type. .filter((v)=>v !== validProp).join(COMMA_DELIMITER)); } function clearAllStyles({ store, elementApi }) { const { ixData } = store.getState(); const { events = {}, actionLists = {} } = ixData; Object.keys(events).forEach((eventId)=>{ const event = events[eventId]; const { config } = event.action; const { actionListId } = config; const actionList = actionLists[actionListId]; if (actionList) { clearActionListStyles({ actionList, event, elementApi }); } }); Object.keys(actionLists).forEach((actionListId)=>{ // @ts-expect-error - TS2345 - Argument of type '{ actionList: any; elementApi: any; }' is not assignable to parameter of type '{ actionList?: {} | undefined; event: any; elementApi: any; }'. clearActionListStyles({ actionList: actionLists[actionListId], elementApi }); }); } // @ts-expect-error - TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'elementApi' implicitly has an 'any' type. function clearActionListStyles({ actionList = {}, event, elementApi }) { // @ts-expect-error - TS2339 - Property 'actionItemGroups' does not exist on type '{}'. | TS2339 - Property 'continuousParameterGroups' does not exist on type '{}'. const { actionItemGroups, continuousParameterGroups } = actionList; actionItemGroups && // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type. actionItemGroups.forEach((actionGroup)=>{ clearActionGroupStyles({ actionGroup, event, elementApi }); }); continuousParameterGroups && // @ts-expect-error - TS7006 - Parameter 'paramGroup' implicitly has an 'any' type. continuousParameterGroups.forEach((paramGroup)=>{ const { continuousActionGroups } = paramGroup; // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type. continuousActionGroups.forEach((actionGroup)=>{ clearActionGroupStyles({ actionGroup, event, elementApi }); }); }); } // @ts-expect-error - TS7031 - Binding element 'actionGroup' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'elementApi' implicitly has an 'any' type. function clearActionGroupStyles({ actionGroup, event, elementApi }) { const { actionItems } = actionGroup; // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. actionItems.forEach((actionItem)=>{ const { actionTypeId, config } = actionItem; let clearElement; if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) { // @ts-expect-error - TS7006 - Parameter 'ref' implicitly has an 'any' type. clearElement = (ref)=>(0, _IX2VanillaPlugins.clearPlugin)(actionTypeId)(ref, actionItem); } else { clearElement = processElementByType({ effect: clearStyleProp, actionTypeId, elementApi }); } getAffectedElements({ config, event, elementApi }).forEach(clearElement); }); } function cleanupHTMLElement(element, actionItem, elementApi) { const { setStyle, getStyle } = elementApi; const { actionTypeId } = actionItem; if (actionTypeId === STYLE_SIZE) { const { config } = actionItem; if (config.widthUnit === AUTO) { setStyle(element, WIDTH, ''); } if (config.heightUnit === AUTO) { setStyle(element, HEIGHT, ''); } } if (getStyle(element, WILL_CHANGE)) { processElementByType({ effect: removeWillChange, actionTypeId, elementApi })(element); } } const processElementByType = ({ effect, actionTypeId, elementApi })=>// @ts-expect-error - TS7006 - Parameter 'element' implicitly has an 'any' type. (element)=>{ switch(actionTypeId){ case TRANSFORM_MOVE: case TRANSFORM_SCALE: case TRANSFORM_ROTATE: case TRANSFORM_SKEW: effect(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, elementApi); break; case STYLE_FILTER: effect(element, FILTER, elementApi); break; case STYLE_FONT_VARIATION: effect(element, FONT_VARIATION_SETTINGS, elementApi); break; case STYLE_OPACITY: effect(element, OPACITY, elementApi); break; case STYLE_SIZE: effect(element, WIDTH, elementApi); effect(element, HEIGHT, elementApi); break; case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: effect(element, colorStyleProps[actionTypeId], elementApi); break; case GENERAL_DISPLAY: effect(element, DISPLAY, elementApi); break; } }; // @ts-expect-error - TS7006 - Parameter 'prop' implicitly has an 'any' type. function clearStyleProp(element, prop, elementApi) { const { setStyle } = elementApi; removeWillChange(element, prop, elementApi); setStyle(element, prop, ''); // Clear transform-style: preserve-3d if (prop === _IX2BrowserSupport.TRANSFORM_PREFIXED) { setStyle(element, _IX2BrowserSupport.TRANSFORM_STYLE_PREFIXED, ''); } } function getMaxDurationItemIndex(actionItems) { let maxDuration = 0; let resultIndex = 0; // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type. actionItems.forEach((actionItem, index)=>{ const { config } = actionItem; const total = config.delay + config.duration; if (total >= maxDuration) { maxDuration = total; resultIndex = index; } }); return resultIndex; } function getActionListProgress(actionList, instance) { const { actionItemGroups, useFirstGroupAsInitialState } = actionList; const { actionItem: instanceItem, verboseTimeElapsed = 0 } = instance; let totalDuration = 0; let elapsedDuration = 0; // @ts-expect-error - TS7006 - Parameter 'group' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type. actionItemGroups.forEach((group, index)=>{ if (useFirstGroupAsInitialState && index === 0) { return; } const { actionItems } = group; const carrierItem = actionItems[getMaxDurationItemIndex(actionItems)]; const { config, actionTypeId } = carrierItem; if (instanceItem.id === carrierItem.id) { elapsedDuration = totalDuration + verboseTimeElapsed; } const duration = getRenderType(actionTypeId) === RENDER_GENERAL ? 0 : config.duration; totalDuration += config.delay + duration; }); return totalDuration > 0 ? (0, _IX2EasingUtils.optimizeFloat)(elapsedDuration / totalDuration) : 0; } function reduceListToGroup({ actionList, actionItemId, rawData }) { // @ts-expect-error - FIXME - TS2339 - Property 'actionItemGroups' does not exist on type 'ActionListType'. const { actionItemGroups, continuousParameterGroups } = actionList; const newActionItems = []; const takeItemUntilMatch = (actionItem)=>{ newActionItems.push((0, _timm.mergeIn)(actionItem, [ 'config' ], { delay: 0, duration: 0 })); return actionItem.id === actionItemId; }; actionItemGroups && actionItemGroups.some(({ actionItems })=>{ return actionItems.some(takeItemUntilMatch); }); continuousParameterGroups && continuousParameterGroups.some((paramGroup)=>{ const { continuousActionGroups } = paramGroup; return continuousActionGroups.some(({ actionItems })=>{ return actionItems.some(takeItemUntilMatch); }); }); return (0, _timm.setIn)(rawData, [ 'actionLists' ], { [actionList.id]: { id: actionList.id, actionItemGroups: [ { actionItems: newActionItems } ] } }); } function shouldNamespaceEventParameter(eventTypeId, { basedOn }) { return eventTypeId === _sharedconstants.EventTypeConsts.SCROLLING_IN_VIEW && (basedOn === _sharedconstants.EventBasedOn.ELEMENT || basedOn == null) || eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_MOVE && basedOn === _sharedconstants.EventBasedOn.ELEMENT; } function getNamespacedParameterId(eventStateKey, continuousParameterGroupId) { const namespacedParameterId = eventStateKey + COLON_DELIMITER + continuousParameterGroupId; return namespacedParameterId; } function shouldAllowMediaQuery(mediaQueries, mediaQueryKey) { // During design mode, current media query key does not exist if (mediaQueryKey == null) { return true; } return mediaQueries.indexOf(mediaQueryKey) !== -1; } function mediaQueriesEqual(listA, listB) { return (0, _shallowEqual.default)(listA && listA.sort(), listB && listB.sort()); } function stringifyTarget(target) { if (typeof target === 'string') { return target; } if (target.pluginElement && target.objectId) { return target.pluginElement + BAR_DELIMITER + target.objectId; } if (target.objectId) { return target.objectId; } const { id = '', selector = '', useEventTarget = '' } = target; return id + BAR_DELIMITER + selector + BAR_DELIMITER + useEventTarget; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhbmlsbGFVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCxcbiAgQWN0aW9uSXRlbVR5cGUsXG4gIEFjdGlvbklkLFxuICBGb250VmFyaWF0aW9uSXRlbUNvbmZpZ1R5cGUsXG4gIEZvbnRWYXJpYXRpb25BY3Rpb25Db25maWdUeXBlLFxuICBFdmVudFR5cGUsXG4gIEFjdGlvbkxpc3RUeXBlLFxuICBBY3Rpb25JdGVtc1R5cGUsXG4gIENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cFR5cGUsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcblxuaW1wb3J0IGRlZmF1bHRUbyBmcm9tICdsb2Rhc2gvZGVmYXVsdFRvJztcbmltcG9ydCByZWR1Y2UgZnJvbSAnbG9kYXNoL3JlZHVjZSc7XG5pbXBvcnQgZmluZExhc3QgZnJvbSAnbG9kYXNoL2ZpbmRMYXN0JztcbmltcG9ydCB7c2V0SW4sIG1lcmdlSW59IGZyb20gJ3RpbW0nO1xuaW1wb3J0IHtcbiAgRXZlbnRUeXBlQ29uc3RzLFxuICBFdmVudEFwcGxpZXNUbyxcbiAgRXZlbnRCYXNlZE9uLFxuICBBY3Rpb25UeXBlQ29uc3RzLFxuICBJWDJFbmdpbmVDb25zdGFudHMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnLi9zaGFsbG93RXF1YWwnO1xuXG5pbXBvcnQge29wdGltaXplRmxvYXR9IGZyb20gJy4vSVgyRWFzaW5nVXRpbHMnO1xuXG4vLyBJbXBvcnRpbmcgZGlyZWN0bHkgdG8gYXZvaWQgaW1wb3J0aW5nIHRoZSBlbnRpcmUgc2hhcmVkLXV0aWxzIHBhY2thZ2UuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2ViZmxvdy9wYWNrYWdlLWJvdW5kYXJpZXNcbmltcG9ydCB7bm9ybWFsaXplQ29sb3J9IGZyb20gJy4uLy4uL3NoYXJlZC11dGlscy9ub3JtYWxpemVDb2xvcic7XG5pbXBvcnQge1xuICBpc1BsdWdpblR5cGUsXG4gIGdldFBsdWdpbkNvbmZpZyxcbiAgZ2V0UGx1Z2luT3JpZ2luLFxuICBnZXRQbHVnaW5EZXN0aW5hdGlvbixcbiAgcmVuZGVyUGx1Z2luLFxuICBjbGVhclBsdWdpbixcbn0gZnJvbSAnLi9JWDJWYW5pbGxhUGx1Z2lucyc7XG5cbmltcG9ydCB7XG4gIElTX0JST1dTRVJfRU5WLFxuICBGTEVYX1BSRUZJWEVELFxuICBUUkFOU0ZPUk1fUFJFRklYRUQsXG4gIFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCxcbn0gZnJvbSAnLi9JWDJCcm93c2VyU3VwcG9ydCc7XG5pbXBvcnQge1xuICB0eXBlIElYMlJhd0RhdGEsXG4gIHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCxcbn0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZSc7XG5pbXBvcnQge0JyZWFrcG9pbnRJRH0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvc3R5bGUvdHlwZXMnO1xuXG50eXBlIFNlbGVjdG9yID0gYW55O1xuXG4vLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBhIHNoYXJlZCB0eXBlLlxudHlwZSBFbGVtZW50QXBpID0ge1xuICBnZXRTdHlsZTogKGFyZzE6IEhUTUxFbGVtZW50LCBhcmcyOiBzdHJpbmcpID0+IHN0cmluZztcbiAgc2V0U3R5bGU6IChhcmcxOiBIVE1MRWxlbWVudCwgYXJnMjogc3RyaW5nLCBhcmczOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGdldFByb3BlcnR5OiAoYXJnMTogSFRNTEVsZW1lbnQsIGFyZzI6IHN0cmluZykgPT4gbnVsbCB8IHN0cmluZztcbiAgZ2V0VmFsaWREb2N1bWVudDogKGFyZzE6IElYMlRhcmdldCkgPT4gYW55O1xuICBnZXRRdWVyeVNlbGVjdG9yOiAoYXJnMTogSVgyVGFyZ2V0KSA9PiBudWxsIHwgU2VsZWN0b3I7XG4gIC8vIFNob3VsZCB0aGVzZSBgQXJyYXlgcyBiZSBgTm9kZUxpc3Rgcz9cbiAgcXVlcnlEb2N1bWVudDogKFxuICAgIGFyZzE6IFNlbGVjdG9yLFxuICAgIGFyZzI/OiBTZWxlY3RvciB8IG51bGwgfCB1bmRlZmluZWRcbiAgKSA9PiBBcnJheTxIVE1MRWxlbWVudD47XG4gIGdldENoaWxkRWxlbWVudHM6IChcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzE1IC0gVHlwZSAnTm9kZUxpc3QnIGlzIG5vdCBnZW5lcmljLlxuICAgIGFyZzE6IE5vZGVMaXN0PEhUTUxFbGVtZW50PiB8IEFycmF5PEhUTUxFbGVtZW50PlxuICApID0+IEFycmF5PEhUTUxFbGVtZW50PjtcbiAgZ2V0U2libGluZ0VsZW1lbnRzOiAoXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMxNSAtIFR5cGUgJ05vZGVMaXN0JyBpcyBub3QgZ2VuZXJpYy5cbiAgICBhcmcxOiBOb2RlTGlzdDxIVE1MRWxlbWVudD4gfCBBcnJheTxIVE1MRWxlbWVudD5cbiAgKSA9PiBBcnJheTxIVE1MRWxlbWVudD47XG5cbiAgbWF0Y2hTZWxlY3RvcjogKGFyZzE6IFNlbGVjdG9yKSA9PiAoYXJnMTogSFRNTEVsZW1lbnQpID0+IGJvb2xlYW47XG4gIGVsZW1lbnRDb250YWluczogKGFyZzE6IEhUTUxFbGVtZW50LCBhcmcyOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgaXNTaWJsaW5nTm9kZTogKGFyZzE6IEhUTUxFbGVtZW50LCBhcmcyOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgLy8gLi4uIHdlJ3JlIG1pc3NpbmcgYSBsb3QgbW9yZSBoZXJlIC4uLjtcbn07XG5cbmNvbnN0IHtcbiAgQkFDS0dST1VORCxcbiAgVFJBTlNGT1JNLFxuICBUUkFOU0xBVEVfM0QsXG4gIFNDQUxFXzNELFxuICBST1RBVEVfWCxcbiAgUk9UQVRFX1ksXG4gIFJPVEFURV9aLFxuICBTS0VXLFxuICBQUkVTRVJWRV8zRCxcbiAgRkxFWCxcbiAgT1BBQ0lUWSxcbiAgRklMVEVSLFxuICBGT05UX1ZBUklBVElPTl9TRVRUSU5HUyxcbiAgV0lEVEgsXG4gIEhFSUdIVCxcbiAgQkFDS0dST1VORF9DT0xPUixcbiAgQk9SREVSX0NPTE9SLFxuICBDT0xPUixcbiAgQ0hJTERSRU4sXG4gIElNTUVESUFURV9DSElMRFJFTixcbiAgU0lCTElOR1MsXG4gIFBBUkVOVCxcbiAgRElTUExBWSxcbiAgV0lMTF9DSEFOR0UsXG4gIEFVVE8sXG4gIENPTU1BX0RFTElNSVRFUixcbiAgQ09MT05fREVMSU1JVEVSLFxuICBCQVJfREVMSU1JVEVSLFxuICBSRU5ERVJfVFJBTlNGT1JNLFxuICBSRU5ERVJfR0VORVJBTCxcbiAgUkVOREVSX1NUWUxFLFxuICBSRU5ERVJfUExVR0lOLFxufSA9IElYMkVuZ2luZUNvbnN0YW50cztcblxuY29uc3Qge1xuICBUUkFOU0ZPUk1fTU9WRSxcbiAgVFJBTlNGT1JNX1NDQUxFLFxuICBUUkFOU0ZPUk1fUk9UQVRFLFxuICBUUkFOU0ZPUk1fU0tFVyxcbiAgU1RZTEVfT1BBQ0lUWSxcbiAgU1RZTEVfRklMVEVSLFxuICBTVFlMRV9GT05UX1ZBUklBVElPTixcbiAgU1RZTEVfU0laRSxcbiAgU1RZTEVfQkFDS0dST1VORF9DT0xPUixcbiAgU1RZTEVfQk9SREVSLFxuICBTVFlMRV9URVhUX0NPTE9SLFxuICBHRU5FUkFMX0RJU1BMQVksXG4gIE9CSkVDVF9WQUxVRSxcbn0gPSBBY3Rpb25UeXBlQ29uc3RzO1xuXG5leHBvcnQge3NoYWxsb3dFcXVhbH07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3YnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5jb25zdCB0cmltID0gKHYpID0+IHYudHJpbSgpO1xuXG5jb25zdCBjb2xvclN0eWxlUHJvcHMgPSBPYmplY3QuZnJlZXplKHtcbiAgW1NUWUxFX0JBQ0tHUk9VTkRfQ09MT1JdOiBCQUNLR1JPVU5EX0NPTE9SLFxuICBbU1RZTEVfQk9SREVSXTogQk9SREVSX0NPTE9SLFxuICBbU1RZTEVfVEVYVF9DT0xPUl06IENPTE9SLFxufSk7XG5cbmNvbnN0IHdpbGxDaGFuZ2VQcm9wcyA9IE9iamVjdC5mcmVlemUoe1xuICBbVFJBTlNGT1JNX1BSRUZJWEVEXTogVFJBTlNGT1JNLFxuICBbQkFDS0dST1VORF9DT0xPUl06IEJBQ0tHUk9VTkQsXG4gIFtPUEFDSVRZXTogT1BBQ0lUWSxcbiAgW0ZJTFRFUl06IEZJTFRFUixcbiAgW1dJRFRIXTogV0lEVEgsXG4gIFtIRUlHSFRdOiBIRUlHSFQsXG4gIFtGT05UX1ZBUklBVElPTl9TRVRUSU5HU106IEZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTLFxufSk7XG5cbmNvbnN0IG9iamVjdENhY2hlID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJPYmplY3RDYWNoZSgpIHtcbiAgb2JqZWN0Q2FjaGUuY2xlYXIoKTtcbn1cblxubGV0IGluc3RhbmNlQ291bnQgPSAxO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc3RhbmNlSWQoKSB7XG4gIHJldHVybiAnaScgKyBpbnN0YW5jZUNvdW50Kys7XG59XG5cbmxldCBlbGVtZW50Q291bnQgPSAxO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRJZChpeEVsZW1lbnRzOiBhbnksIHJlZjogYW55KSB7XG4gIC8vIFRPRE86IG9wdGltaXplIGVsZW1lbnQgbG9va3VwXG4gIGZvciAoY29uc3Qga2V5IGluIGl4RWxlbWVudHMpIHtcbiAgICBjb25zdCBpeEVsID0gaXhFbGVtZW50c1trZXldO1xuICAgIGlmIChpeEVsICYmIGl4RWwucmVmID09PSByZWYpIHtcbiAgICAgIHJldHVybiBpeEVsLmlkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJ2UnICsgZWxlbWVudENvdW50Kys7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWlmeVN0YXRlKHtcbiAgZXZlbnRzLFxuICBhY3Rpb25MaXN0cyxcbiAgc2l0ZSxcbn06IFBhcnRpYWw8SVgyUmF3RGF0YT4gPSB7fSk6IHJhd0RhdGFJbXBvcnRlZFBheWxvYWQge1xuICBjb25zdCBldmVudFR5cGVNYXAgPSByZWR1Y2UoXG4gICAgZXZlbnRzLFxuICAgIChyZXN1bHQsIGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7ZXZlbnRUeXBlSWR9ID0gZXZlbnQ7XG5cbiAgICAgIGlmICghcmVzdWx0W2V2ZW50VHlwZUlkXSkge1xuICAgICAgICByZXN1bHRbZXZlbnRUeXBlSWRdID0ge30gYXMge1trZXk6IHN0cmluZ106IEV2ZW50VHlwZX07XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFtldmVudFR5cGVJZF1bZXZlbnQuaWRdID0gZXZlbnQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge30gYXMgcmF3RGF0YUltcG9ydGVkUGF5bG9hZFsnaXhEYXRhJ11bJ2V2ZW50VHlwZU1hcCddXG4gICk7XG5cbiAgbGV0IG1lZGlhUXVlcmllcyA9IHNpdGUgJiYgc2l0ZS5tZWRpYVF1ZXJpZXM7XG4gIGxldCBtZWRpYVF1ZXJ5S2V5cyA9IFtdIGFzIEJyZWFrcG9pbnRJRFtdO1xuICBpZiAobWVkaWFRdWVyaWVzKSB7XG4gICAgbWVkaWFRdWVyeUtleXMgPSBtZWRpYVF1ZXJpZXMubWFwKChtcSkgPT4gbXEua2V5KTtcbiAgfSBlbHNlIHtcbiAgICBtZWRpYVF1ZXJpZXMgPSBbXTtcbiAgICBjb25zb2xlLndhcm4oYElYMiBtaXNzaW5nIG1lZGlhUXVlcmllcyBpbiBzaXRlIGRhdGFgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXhEYXRhOiB7XG4gICAgICBldmVudHMsXG4gICAgICBhY3Rpb25MaXN0cyxcbiAgICAgIGV2ZW50VHlwZU1hcCxcbiAgICAgIG1lZGlhUXVlcmllcyxcbiAgICAgIG1lZGlhUXVlcnlLZXlzLFxuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IHN0cmljdEVxdWFsID0gKGE6IGFueSwgYjogYW55KSA9PiBhID09PSBiO1xuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVN0b3JlKHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnc3RvcmUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHN0b3JlLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzZWxlY3QnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHNlbGVjdCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnb25DaGFuZ2UnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIG9uQ2hhbmdlLFxuICBjb21wYXJhdG9yID0gc3RyaWN0RXF1YWwsXG59KSB7XG4gIGNvbnN0IHtnZXRTdGF0ZSwgc3Vic2NyaWJlfSA9IHN0b3JlO1xuICBjb25zdCB1bnN1YnNjcmliZSA9IHN1YnNjcmliZShoYW5kbGVDaGFuZ2UpO1xuICBsZXQgY3VycmVudFN0YXRlID0gc2VsZWN0KGdldFN0YXRlKCkpO1xuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKSB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gc2VsZWN0KGdldFN0YXRlKCkpO1xuICAgIGlmIChuZXh0U3RhdGUgPT0gbnVsbCkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjb21wYXJhdG9yKG5leHRTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgY3VycmVudFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgb25DaGFuZ2UoY3VycmVudFN0YXRlLCBzdG9yZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bnN1YnNjcmliZTtcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAndGFyZ2V0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gbm9ybWFsaXplVGFyZ2V0KHRhcmdldCkge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIHRhcmdldDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHtpZDogdGFyZ2V0fTtcbiAgfSBlbHNlIGlmICh0YXJnZXQgIT0gbnVsbCAmJiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHtpZCwgb2JqZWN0SWQsIHNlbGVjdG9yLCBzZWxlY3Rvckd1aWRzLCBhcHBsaWVzVG8sIHVzZUV2ZW50VGFyZ2V0fSA9XG4gICAgICB0YXJnZXQ7XG4gICAgcmV0dXJuIHtpZCwgb2JqZWN0SWQsIHNlbGVjdG9yLCBzZWxlY3Rvckd1aWRzLCBhcHBsaWVzVG8sIHVzZUV2ZW50VGFyZ2V0fTtcbiAgfVxuICByZXR1cm4ge307XG59XG5cbnR5cGUgSVgyVGFyZ2V0ID0gYW55OyAvLyBzZXJpYWxpemVkIElYMkV2ZW50VGFyZ2V0RGF0YVxuXG50eXBlIEFmZmVjdGVkRWxlbWVudHNQcm9wcyA9IHtcbiAgY29uZmlnOiB7XG4gICAgdGFyZ2V0OiBJWDJUYXJnZXQ7XG4gICAgdGFyZ2V0cz86IEFycmF5PElYMlRhcmdldD47XG4gIH07XG4gIGV2ZW50PzogYW55OyAvLyBzZXJpYWxpemVkIElYMkV2ZW50VHlwZTtcbiAgZXZlbnRUYXJnZXQ/OiBIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGVsZW1lbnRSb290PzogSFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBlbGVtZW50QXBpOiBFbGVtZW50QXBpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFmZmVjdGVkRWxlbWVudHMoe1xuICBjb25maWcsXG4gIGV2ZW50LFxuICBldmVudFRhcmdldCxcbiAgZWxlbWVudFJvb3QsXG4gIGVsZW1lbnRBcGksXG59OiBBZmZlY3RlZEVsZW1lbnRzUHJvcHMpOiBBcnJheTxIVE1MRWxlbWVudCB8IGFueT4ge1xuICBpZiAoIWVsZW1lbnRBcGkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lYMiBtaXNzaW5nIGVsZW1lbnRBcGknKTtcbiAgfVxuXG4gIGNvbnN0IHt0YXJnZXRzfSA9IGNvbmZpZztcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0cykgJiYgdGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRhcmdldHMucmVkdWNlPEFycmF5PGFueT4+KFxuICAgICAgKGFjY3VtdWxhdG9yLCB0YXJnZXQpOiBBcnJheTxIVE1MRWxlbWVudD4gPT5cbiAgICAgICAgYWNjdW11bGF0b3IuY29uY2F0KFxuICAgICAgICAgIGdldEFmZmVjdGVkRWxlbWVudHMoe1xuICAgICAgICAgICAgY29uZmlnOiB7dGFyZ2V0fSxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgICAgICBlbGVtZW50Um9vdCxcbiAgICAgICAgICAgIGVsZW1lbnRBcGksXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIFtdXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBnZXRWYWxpZERvY3VtZW50LFxuICAgIGdldFF1ZXJ5U2VsZWN0b3IsXG4gICAgcXVlcnlEb2N1bWVudCxcbiAgICBnZXRDaGlsZEVsZW1lbnRzLFxuICAgIGdldFNpYmxpbmdFbGVtZW50cyxcbiAgICBtYXRjaFNlbGVjdG9yLFxuICAgIGVsZW1lbnRDb250YWlucyxcbiAgICBpc1NpYmxpbmdOb2RlLFxuICB9ID0gZWxlbWVudEFwaTtcblxuICBjb25zdCB7dGFyZ2V0fSA9IGNvbmZpZztcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7XG4gICAgaWQsXG5cbiAgICBvYmplY3RJZCxcblxuICAgIHNlbGVjdG9yLFxuXG4gICAgc2VsZWN0b3JHdWlkcyxcblxuICAgIGFwcGxpZXNUbyxcblxuICAgIHVzZUV2ZW50VGFyZ2V0LFxuICB9ID0gbm9ybWFsaXplVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKG9iamVjdElkKSB7XG4gICAgY29uc3QgcmVmID0gb2JqZWN0Q2FjaGUuaGFzKG9iamVjdElkKVxuICAgICAgPyBvYmplY3RDYWNoZS5nZXQob2JqZWN0SWQpXG4gICAgICA6IG9iamVjdENhY2hlLnNldChvYmplY3RJZCwge30pLmdldChvYmplY3RJZCk7XG4gICAgcmV0dXJuIFtyZWZdO1xuICB9XG5cbiAgaWYgKGFwcGxpZXNUbyA9PT0gRXZlbnRBcHBsaWVzVG8uUEFHRSkge1xuICAgIGNvbnN0IGRvYyA9IGdldFZhbGlkRG9jdW1lbnQoaWQpO1xuICAgIHJldHVybiBkb2MgPyBbZG9jXSA6IFtdO1xuICB9XG5cbiAgY29uc3Qgb3ZlcnJpZGVzID0gZXZlbnQ/LmFjdGlvbj8uY29uZmlnPy5hZmZlY3RlZEVsZW1lbnRzID8/IHt9O1xuICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlc1tpZCB8fCBzZWxlY3Rvcl0gfHwge307XG4gIGNvbnN0IHZhbGlkT3ZlcnJpZGUgPSBCb29sZWFuKG92ZXJyaWRlLmlkIHx8IG92ZXJyaWRlLnNlbGVjdG9yKTtcblxuICBsZXQgbGltaXRBZmZlY3RlZEVsZW1lbnRzO1xuICBsZXQgYmFzZVNlbGVjdG9yO1xuICBsZXQgZmluYWxTZWxlY3RvcjtcblxuICBjb25zdCBldmVudFRhcmdldFNlbGVjdG9yID1cbiAgICBldmVudCAmJiBnZXRRdWVyeVNlbGVjdG9yKG5vcm1hbGl6ZVRhcmdldChldmVudC50YXJnZXQpKTtcblxuICBpZiAodmFsaWRPdmVycmlkZSkge1xuICAgIGxpbWl0QWZmZWN0ZWRFbGVtZW50cyA9IG92ZXJyaWRlLmxpbWl0QWZmZWN0ZWRFbGVtZW50cztcbiAgICBiYXNlU2VsZWN0b3IgPSBldmVudFRhcmdldFNlbGVjdG9yO1xuICAgIGZpbmFsU2VsZWN0b3IgPSBnZXRRdWVyeVNlbGVjdG9yKG92ZXJyaWRlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBwYXNzIGluIHNlbGVjdG9yR3VpZHMgYXMgd2VsbCBmb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGJhc2VTZWxlY3RvciA9IGZpbmFsU2VsZWN0b3IgPSBnZXRRdWVyeVNlbGVjdG9yKHtcbiAgICAgIGlkLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBzZWxlY3Rvckd1aWRzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGV2ZW50ICYmIHVzZUV2ZW50VGFyZ2V0KSB7XG4gICAgLy8gZXZlbnRUYXJnZXQgaXMgbm90IGRlZmluZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBhIGNsZWFyIHJlcXVlc3QsIHNvIGZpbmRcbiAgICAvLyBhbGwgdGFyZ2V0IGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgZGF0YSwgYW5kIHJldHVybiBhZmZlY3RlZCBlbGVtZW50cy5cbiAgICBjb25zdCBldmVudFRhcmdldHMgPVxuICAgICAgZXZlbnRUYXJnZXQgJiYgKGZpbmFsU2VsZWN0b3IgfHwgdXNlRXZlbnRUYXJnZXQgPT09IHRydWUpXG4gICAgICAgID8gW2V2ZW50VGFyZ2V0XVxuICAgICAgICA6IHF1ZXJ5RG9jdW1lbnQoZXZlbnRUYXJnZXRTZWxlY3Rvcik7XG5cbiAgICBpZiAoZmluYWxTZWxlY3Rvcikge1xuICAgICAgaWYgKHVzZUV2ZW50VGFyZ2V0ID09PSBQQVJFTlQpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5RG9jdW1lbnQoZmluYWxTZWxlY3RvcikuZmlsdGVyKChwYXJlbnRFbGVtZW50KSA9PlxuICAgICAgICAgIGV2ZW50VGFyZ2V0cy5zb21lKCh0YXJnZXRFbGVtZW50KSA9PlxuICAgICAgICAgICAgZWxlbWVudENvbnRhaW5zKHBhcmVudEVsZW1lbnQsIHRhcmdldEVsZW1lbnQpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHVzZUV2ZW50VGFyZ2V0ID09PSBDSElMRFJFTikge1xuICAgICAgICByZXR1cm4gcXVlcnlEb2N1bWVudChmaW5hbFNlbGVjdG9yKS5maWx0ZXIoKGNoaWxkRWxlbWVudCkgPT5cbiAgICAgICAgICBldmVudFRhcmdldHMuc29tZSgodGFyZ2V0RWxlbWVudCkgPT5cbiAgICAgICAgICAgIGVsZW1lbnRDb250YWlucyh0YXJnZXRFbGVtZW50LCBjaGlsZEVsZW1lbnQpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHVzZUV2ZW50VGFyZ2V0ID09PSBTSUJMSU5HUykge1xuICAgICAgICByZXR1cm4gcXVlcnlEb2N1bWVudChmaW5hbFNlbGVjdG9yKS5maWx0ZXIoKHNpYmxpbmdFbGVtZW50KSA9PlxuICAgICAgICAgIGV2ZW50VGFyZ2V0cy5zb21lKCh0YXJnZXRFbGVtZW50KSA9PlxuICAgICAgICAgICAgaXNTaWJsaW5nTm9kZSh0YXJnZXRFbGVtZW50LCBzaWJsaW5nRWxlbWVudClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBldmVudFRhcmdldHM7XG4gIH1cblxuICBpZiAoYmFzZVNlbGVjdG9yID09IG51bGwgfHwgZmluYWxTZWxlY3RvciA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKElTX0JST1dTRVJfRU5WICYmIGVsZW1lbnRSb290KSB7XG4gICAgcmV0dXJuIHF1ZXJ5RG9jdW1lbnQoZmluYWxTZWxlY3RvcikuZmlsdGVyKChlbGVtZW50KSA9PlxuICAgICAgZWxlbWVudFJvb3QuY29udGFpbnMoZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgaWYgKGxpbWl0QWZmZWN0ZWRFbGVtZW50cyA9PT0gQ0hJTERSRU4pIHtcbiAgICByZXR1cm4gcXVlcnlEb2N1bWVudChiYXNlU2VsZWN0b3IsIGZpbmFsU2VsZWN0b3IpO1xuICB9IGVsc2UgaWYgKGxpbWl0QWZmZWN0ZWRFbGVtZW50cyA9PT0gSU1NRURJQVRFX0NISUxEUkVOKSB7XG4gICAgcmV0dXJuIGdldENoaWxkRWxlbWVudHMocXVlcnlEb2N1bWVudChiYXNlU2VsZWN0b3IpKS5maWx0ZXIoXG4gICAgICBtYXRjaFNlbGVjdG9yKGZpbmFsU2VsZWN0b3IpXG4gICAgKTtcbiAgfSBlbHNlIGlmIChsaW1pdEFmZmVjdGVkRWxlbWVudHMgPT09IFNJQkxJTkdTKSB7XG4gICAgcmV0dXJuIGdldFNpYmxpbmdFbGVtZW50cyhxdWVyeURvY3VtZW50KGJhc2VTZWxlY3RvcikpLmZpbHRlcihcbiAgICAgIG1hdGNoU2VsZWN0b3IoZmluYWxTZWxlY3RvcilcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBxdWVyeURvY3VtZW50KGZpbmFsU2VsZWN0b3IpO1xuICB9XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2VsZW1lbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25JdGVtJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoe2VsZW1lbnQsIGFjdGlvbkl0ZW19KSB7XG4gIGlmICghSVNfQlJPV1NFUl9FTlYpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgY29uc3Qge2FjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuICBzd2l0Y2ggKGFjdGlvblR5cGVJZCkge1xuICAgIGNhc2UgU1RZTEVfU0laRTpcbiAgICBjYXNlIFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6XG4gICAgY2FzZSBTVFlMRV9CT1JERVI6XG4gICAgY2FzZSBTVFlMRV9URVhUX0NPTE9SOlxuICAgIGNhc2UgR0VORVJBTF9ESVNQTEFZOlxuICAgICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuY29uc3QgcHhWYWx1ZVJlZ2V4ID0gL3B4LztcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVycycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmNvbnN0IGdldEZpbHRlckRlZmF1bHRzID0gKGFjdGlvblN0YXRlOiBhbnksIGZpbHRlcnMpID0+XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Jlc3VsdCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2ZpbHRlcicgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgZmlsdGVycy5yZWR1Y2UoKHJlc3VsdCwgZmlsdGVyKSA9PiB7XG4gICAgaWYgKHJlc3VsdFtmaWx0ZXIudHlwZV0gPT0gbnVsbCkge1xuICAgICAgcmVzdWx0W2ZpbHRlci50eXBlXSA9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICdSZWFkb25seTx7IGJsdXI6IDA7ICdodWUtcm90YXRlJzogMDsgaW52ZXJ0OiAwOyBncmF5c2NhbGU6IDA7IHNhdHVyYXRlOiAxMDA7IHNlcGlhOiAwOyBjb250cmFzdDogMTAwOyBicmlnaHRuZXNzOiAxMDA7IH0+Jy5cbiAgICAgICAgZmlsdGVyRGVmYXVsdHNbZmlsdGVyLnR5cGVdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIGFjdGlvblN0YXRlIHx8IHt9KTtcblxuY29uc3QgZ2V0Rm9udFZhcmlhdGlvbkRlZmF1bHRzID0gKFxuICBhY3Rpb25TdGF0ZTogYW55LFxuICBmb250VmFyaWF0aW9uczogQXJyYXk8Rm9udFZhcmlhdGlvbkl0ZW1Db25maWdUeXBlPlxuKSA9PlxuICBmb250VmFyaWF0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgZm9udFZhcmlhdGlvbikgPT4ge1xuICAgIGlmIChyZXN1bHRbZm9udFZhcmlhdGlvbi50eXBlXSA9PSBudWxsKSB7XG4gICAgICByZXN1bHRbZm9udFZhcmlhdGlvbi50eXBlXSA9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ3N0cmluZycgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICdSZWFkb25seTx7IHdnaHQ6IDA7IG9wc3o6IDA7IHdkdGg6IDA7IHNsbnQ6IDA7IH0+Jy5cbiAgICAgICAgZm9udFZhcmlhdGlvbkRlZmF1bHRzW2ZvbnRWYXJpYXRpb24udHlwZV0gfHxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdkZWZhdWx0VmFsdWUnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0ZvbnRWYXJpYXRpb25JdGVtQ29uZmlnVHlwZScuXG4gICAgICAgIGZvbnRWYXJpYXRpb24uZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgYWN0aW9uU3RhdGUgfHwge30pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zdGFuY2VPcmlnaW4oXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuXG4gIHJlZlN0YXRlID0ge30sXG4gIGNvbXB1dGVkU3R5bGU6XG4gICAgfCB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICAgIH1cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZCA9IHt9LFxuICBhY3Rpb25JdGVtOiBBY3Rpb25JdGVtVHlwZSxcbiAgZWxlbWVudEFwaTogRWxlbWVudEFwaVxuKSB7XG4gIGNvbnN0IHtnZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICAvLyBGbG93IEhhY2s6IFBhc3NpbmcgYWN0aW9uVHlwZUlkIHRvIGlzUGx1Z2luVHlwZSBhbmQgdGhlbiB0cnlpbmdcbiAgLy8gdG8gZG8gdHlwZSByZWZpbmVtZW50IHVzaW5nIHRoZSBzYW1lIHZhcmlhYmxlIHZpYSBhIHN3aXRjaCBzdGF0ZW1lbnRcbiAgLy8gYnJlYWtzIGRvd24uIFRoaXMgaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB3ZSBjYW4gdXNlIHR5cGUgcmVmaW5lbWVudC5cbiAgY29uc3Qge2FjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuXG4gIGlmIChpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKSkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCIgfCBcIlNUWUxFX09QQUNJVFlcIiB8IFwiU1RZTEVfU0laRVwiIHwgXCJTVFlMRV9GSUxURVJcIiB8IFwiU1RZTEVfRk9OVF9WQVJJQVRJT05cIiB8IFwiU1RZTEVfQkFDS0dST1VORF9DT0xPUlwiIHwgXCJTVFlMRV9CT1JERVJcIiB8IFwiU1RZTEVfVEVYVF9DT0xPUlwiIHwgXCJQTFVHSU5fTE9UVElFXCIgfCBcIkdFTkVSQUxfRElTUExBWVwiJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnUGx1Z2luVHlwZScuIHwgVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCIgfCBcIlNUWUxFX09QQUNJVFlcIiB8IFwiU1RZTEVfU0laRVwiIHwgXCJTVFlMRV9GSUxURVJcIiB8IFwiU1RZTEVfRk9OVF9WQVJJQVRJT05cIiB8IFwiU1RZTEVfQkFDS0dST1VORF9DT0xPUlwiIHwgXCJTVFlMRV9CT1JERVJcIiB8IFwiU1RZTEVfVEVYVF9DT0xPUlwiIHwgXCJQTFVHSU5fTE9UVElFXCIgfCBcIkdFTkVSQUxfRElTUExBWVwiJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3t9Jy5cbiAgICByZXR1cm4gZ2V0UGx1Z2luT3JpZ2luKGFjdGlvblR5cGVJZCkocmVmU3RhdGVbYWN0aW9uVHlwZUlkXSwgYWN0aW9uSXRlbSk7XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBUUkFOU0ZPUk1fTU9WRTpcbiAgICBjYXNlIFRSQU5TRk9STV9TQ0FMRTpcbiAgICBjYXNlIFRSQU5TRk9STV9ST1RBVEU6XG4gICAgY2FzZSBUUkFOU0ZPUk1fU0tFVzoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnXCJUUkFOU0ZPUk1fTU9WRVwiIHwgXCJUUkFOU0ZPUk1fU0NBTEVcIiB8IFwiVFJBTlNGT1JNX1JPVEFURVwiIHwgXCJUUkFOU0ZPUk1fU0tFV1wiJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3t9Jy5cbiAgICAgICAgcmVmU3RhdGVbYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWRdIHx8XG4gICAgICAgIHRyYW5zZm9ybURlZmF1bHRzW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXVxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBTVFlMRV9GSUxURVI6XG4gICAgICByZXR1cm4gZ2V0RmlsdGVyRGVmYXVsdHMoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ1wiU1RZTEVfRklMVEVSXCInIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAne30nLlxuICAgICAgICByZWZTdGF0ZVthY3Rpb25JdGVtLmFjdGlvblR5cGVJZF0sXG4gICAgICAgIGFjdGlvbkl0ZW0uY29uZmlnLmZpbHRlcnNcbiAgICAgICk7XG4gICAgY2FzZSBTVFlMRV9GT05UX1ZBUklBVElPTjpcbiAgICAgIHJldHVybiBnZXRGb250VmFyaWF0aW9uRGVmYXVsdHMoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ1wiU1RZTEVfRk9OVF9WQVJJQVRJT05cIicgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7fScuXG4gICAgICAgIHJlZlN0YXRlW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXSxcbiAgICAgICAgYWN0aW9uSXRlbS5jb25maWcuZm9udFZhcmlhdGlvbnNcbiAgICAgICk7XG4gICAgY2FzZSBTVFlMRV9PUEFDSVRZOlxuICAgICAgcmV0dXJuIHt2YWx1ZTogZGVmYXVsdFRvKHBhcnNlRmxvYXQoZ2V0U3R5bGUoZWxlbWVudCwgT1BBQ0lUWSkpLCAxLjApfTtcbiAgICBjYXNlIFNUWUxFX1NJWkU6IHtcbiAgICAgIGNvbnN0IGlubGluZVdpZHRoID0gZ2V0U3R5bGUoZWxlbWVudCwgV0lEVEgpO1xuICAgICAgY29uc3QgaW5saW5lSGVpZ2h0ID0gZ2V0U3R5bGUoZWxlbWVudCwgSEVJR0hUKTtcbiAgICAgIGxldCB3aWR0aFZhbHVlO1xuICAgICAgbGV0IGhlaWdodFZhbHVlO1xuICAgICAgLy8gV2hlbiBkZXN0aW5hdGlvbiB1bml0IGlzICdBVVRPJywgZW5zdXJlIG9yaWdpbiB2YWx1ZXMgYXJlIGluIHB4XG4gICAgICBpZiAoYWN0aW9uSXRlbS5jb25maWcud2lkdGhVbml0ID09PSBBVVRPKSB7XG4gICAgICAgIHdpZHRoVmFsdWUgPSBweFZhbHVlUmVnZXgudGVzdChpbmxpbmVXaWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQoaW5saW5lV2lkdGgpXG4gICAgICAgICAgOiAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0NyAtICdjb21wdXRlZFN0eWxlJyBpcyBwb3NzaWJseSAnbnVsbCcuXG4gICAgICAgICAgICBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUud2lkdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhWYWx1ZSA9IGRlZmF1bHRUbyhcbiAgICAgICAgICBwYXJzZUZsb2F0KGlubGluZVdpZHRoKSxcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0NyAtICdjb21wdXRlZFN0eWxlJyBpcyBwb3NzaWJseSAnbnVsbCcuXG4gICAgICAgICAgcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLndpZHRoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbkl0ZW0uY29uZmlnLmhlaWdodFVuaXQgPT09IEFVVE8pIHtcbiAgICAgICAgaGVpZ2h0VmFsdWUgPSBweFZhbHVlUmVnZXgudGVzdChpbmxpbmVIZWlnaHQpXG4gICAgICAgICAgPyBwYXJzZUZsb2F0KGlubGluZUhlaWdodClcbiAgICAgICAgICA6IC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ3IC0gJ2NvbXB1dGVkU3R5bGUnIGlzIHBvc3NpYmx5ICdudWxsJy5cbiAgICAgICAgICAgIHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5oZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVpZ2h0VmFsdWUgPSBkZWZhdWx0VG8oXG4gICAgICAgICAgcGFyc2VGbG9hdChpbmxpbmVIZWlnaHQpLFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ3IC0gJ2NvbXB1dGVkU3R5bGUnIGlzIHBvc3NpYmx5ICdudWxsJy5cbiAgICAgICAgICBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuaGVpZ2h0KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGhWYWx1ZSxcbiAgICAgICAgaGVpZ2h0VmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6XG4gICAgY2FzZSBTVFlMRV9CT1JERVI6XG4gICAgY2FzZSBTVFlMRV9URVhUX0NPTE9SOlxuICAgICAgcmV0dXJuIHBhcnNlQ29sb3Ioe1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBhY3Rpb25UeXBlSWQ6IGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkLFxuICAgICAgICBjb21wdXRlZFN0eWxlLFxuICAgICAgICBnZXRTdHlsZSxcbiAgICAgIH0pO1xuICAgIGNhc2UgR0VORVJBTF9ESVNQTEFZOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMTgwNDcgLSAnY29tcHV0ZWRTdHlsZScgaXMgcG9zc2libHkgJ251bGwnLlxuICAgICAgICB2YWx1ZTogZGVmYXVsdFRvKGdldFN0eWxlKGVsZW1lbnQsIERJU1BMQVkpLCBjb21wdXRlZFN0eWxlLmRpc3BsYXkpLFxuICAgICAgfTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gYE9CSkVDVF9WQUxVRWAgaXMgbm90IGFuIGV4cGVjdGVkIGBhY3Rpb25UeXBlSWRgXG4gICAgY2FzZSBPQkpFQ1RfVkFMVUU6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdhbnknIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAne30nLiB8IFRTMjMzOSAtIFByb3BlcnR5ICdhY3Rpb25UeXBlSWQnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgICAgIHJldHVybiByZWZTdGF0ZVthY3Rpb25JdGVtLmFjdGlvblR5cGVJZF0gfHwge3ZhbHVlOiAwfTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICAvLyBBcyBmYXIgYXMgdGhlIHR5cGUgc3lzdGVtIGNhbiB0ZWxsLCB3ZSdyZSBtaXNzaW5nIGEgaGFuZGxlciBmb3JcbiAgICAgIC8vIFBMVUdJTl9MT1RUSUUuXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBoYW5kbGVkIGJ5IGBpc1BsdWdpblR5cGVgIGFib3ZlLlxuICAgICAgLy9cbiAgICAgIC8qOjogKGFjdGlvbkl0ZW06IGVtcHR5KTsgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAncmVzdWx0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVyJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3QgcmVkdWNlRmlsdGVycyA9IChyZXN1bHQsIGZpbHRlcikgPT4ge1xuICBpZiAoZmlsdGVyKSB7XG4gICAgcmVzdWx0W2ZpbHRlci50eXBlXSA9IGZpbHRlci52YWx1ZSB8fCAwO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCByZWR1Y2VGb250VmFyaWF0aW9ucyA9IChcbiAgcmVzdWx0OiBSZWNvcmQ8YW55LCBhbnk+LFxuICBmb250VmFyaWF0aW9uOlxuICAgIHwgRm9udFZhcmlhdGlvbkl0ZW1Db25maWdUeXBlXG4gICAgfCB7XG4gICAgICAgIGlkOiBudWxsIHwgc3RyaW5nO1xuICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBudW1iZXI7XG4gICAgICB9XG4pID0+IHtcbiAgaWYgKGZvbnRWYXJpYXRpb24pIHtcbiAgICByZXN1bHRbZm9udFZhcmlhdGlvbi50eXBlXSA9IGZvbnRWYXJpYXRpb24udmFsdWUgfHwgMDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEl0ZW1Db25maWdCeUtleSA9IChcbiAgYWN0aW9uVHlwZUlkOiBhbnksXG4gIGtleTogYW55LFxuICBjb25maWc6IGFueVxuKSA9PiB7XG4gIGlmIChpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKSkge1xuICAgIHJldHVybiBnZXRQbHVnaW5Db25maWcoYWN0aW9uVHlwZUlkKShjb25maWcsIGtleSk7XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvblR5cGVJZCkge1xuICAgIGNhc2UgU1RZTEVfRklMVEVSOiB7XG4gICAgICBjb25zdCBmaWx0ZXIgPSBmaW5kTGFzdChjb25maWcuZmlsdGVycywgKHt0eXBlfSkgPT4gdHlwZSA9PT0ga2V5KTtcbiAgICAgIHJldHVybiBmaWx0ZXIgPyBmaWx0ZXIudmFsdWUgOiAwO1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiB7XG4gICAgICBjb25zdCBmb250VmFyaWF0aW9uID0gZmluZExhc3QoXG4gICAgICAgIGNvbmZpZy5mb250VmFyaWF0aW9ucyxcbiAgICAgICAgKHt0eXBlfSkgPT4gdHlwZSA9PT0ga2V5XG4gICAgICApO1xuICAgICAgcmV0dXJuIGZvbnRWYXJpYXRpb24gPyBmb250VmFyaWF0aW9uLnZhbHVlIDogMDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlc3RpbmF0aW9uVmFsdWVzKHtcbiAgZWxlbWVudCxcbiAgYWN0aW9uSXRlbSxcbiAgZWxlbWVudEFwaSxcbn06IHtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGFjdGlvbkl0ZW06IEFjdGlvbkl0ZW1UeXBlO1xuICBlbGVtZW50QXBpOiBFbGVtZW50QXBpO1xufSkge1xuICBpZiAoaXNQbHVnaW5UeXBlKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCIgfCBcIlNUWUxFX09QQUNJVFlcIiB8IFwiU1RZTEVfU0laRVwiIHwgXCJTVFlMRV9GSUxURVJcIiB8IFwiU1RZTEVfRk9OVF9WQVJJQVRJT05cIiB8IFwiU1RZTEVfQkFDS0dST1VORF9DT0xPUlwiIHwgXCJTVFlMRV9CT1JERVJcIiB8IFwiU1RZTEVfVEVYVF9DT0xPUlwiIHwgXCJQTFVHSU5fTE9UVElFXCIgfCBcIkdFTkVSQUxfRElTUExBWVwiJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnUGx1Z2luVHlwZScuXG4gICAgcmV0dXJuIGdldFBsdWdpbkRlc3RpbmF0aW9uKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKShhY3Rpb25JdGVtLmNvbmZpZyk7XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBUUkFOU0ZPUk1fTU9WRTpcbiAgICBjYXNlIFRSQU5TRk9STV9TQ0FMRTpcbiAgICBjYXNlIFRSQU5TRk9STV9ST1RBVEU6XG4gICAgY2FzZSBUUkFOU0ZPUk1fU0tFVzoge1xuICAgICAgY29uc3Qge3hWYWx1ZSwgeVZhbHVlLCB6VmFsdWV9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICByZXR1cm4ge3hWYWx1ZSwgeVZhbHVlLCB6VmFsdWV9O1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX1NJWkU6IHtcbiAgICAgIGNvbnN0IHtnZXRTdHlsZSwgc2V0U3R5bGUsIGdldFByb3BlcnR5fSA9IGVsZW1lbnRBcGk7XG4gICAgICBjb25zdCB7d2lkdGhVbml0LCBoZWlnaHRVbml0fSA9IGFjdGlvbkl0ZW0uY29uZmlnO1xuICAgICAgbGV0IHt3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcbiAgICAgIGlmICghSVNfQlJPV1NFUl9FTlYpIHtcbiAgICAgICAgcmV0dXJuIHt3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZX07XG4gICAgICB9XG4gICAgICBpZiAod2lkdGhVbml0ID09PSBBVVRPKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBnZXRTdHlsZShlbGVtZW50LCBXSURUSCk7XG4gICAgICAgIHNldFN0eWxlKGVsZW1lbnQsIFdJRFRILCAnJyk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMjIgLSBUeXBlICdzdHJpbmcgfCBudWxsJyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdudW1iZXIgfCB1bmRlZmluZWQnLlxuICAgICAgICB3aWR0aFZhbHVlID0gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ29mZnNldFdpZHRoJyk7XG4gICAgICAgIHNldFN0eWxlKGVsZW1lbnQsIFdJRFRILCB0ZW1wKTtcbiAgICAgIH1cbiAgICAgIGlmIChoZWlnaHRVbml0ID09PSBBVVRPKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBnZXRTdHlsZShlbGVtZW50LCBIRUlHSFQpO1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBIRUlHSFQsICcnKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMyMiAtIFR5cGUgJ3N0cmluZyB8IG51bGwnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHR5cGUgJ251bWJlciB8IHVuZGVmaW5lZCcuXG4gICAgICAgIGhlaWdodFZhbHVlID0gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ29mZnNldEhlaWdodCcpO1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBIRUlHSFQsIHRlbXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZX07XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfQkFDS0dST1VORF9DT0xPUjpcbiAgICBjYXNlIFNUWUxFX0JPUkRFUjpcbiAgICBjYXNlIFNUWUxFX1RFWFRfQ09MT1I6IHtcbiAgICAgIGNvbnN0IHtyVmFsdWUsIGdWYWx1ZSwgYlZhbHVlLCBhVmFsdWUsIGdsb2JhbFN3YXRjaElkfSA9XG4gICAgICAgIGFjdGlvbkl0ZW0uY29uZmlnO1xuXG4gICAgICBpZiAoZ2xvYmFsU3dhdGNoSWQgJiYgZ2xvYmFsU3dhdGNoSWQuc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICBjb25zdCB7Z2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRTdHlsZShlbGVtZW50LCBnbG9iYWxTd2F0Y2hJZCk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZUNvbG9yKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByVmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZS5yZWQsXG4gICAgICAgICAgZ1ZhbHVlOiBub3JtYWxpemVkVmFsdWUuZ3JlZW4sXG4gICAgICAgICAgYlZhbHVlOiBub3JtYWxpemVkVmFsdWUuYmx1ZSxcbiAgICAgICAgICBhVmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZS5hbHBoYSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtyVmFsdWUsIGdWYWx1ZSwgYlZhbHVlLCBhVmFsdWV9O1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZJTFRFUjoge1xuICAgICAgcmV0dXJuIGFjdGlvbkl0ZW0uY29uZmlnLmZpbHRlcnMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICAgICAgICByZWR1Y2VGaWx0ZXJzLFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBTVFlMRV9GT05UX1ZBUklBVElPTjoge1xuICAgICAgcmV0dXJuIGFjdGlvbkl0ZW0uY29uZmlnLmZvbnRWYXJpYXRpb25zLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgICAgICAgcmVkdWNlRm9udFZhcmlhdGlvbnMsXG4gICAgICAgIHt9XG4gICAgICApO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCB7dmFsdWV9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICByZXR1cm4ge3ZhbHVlfTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbmRlclR5cGUoYWN0aW9uVHlwZUlkOiBhbnkpIHtcbiAgaWYgKC9eVFJBTlNGT1JNXy8udGVzdChhY3Rpb25UeXBlSWQpKSB7XG4gICAgcmV0dXJuIFJFTkRFUl9UUkFOU0ZPUk07XG4gIH1cbiAgaWYgKC9eU1RZTEVfLy50ZXN0KGFjdGlvblR5cGVJZCkpIHtcbiAgICByZXR1cm4gUkVOREVSX1NUWUxFO1xuICB9XG4gIGlmICgvXkdFTkVSQUxfLy50ZXN0KGFjdGlvblR5cGVJZCkpIHtcbiAgICByZXR1cm4gUkVOREVSX0dFTkVSQUw7XG4gIH1cbiAgaWYgKC9eUExVR0lOXy8udGVzdChhY3Rpb25UeXBlSWQpKSB7XG4gICAgcmV0dXJuIFJFTkRFUl9QTFVHSU47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlUHJvcChyZW5kZXJUeXBlOiBhbnksIGFjdGlvblR5cGVJZDogYW55KSB7XG4gIHJldHVybiByZW5kZXJUeXBlID09PSBSRU5ERVJfU1RZTEVcbiAgICA/IGFjdGlvblR5cGVJZC5yZXBsYWNlKCdTVFlMRV8nLCAnJykudG9Mb3dlckNhc2UoKVxuICAgIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckhUTUxFbGVtZW50KFxuICBlbGVtZW50OiBhbnksXG5cbiAgcmVmU3RhdGU6IGFueSxcblxuICBhY3Rpb25TdGF0ZTogYW55LFxuXG4gIGV2ZW50SWQ6IGFueSxcblxuICBhY3Rpb25JdGVtOiBhbnksXG5cbiAgc3R5bGVQcm9wOiBhbnksXG5cbiAgZWxlbWVudEFwaTogYW55LFxuXG4gIHJlbmRlclR5cGU6IGFueSxcblxuICBwbHVnaW5JbnN0YW5jZTogYW55XG4pIHtcbiAgc3dpdGNoIChyZW5kZXJUeXBlKSB7XG4gICAgY2FzZSBSRU5ERVJfVFJBTlNGT1JNOiB7XG4gICAgICByZXR1cm4gcmVuZGVyVHJhbnNmb3JtKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICByZWZTdGF0ZSxcbiAgICAgICAgYWN0aW9uU3RhdGUsXG4gICAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICAgIGVsZW1lbnRBcGlcbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgUkVOREVSX1NUWUxFOiB7XG4gICAgICByZXR1cm4gcmVuZGVyU3R5bGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHJlZlN0YXRlLFxuICAgICAgICBhY3Rpb25TdGF0ZSxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgc3R5bGVQcm9wLFxuICAgICAgICBlbGVtZW50QXBpXG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIFJFTkRFUl9HRU5FUkFMOiB7XG4gICAgICByZXR1cm4gcmVuZGVyR2VuZXJhbChlbGVtZW50LCBhY3Rpb25JdGVtLCBlbGVtZW50QXBpKTtcbiAgICB9XG4gICAgY2FzZSBSRU5ERVJfUExVR0lOOiB7XG4gICAgICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBpZiAoaXNQbHVnaW5UeXBlKGFjdGlvblR5cGVJZCkpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclBsdWdpbihhY3Rpb25UeXBlSWQpKHBsdWdpbkluc3RhbmNlLCByZWZTdGF0ZSwgYWN0aW9uSXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHRyYW5zZm9ybURlZmF1bHRzID0ge1xuICBbVFJBTlNGT1JNX01PVkVdOiBPYmplY3QuZnJlZXplKHtcbiAgICB4VmFsdWU6IDAsXG4gICAgeVZhbHVlOiAwLFxuICAgIHpWYWx1ZTogMCxcbiAgfSksXG4gIFtUUkFOU0ZPUk1fU0NBTEVdOiBPYmplY3QuZnJlZXplKHtcbiAgICB4VmFsdWU6IDEsXG4gICAgeVZhbHVlOiAxLFxuICAgIHpWYWx1ZTogMSxcbiAgfSksXG4gIFtUUkFOU0ZPUk1fUk9UQVRFXTogT2JqZWN0LmZyZWV6ZSh7XG4gICAgeFZhbHVlOiAwLFxuICAgIHlWYWx1ZTogMCxcbiAgICB6VmFsdWU6IDAsXG4gIH0pLFxuICBbVFJBTlNGT1JNX1NLRVddOiBPYmplY3QuZnJlZXplKHtcbiAgICB4VmFsdWU6IDAsXG4gICAgeVZhbHVlOiAwLFxuICB9KSxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IGZpbHRlckRlZmF1bHRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGJsdXI6IDAsXG4gICdodWUtcm90YXRlJzogMCxcbiAgaW52ZXJ0OiAwLFxuICBncmF5c2NhbGU6IDAsXG4gIHNhdHVyYXRlOiAxMDAsXG4gIHNlcGlhOiAwLFxuICBjb250cmFzdDogMTAwLFxuICBicmlnaHRuZXNzOiAxMDAsXG59KTtcblxuY29uc3QgZm9udFZhcmlhdGlvbkRlZmF1bHRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHdnaHQ6IDAsXG4gIG9wc3o6IDAsXG4gIHdkdGg6IDAsXG4gIHNsbnQ6IDAsXG59KTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVyVHlwZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW1Db25maWcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5jb25zdCBnZXRGaWx0ZXJVbml0ID0gKGZpbHRlclR5cGUsIGFjdGlvbkl0ZW1Db25maWcpID0+IHtcbiAgY29uc3QgZmlsdGVyID0gZmluZExhc3QoXG4gICAgYWN0aW9uSXRlbUNvbmZpZy5maWx0ZXJzLFxuICAgICh7dHlwZX0pID0+IHR5cGUgPT09IGZpbHRlclR5cGVcbiAgKTtcblxuICBpZiAoZmlsdGVyICYmIGZpbHRlci51bml0KSB7XG4gICAgcmV0dXJuIGZpbHRlci51bml0O1xuICB9XG5cbiAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7XG4gICAgY2FzZSAnYmx1cic6XG4gICAgICByZXR1cm4gJ3B4JztcbiAgICBjYXNlICdodWUtcm90YXRlJzpcbiAgICAgIHJldHVybiAnZGVnJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICclJztcbiAgfVxufTtcblxuY29uc3QgdHJhbnNmb3JtS2V5cyA9IE9iamVjdC5rZXlzKHRyYW5zZm9ybURlZmF1bHRzKTtcblxuZnVuY3Rpb24gcmVuZGVyVHJhbnNmb3JtKFxuICBlbGVtZW50OiBhbnksXG4gIHJlZlN0YXRlOiBhbnksXG4gIGFjdGlvblN0YXRlOiBhbnksXG4gIGFjdGlvbkl0ZW06IGFueSxcbiAgZWxlbWVudEFwaTogYW55XG4pIHtcbiAgY29uc3QgbmV3VHJhbnNmb3JtID0gdHJhbnNmb3JtS2V5c1xuICAgIC5tYXAoKGFjdGlvblR5cGVJZCkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnc3RyaW5nJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3sgcmVhZG9ubHkgVFJBTlNGT1JNX01PVkU6IFJlYWRvbmx5PHsgeFZhbHVlOiAwOyB5VmFsdWU6IDA7IHpWYWx1ZTogMDsgfT47IHJlYWRvbmx5IFRSQU5TRk9STV9TQ0FMRTogUmVhZG9ubHk8eyB4VmFsdWU6IDE7IHlWYWx1ZTogMTsgelZhbHVlOiAxOyB9PjsgcmVhZG9ubHkgVFJBTlNGT1JNX1JPVEFURTogUmVhZG9ubHk8eyB4VmFsdWU6IDA7IHlWYWx1ZTogMDsgelZhbHVlOiAwOyB9PjsgcmVhZG9ubHkgVFJBTlNGT1JNX1NLRVc6IFJlYWRvbmx5PC4uLj47IH0nLlxuICAgICAgY29uc3QgZGVmYXVsdHMgPSB0cmFuc2Zvcm1EZWZhdWx0c1thY3Rpb25UeXBlSWRdO1xuICAgICAgY29uc3Qge1xuICAgICAgICB4VmFsdWUgPSBkZWZhdWx0cy54VmFsdWUsXG4gICAgICAgIHlWYWx1ZSA9IGRlZmF1bHRzLnlWYWx1ZSxcblxuICAgICAgICB6VmFsdWUgPSBkZWZhdWx0cy56VmFsdWUsXG4gICAgICAgIHhVbml0ID0gJycsXG4gICAgICAgIHlVbml0ID0gJycsXG4gICAgICAgIHpVbml0ID0gJycsXG4gICAgICB9ID0gcmVmU3RhdGVbYWN0aW9uVHlwZUlkXSB8fCB7fTtcbiAgICAgIHN3aXRjaCAoYWN0aW9uVHlwZUlkKSB7XG4gICAgICAgIGNhc2UgVFJBTlNGT1JNX01PVkU6XG4gICAgICAgICAgcmV0dXJuIGAke1RSQU5TTEFURV8zRH0oJHt4VmFsdWV9JHt4VW5pdH0sICR7eVZhbHVlfSR7eVVuaXR9LCAke3pWYWx1ZX0ke3pVbml0fSlgO1xuICAgICAgICBjYXNlIFRSQU5TRk9STV9TQ0FMRTpcbiAgICAgICAgICByZXR1cm4gYCR7U0NBTEVfM0R9KCR7eFZhbHVlfSR7eFVuaXR9LCAke3lWYWx1ZX0ke3lVbml0fSwgJHt6VmFsdWV9JHt6VW5pdH0pYDtcbiAgICAgICAgY2FzZSBUUkFOU0ZPUk1fUk9UQVRFOlxuICAgICAgICAgIHJldHVybiBgJHtST1RBVEVfWH0oJHt4VmFsdWV9JHt4VW5pdH0pICR7Uk9UQVRFX1l9KCR7eVZhbHVlfSR7eVVuaXR9KSAke1JPVEFURV9afSgke3pWYWx1ZX0ke3pVbml0fSlgO1xuICAgICAgICBjYXNlIFRSQU5TRk9STV9TS0VXOlxuICAgICAgICAgIHJldHVybiBgJHtTS0VXfSgke3hWYWx1ZX0ke3hVbml0fSwgJHt5VmFsdWV9JHt5VW5pdH0pYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSlcbiAgICAuam9pbignICcpO1xuXG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBhZGRXaWxsQ2hhbmdlKGVsZW1lbnQsIFRSQU5TRk9STV9QUkVGSVhFRCwgZWxlbWVudEFwaSk7XG4gIHNldFN0eWxlKGVsZW1lbnQsIFRSQU5TRk9STV9QUkVGSVhFRCwgbmV3VHJhbnNmb3JtKTtcblxuICAvLyBTZXQgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZFxuICBpZiAoaGFzRGVmaW5lZDNkVHJhbnNmb3JtKGFjdGlvbkl0ZW0sIGFjdGlvblN0YXRlKSkge1xuICAgIHNldFN0eWxlKGVsZW1lbnQsIFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCwgUFJFU0VSVkVfM0QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZpbHRlcihcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGFjdGlvblN0YXRlOiBhbnksXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW1Db25maWcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkl0ZW1Db25maWcsXG4gIGVsZW1lbnRBcGk6IGFueVxuKSB7XG4gIGNvbnN0IGZpbHRlclZhbHVlID0gcmVkdWNlKFxuICAgIGFjdGlvblN0YXRlLFxuICAgIChyZXN1bHQsIHZhbHVlLCB0eXBlKSA9PlxuICAgICAgYCR7cmVzdWx0fSAke3R5cGV9KCR7dmFsdWV9JHtnZXRGaWx0ZXJVbml0KHR5cGUsIGFjdGlvbkl0ZW1Db25maWcpfSlgLFxuICAgICcnXG4gICk7XG5cbiAgY29uc3Qge3NldFN0eWxlfSA9IGVsZW1lbnRBcGk7XG4gIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgRklMVEVSLCBlbGVtZW50QXBpKTtcbiAgc2V0U3R5bGUoZWxlbWVudCwgRklMVEVSLCBmaWx0ZXJWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvbnRWYXJpYXRpb24oXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBhY3Rpb25TdGF0ZTogYW55LFxuICBhY3Rpb25JdGVtQ29uZmlnOiBGb250VmFyaWF0aW9uQWN0aW9uQ29uZmlnVHlwZSxcbiAgZWxlbWVudEFwaTogRWxlbWVudEFwaVxuKSB7XG4gIGNvbnN0IGZvbnRWYXJpYXRpb25WYWx1ZSA9IHJlZHVjZShcbiAgICBhY3Rpb25TdGF0ZSxcbiAgICAocmVzdWx0LCB2YWx1ZSwgdHlwZSkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3N0cmluZycgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJy5cbiAgICAgIHJlc3VsdC5wdXNoKGBcIiR7dHlwZX1cIiAke3ZhbHVlfWApO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIFtdXG4gICkuam9pbignLCAnKTtcblxuICBjb25zdCB7c2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgYWRkV2lsbENoYW5nZShlbGVtZW50LCBGT05UX1ZBUklBVElPTl9TRVRUSU5HUywgZWxlbWVudEFwaSk7XG4gIHNldFN0eWxlKGVsZW1lbnQsIEZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTLCBmb250VmFyaWF0aW9uVmFsdWUpO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25UeXBlSWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICd4VmFsdWUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICd5VmFsdWUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICd6VmFsdWUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBoYXNEZWZpbmVkM2RUcmFuc2Zvcm0oe2FjdGlvblR5cGVJZH0sIHt4VmFsdWUsIHlWYWx1ZSwgelZhbHVlfSkge1xuICAvLyBUUkFOU0xBVEVfWlxuICByZXR1cm4gKFxuICAgIChhY3Rpb25UeXBlSWQgPT09IFRSQU5TRk9STV9NT1ZFICYmIHpWYWx1ZSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgIC8vIFNDQUxFX1pcbiAgICAoYWN0aW9uVHlwZUlkID09PSBUUkFOU0ZPUk1fU0NBTEUgJiYgelZhbHVlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgLy8gUk9UQVRFX1ggb3IgUk9UQVRFX1lcbiAgICAoYWN0aW9uVHlwZUlkID09PSBUUkFOU0ZPUk1fUk9UQVRFICYmXG4gICAgICAoeFZhbHVlICE9PSB1bmRlZmluZWQgfHwgeVZhbHVlICE9PSB1bmRlZmluZWQpKVxuICApO1xufVxuXG5jb25zdCBwYXJhbUNhcHR1cmUgPSAnXFxcXCgoW14pXSspXFxcXCknO1xuY29uc3QgcmdiVmFsaWRSZWdleCA9IC9ecmdiLztcbmNvbnN0IHJnYk1hdGNoUmVnZXggPSBSZWdFeHAoYHJnYmE/JHtwYXJhbUNhcHR1cmV9YCk7XG5cbmZ1bmN0aW9uIGdldEZpcnN0TWF0Y2gocmVnZXg6IFJlZ0V4cCwgdmFsdWU6IHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnYWN0aW9uVHlwZUlkJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnY29tcHV0ZWRTdHlsZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2dldFN0eWxlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gcGFyc2VDb2xvcih7ZWxlbWVudCwgYWN0aW9uVHlwZUlkLCBjb21wdXRlZFN0eWxlLCBnZXRTdHlsZX0pOiB7XG4gIHJWYWx1ZTogbnVtYmVyO1xuICBnVmFsdWU6IG51bWJlcjtcbiAgYlZhbHVlOiBudW1iZXI7XG4gIGFWYWx1ZTogbnVtYmVyO1xufSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICdSZWFkb25seTx7IFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6IFwiYmFja2dyb3VuZENvbG9yXCI7IFNUWUxFX0JPUkRFUjogXCJib3JkZXJDb2xvclwiOyBTVFlMRV9URVhUX0NPTE9SOiBcImNvbG9yXCI7IH0+Jy5cbiAgY29uc3QgcHJvcCA9IGNvbG9yU3R5bGVQcm9wc1thY3Rpb25UeXBlSWRdO1xuICBjb25zdCBpbmxpbmVWYWx1ZSA9IGdldFN0eWxlKGVsZW1lbnQsIHByb3ApO1xuICBjb25zdCB2YWx1ZSA9IHJnYlZhbGlkUmVnZXgudGVzdChpbmxpbmVWYWx1ZSlcbiAgICA/IGlubGluZVZhbHVlXG4gICAgOiBjb21wdXRlZFN0eWxlW3Byb3BdO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTMyIC0gT2JqZWN0IGlzIHBvc3NpYmx5ICd1bmRlZmluZWQnLlxuICBjb25zdCBtYXRjaGVzID0gZ2V0Rmlyc3RNYXRjaChyZ2JNYXRjaFJlZ2V4LCB2YWx1ZSkuc3BsaXQoQ09NTUFfREVMSU1JVEVSKTtcbiAgcmV0dXJuIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnc3RyaW5nJy5cbiAgICByVmFsdWU6IGRlZmF1bHRUbyhwYXJzZUludChtYXRjaGVzWzBdLCAxMCksIDI1NSksXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3N0cmluZyB8IHVuZGVmaW5lZCcgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ3N0cmluZycuXG4gICAgZ1ZhbHVlOiBkZWZhdWx0VG8ocGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApLCAyNTUpLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdzdHJpbmcnLlxuICAgIGJWYWx1ZTogZGVmYXVsdFRvKHBhcnNlSW50KG1hdGNoZXNbMl0sIDEwKSwgMjU1KSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnc3RyaW5nJy5cbiAgICBhVmFsdWU6IGRlZmF1bHRUbyhwYXJzZUZsb2F0KG1hdGNoZXNbM10pLCAxKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICByZWZTdGF0ZTogYW55LFxuICBhY3Rpb25TdGF0ZTogYW55LFxuICBhY3Rpb25JdGVtOiBBY3Rpb25JdGVtVHlwZSxcbiAgc3R5bGVQcm9wOiBhbnksXG4gIGVsZW1lbnRBcGk6IGFueVxuKSB7XG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBTVFlMRV9TSVpFOiB7XG4gICAgICBsZXQge3dpZHRoVW5pdCA9ICcnLCBoZWlnaHRVbml0ID0gJyd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBjb25zdCB7d2lkdGhWYWx1ZSwgaGVpZ2h0VmFsdWV9ID0gYWN0aW9uU3RhdGU7XG4gICAgICBpZiAod2lkdGhWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh3aWR0aFVuaXQgPT09IEFVVE8pIHtcbiAgICAgICAgICB3aWR0aFVuaXQgPSAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgV0lEVEgsIGVsZW1lbnRBcGkpO1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBXSURUSCwgd2lkdGhWYWx1ZSArIHdpZHRoVW5pdCk7XG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaGVpZ2h0VW5pdCA9PT0gQVVUTykge1xuICAgICAgICAgIGhlaWdodFVuaXQgPSAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgSEVJR0hULCBlbGVtZW50QXBpKTtcbiAgICAgICAgc2V0U3R5bGUoZWxlbWVudCwgSEVJR0hULCBoZWlnaHRWYWx1ZSArIGhlaWdodFVuaXQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfRklMVEVSOiB7XG4gICAgICByZW5kZXJGaWx0ZXIoZWxlbWVudCwgYWN0aW9uU3RhdGUsIGFjdGlvbkl0ZW0uY29uZmlnLCBlbGVtZW50QXBpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiB7XG4gICAgICByZW5kZXJGb250VmFyaWF0aW9uKGVsZW1lbnQsIGFjdGlvblN0YXRlLCBhY3Rpb25JdGVtLmNvbmZpZywgZWxlbWVudEFwaSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBTVFlMRV9CQUNLR1JPVU5EX0NPTE9SOlxuICAgIGNhc2UgU1RZTEVfQk9SREVSOlxuICAgIGNhc2UgU1RZTEVfVEVYVF9DT0xPUjoge1xuICAgICAgY29uc3QgcHJvcCA9IGNvbG9yU3R5bGVQcm9wc1thY3Rpb25JdGVtLmFjdGlvblR5cGVJZF07XG5cbiAgICAgIGNvbnN0IHJWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuclZhbHVlKTtcbiAgICAgIGNvbnN0IGdWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuZ1ZhbHVlKTtcbiAgICAgIGNvbnN0IGJWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuYlZhbHVlKTtcbiAgICAgIGNvbnN0IGFWYWx1ZSA9IGFjdGlvblN0YXRlLmFWYWx1ZTtcblxuICAgICAgYWRkV2lsbENoYW5nZShlbGVtZW50LCBwcm9wLCBlbGVtZW50QXBpKTtcblxuICAgICAgc2V0U3R5bGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGFWYWx1ZSA+PSAxXG4gICAgICAgICAgPyBgcmdiKCR7clZhbHVlfSwke2dWYWx1ZX0sJHtiVmFsdWV9KWBcbiAgICAgICAgICA6IGByZ2JhKCR7clZhbHVlfSwke2dWYWx1ZX0sJHtiVmFsdWV9LCR7YVZhbHVlfSlgXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAndW5pdCcgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAneyBkZWxheTogbnVtYmVyOyBlYXNpbmc6IElYMkVhc2luZ1R5cGU7IGR1cmF0aW9uOiBudW1iZXI7IHRhcmdldDogQWN0aW9uSXRlbVRhcmdldFR5cGU7IHhWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkOyB5VmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZDsgelZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQ7IHhVbml0OiBcIiVcIiB8IC4uLiA0IG1vcmUgLi4uIHwgXCJWV1wiOyB5VW5pdDogXCIlXCIgfCAuLi4gNCBtb3JlIC4uLiB8IFwiVldcIjsgelVuaXQ6IFwiJVwiIHwgLi4uIDQgbW9yZSAuLi4gfCBcIlZXXCI7IH0gfCAuLi4gNSBtb3JlIC4uLiB8IHsgLi4uOyB9Jy5cbiAgICAgIGNvbnN0IHt1bml0ID0gJyd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBhZGRXaWxsQ2hhbmdlKGVsZW1lbnQsIHN0eWxlUHJvcCwgZWxlbWVudEFwaSk7XG4gICAgICBzZXRTdHlsZShlbGVtZW50LCBzdHlsZVByb3AsIGFjdGlvblN0YXRlLnZhbHVlICsgdW5pdCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyR2VuZXJhbChlbGVtZW50OiBhbnksIGFjdGlvbkl0ZW06IGFueSwgZWxlbWVudEFwaTogYW55KSB7XG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBHRU5FUkFMX0RJU1BMQVk6IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcbiAgICAgIGlmICh2YWx1ZSA9PT0gRkxFWCAmJiBJU19CUk9XU0VSX0VOVikge1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBESVNQTEFZLCBGTEVYX1BSRUZJWEVEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFN0eWxlKGVsZW1lbnQsIERJU1BMQVksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Byb3AnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBhZGRXaWxsQ2hhbmdlKGVsZW1lbnQsIHByb3AsIGVsZW1lbnRBcGk6IEVsZW1lbnRBcGkpIHtcbiAgaWYgKCFJU19CUk9XU0VSX0VOVikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB2YWxpZFByb3AgPSB3aWxsQ2hhbmdlUHJvcHNbcHJvcF07XG4gIGlmICghdmFsaWRQcm9wKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtnZXRTdHlsZSwgc2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgY29uc3QgdmFsdWUgPSBnZXRTdHlsZShlbGVtZW50LCBXSUxMX0NIQU5HRSk7XG4gIGlmICghdmFsdWUpIHtcbiAgICBzZXRTdHlsZShlbGVtZW50LCBXSUxMX0NIQU5HRSwgdmFsaWRQcm9wKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdmFsdWVzID0gdmFsdWUuc3BsaXQoQ09NTUFfREVMSU1JVEVSKS5tYXAodHJpbSk7XG4gIGlmICh2YWx1ZXMuaW5kZXhPZih2YWxpZFByb3ApID09PSAtMSkge1xuICAgIHNldFN0eWxlKFxuICAgICAgZWxlbWVudCxcbiAgICAgIFdJTExfQ0hBTkdFLFxuICAgICAgdmFsdWVzLmNvbmNhdCh2YWxpZFByb3ApLmpvaW4oQ09NTUFfREVMSU1JVEVSKVxuICAgICk7XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAncHJvcCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmZ1bmN0aW9uIHJlbW92ZVdpbGxDaGFuZ2UoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3AsIGVsZW1lbnRBcGk6IGFueSkge1xuICBpZiAoIUlTX0JST1dTRVJfRU5WKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHZhbGlkUHJvcCA9IHdpbGxDaGFuZ2VQcm9wc1twcm9wXTtcbiAgaWYgKCF2YWxpZFByb3ApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge2dldFN0eWxlLCBzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBjb25zdCB2YWx1ZSA9IGdldFN0eWxlKGVsZW1lbnQsIFdJTExfQ0hBTkdFKTtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5pbmRleE9mKHZhbGlkUHJvcCkgPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNldFN0eWxlKFxuICAgIGVsZW1lbnQsXG4gICAgV0lMTF9DSEFOR0UsXG4gICAgdmFsdWVcbiAgICAgIC5zcGxpdChDT01NQV9ERUxJTUlURVIpXG4gICAgICAubWFwKHRyaW0pXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICd2JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgICAgLmZpbHRlcigodikgPT4gdiAhPT0gdmFsaWRQcm9wKVxuICAgICAgLmpvaW4oQ09NTUFfREVMSU1JVEVSKVxuICApO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2VsZW1lbnRBcGknIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJBbGxTdHlsZXMoe3N0b3JlLCBlbGVtZW50QXBpfSkge1xuICBjb25zdCB7aXhEYXRhfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtldmVudHMgPSB7fSwgYWN0aW9uTGlzdHMgPSB7fX0gPSBpeERhdGE7XG4gIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnRJZCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2V2ZW50SWRdO1xuICAgIGNvbnN0IHtjb25maWd9ID0gZXZlbnQuYWN0aW9uO1xuICAgIGNvbnN0IHthY3Rpb25MaXN0SWR9ID0gY29uZmlnO1xuICAgIGNvbnN0IGFjdGlvbkxpc3QgPSBhY3Rpb25MaXN0c1thY3Rpb25MaXN0SWRdO1xuICAgIGlmIChhY3Rpb25MaXN0KSB7XG4gICAgICBjbGVhckFjdGlvbkxpc3RTdHlsZXMoe2FjdGlvbkxpc3QsIGV2ZW50LCBlbGVtZW50QXBpfSk7XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmtleXMoYWN0aW9uTGlzdHMpLmZvckVhY2goKGFjdGlvbkxpc3RJZCkgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICd7IGFjdGlvbkxpc3Q6IGFueTsgZWxlbWVudEFwaTogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBhY3Rpb25MaXN0Pzoge30gfCB1bmRlZmluZWQ7IGV2ZW50OiBhbnk7IGVsZW1lbnRBcGk6IGFueTsgfScuXG4gICAgY2xlYXJBY3Rpb25MaXN0U3R5bGVzKHthY3Rpb25MaXN0OiBhY3Rpb25MaXN0c1thY3Rpb25MaXN0SWRdLCBlbGVtZW50QXBpfSk7XG4gIH0pO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdldmVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2VsZW1lbnRBcGknIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBjbGVhckFjdGlvbkxpc3RTdHlsZXMoe2FjdGlvbkxpc3QgPSB7fSwgZXZlbnQsIGVsZW1lbnRBcGl9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnYWN0aW9uSXRlbUdyb3VwcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30nLiB8IFRTMjMzOSAtIFByb3BlcnR5ICdjb250aW51b3VzUGFyYW1ldGVyR3JvdXBzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7fScuXG4gIGNvbnN0IHthY3Rpb25JdGVtR3JvdXBzLCBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBzfSA9IGFjdGlvbkxpc3Q7XG4gIGFjdGlvbkl0ZW1Hcm91cHMgJiZcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25Hcm91cCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICBhY3Rpb25JdGVtR3JvdXBzLmZvckVhY2goKGFjdGlvbkdyb3VwKSA9PiB7XG4gICAgICBjbGVhckFjdGlvbkdyb3VwU3R5bGVzKHthY3Rpb25Hcm91cCwgZXZlbnQsIGVsZW1lbnRBcGl9KTtcbiAgICB9KTtcbiAgY29udGludW91c1BhcmFtZXRlckdyb3VwcyAmJlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3BhcmFtR3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgY29udGludW91c1BhcmFtZXRlckdyb3Vwcy5mb3JFYWNoKChwYXJhbUdyb3VwKSA9PiB7XG4gICAgICBjb25zdCB7Y29udGludW91c0FjdGlvbkdyb3Vwc30gPSBwYXJhbUdyb3VwO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnYWN0aW9uR3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgICBjb250aW51b3VzQWN0aW9uR3JvdXBzLmZvckVhY2goKGFjdGlvbkdyb3VwKSA9PiB7XG4gICAgICAgIGNsZWFyQWN0aW9uR3JvdXBTdHlsZXMoe2FjdGlvbkdyb3VwLCBldmVudCwgZWxlbWVudEFwaX0pO1xuICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2FjdGlvbkdyb3VwJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50QXBpJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gY2xlYXJBY3Rpb25Hcm91cFN0eWxlcyh7YWN0aW9uR3JvdXAsIGV2ZW50LCBlbGVtZW50QXBpfSkge1xuICBjb25zdCB7YWN0aW9uSXRlbXN9ID0gYWN0aW9uR3JvdXA7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW0nIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkl0ZW1zLmZvckVhY2goKGFjdGlvbkl0ZW0pID0+IHtcbiAgICBjb25zdCB7YWN0aW9uVHlwZUlkLCBjb25maWd9ID0gYWN0aW9uSXRlbTtcbiAgICBsZXQgY2xlYXJFbGVtZW50O1xuXG4gICAgaWYgKGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdyZWYnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgICBjbGVhckVsZW1lbnQgPSAocmVmKSA9PiBjbGVhclBsdWdpbihhY3Rpb25UeXBlSWQpKHJlZiwgYWN0aW9uSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyRWxlbWVudCA9IHByb2Nlc3NFbGVtZW50QnlUeXBlKHtcbiAgICAgICAgZWZmZWN0OiBjbGVhclN0eWxlUHJvcCxcbiAgICAgICAgYWN0aW9uVHlwZUlkLFxuICAgICAgICBlbGVtZW50QXBpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QWZmZWN0ZWRFbGVtZW50cyh7Y29uZmlnLCBldmVudCwgZWxlbWVudEFwaX0pLmZvckVhY2goY2xlYXJFbGVtZW50KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwSFRNTEVsZW1lbnQoXG4gIGVsZW1lbnQ6IGFueSxcbiAgYWN0aW9uSXRlbTogYW55LFxuICBlbGVtZW50QXBpOiBhbnlcbikge1xuICBjb25zdCB7c2V0U3R5bGUsIGdldFN0eWxlfSA9IGVsZW1lbnRBcGk7XG4gIGNvbnN0IHthY3Rpb25UeXBlSWR9ID0gYWN0aW9uSXRlbTtcblxuICBpZiAoYWN0aW9uVHlwZUlkID09PSBTVFlMRV9TSVpFKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb25JdGVtO1xuICAgIGlmIChjb25maWcud2lkdGhVbml0ID09PSBBVVRPKSB7XG4gICAgICBzZXRTdHlsZShlbGVtZW50LCBXSURUSCwgJycpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmhlaWdodFVuaXQgPT09IEFVVE8pIHtcbiAgICAgIHNldFN0eWxlKGVsZW1lbnQsIEhFSUdIVCwgJycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChnZXRTdHlsZShlbGVtZW50LCBXSUxMX0NIQU5HRSkpIHtcbiAgICBwcm9jZXNzRWxlbWVudEJ5VHlwZSh7ZWZmZWN0OiByZW1vdmVXaWxsQ2hhbmdlLCBhY3Rpb25UeXBlSWQsIGVsZW1lbnRBcGl9KShcbiAgICAgIGVsZW1lbnRcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NFbGVtZW50QnlUeXBlID1cbiAgKHtcbiAgICBlZmZlY3QsXG4gICAgYWN0aW9uVHlwZUlkLFxuICAgIGVsZW1lbnRBcGksXG4gIH06IHtcbiAgICBlZmZlY3Q6IChcbiAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgICAgcHJvcDogYW55IHwgdW5kZWZpbmVkIHwgc3RyaW5nLFxuXG4gICAgICBlbGVtZW50QXBpPzogYW55XG4gICAgKSA9PiB2b2lkO1xuICAgIGFjdGlvblR5cGVJZDogQWN0aW9uSWQ7XG4gICAgZWxlbWVudEFwaTogRWxlbWVudEFwaTtcbiAgfSkgPT5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgKGVsZW1lbnQpID0+IHtcbiAgICBzd2l0Y2ggKGFjdGlvblR5cGVJZCkge1xuICAgICAgY2FzZSBUUkFOU0ZPUk1fTU9WRTpcbiAgICAgIGNhc2UgVFJBTlNGT1JNX1NDQUxFOlxuICAgICAgY2FzZSBUUkFOU0ZPUk1fUk9UQVRFOlxuICAgICAgY2FzZSBUUkFOU0ZPUk1fU0tFVzpcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIFRSQU5TRk9STV9QUkVGSVhFRCwgZWxlbWVudEFwaSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVFlMRV9GSUxURVI6XG4gICAgICAgIGVmZmVjdChlbGVtZW50LCBGSUxURVIsIGVsZW1lbnRBcGkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RZTEVfRk9OVF9WQVJJQVRJT046XG4gICAgICAgIGVmZmVjdChlbGVtZW50LCBGT05UX1ZBUklBVElPTl9TRVRUSU5HUywgZWxlbWVudEFwaSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVFlMRV9PUEFDSVRZOlxuICAgICAgICBlZmZlY3QoZWxlbWVudCwgT1BBQ0lUWSwgZWxlbWVudEFwaSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVFlMRV9TSVpFOlxuICAgICAgICBlZmZlY3QoZWxlbWVudCwgV0lEVEgsIGVsZW1lbnRBcGkpO1xuICAgICAgICBlZmZlY3QoZWxlbWVudCwgSEVJR0hULCBlbGVtZW50QXBpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6XG4gICAgICBjYXNlIFNUWUxFX0JPUkRFUjpcbiAgICAgIGNhc2UgU1RZTEVfVEVYVF9DT0xPUjpcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIGNvbG9yU3R5bGVQcm9wc1thY3Rpb25UeXBlSWRdLCBlbGVtZW50QXBpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEdFTkVSQUxfRElTUExBWTpcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIERJU1BMQVksIGVsZW1lbnRBcGkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Byb3AnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBjbGVhclN0eWxlUHJvcChlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJvcCwgZWxlbWVudEFwaTogYW55KSB7XG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICByZW1vdmVXaWxsQ2hhbmdlKGVsZW1lbnQsIHByb3AsIGVsZW1lbnRBcGkpO1xuICBzZXRTdHlsZShlbGVtZW50LCBwcm9wLCAnJyk7XG4gIC8vIENsZWFyIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2RcbiAgaWYgKHByb3AgPT09IFRSQU5TRk9STV9QUkVGSVhFRCkge1xuICAgIHNldFN0eWxlKGVsZW1lbnQsIFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCwgJycpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleChhY3Rpb25JdGVtczogYW55KSB7XG4gIGxldCBtYXhEdXJhdGlvbiA9IDA7XG4gIGxldCByZXN1bHRJbmRleCA9IDA7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW0nIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdpbmRleCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgYWN0aW9uSXRlbXMuZm9yRWFjaCgoYWN0aW9uSXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbkl0ZW07XG4gICAgY29uc3QgdG90YWwgPSBjb25maWcuZGVsYXkgKyBjb25maWcuZHVyYXRpb247XG4gICAgaWYgKHRvdGFsID49IG1heER1cmF0aW9uKSB7XG4gICAgICBtYXhEdXJhdGlvbiA9IHRvdGFsO1xuICAgICAgcmVzdWx0SW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0SW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25MaXN0UHJvZ3Jlc3MoYWN0aW9uTGlzdDogYW55LCBpbnN0YW5jZTogYW55KSB7XG4gIGNvbnN0IHthY3Rpb25JdGVtR3JvdXBzLCB1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGV9ID0gYWN0aW9uTGlzdDtcbiAgY29uc3Qge2FjdGlvbkl0ZW06IGluc3RhbmNlSXRlbSwgdmVyYm9zZVRpbWVFbGFwc2VkID0gMH0gPSBpbnN0YW5jZTtcbiAgbGV0IHRvdGFsRHVyYXRpb24gPSAwO1xuICBsZXQgZWxhcHNlZER1cmF0aW9uID0gMDtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZ3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdpbmRleCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgYWN0aW9uSXRlbUdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcbiAgICBpZiAodXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlICYmIGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHthY3Rpb25JdGVtc30gPSBncm91cDtcbiAgICBjb25zdCBjYXJyaWVySXRlbSA9IGFjdGlvbkl0ZW1zW2dldE1heER1cmF0aW9uSXRlbUluZGV4KGFjdGlvbkl0ZW1zKV07XG4gICAgY29uc3Qge2NvbmZpZywgYWN0aW9uVHlwZUlkfSA9IGNhcnJpZXJJdGVtO1xuICAgIGlmIChpbnN0YW5jZUl0ZW0uaWQgPT09IGNhcnJpZXJJdGVtLmlkKSB7XG4gICAgICBlbGFwc2VkRHVyYXRpb24gPSB0b3RhbER1cmF0aW9uICsgdmVyYm9zZVRpbWVFbGFwc2VkO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvbiA9XG4gICAgICBnZXRSZW5kZXJUeXBlKGFjdGlvblR5cGVJZCkgPT09IFJFTkRFUl9HRU5FUkFMID8gMCA6IGNvbmZpZy5kdXJhdGlvbjtcbiAgICB0b3RhbER1cmF0aW9uICs9IGNvbmZpZy5kZWxheSArIGR1cmF0aW9uO1xuICB9KTtcbiAgcmV0dXJuIHRvdGFsRHVyYXRpb24gPiAwID8gb3B0aW1pemVGbG9hdChlbGFwc2VkRHVyYXRpb24gLyB0b3RhbER1cmF0aW9uKSA6IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VMaXN0VG9Hcm91cCh7XG4gIGFjdGlvbkxpc3QsXG4gIGFjdGlvbkl0ZW1JZCxcbiAgcmF3RGF0YSxcbn06IHtcbiAgYWN0aW9uTGlzdDogQWN0aW9uTGlzdFR5cGU7XG4gIGFjdGlvbkl0ZW1JZDogc3RyaW5nO1xuICByYXdEYXRhOiBJWDJSYXdEYXRhO1xufSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gRklYTUUgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnYWN0aW9uSXRlbUdyb3VwcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnQWN0aW9uTGlzdFR5cGUnLlxuICBjb25zdCB7YWN0aW9uSXRlbUdyb3VwcywgY29udGludW91c1BhcmFtZXRlckdyb3Vwc30gPSBhY3Rpb25MaXN0O1xuICBjb25zdCBuZXdBY3Rpb25JdGVtczogQXJyYXk8QWN0aW9uSXRlbVR5cGU+ID0gW107XG5cbiAgY29uc3QgdGFrZUl0ZW1VbnRpbE1hdGNoID0gKGFjdGlvbkl0ZW06IEFjdGlvbkl0ZW1UeXBlKSA9PiB7XG4gICAgbmV3QWN0aW9uSXRlbXMucHVzaChcbiAgICAgIG1lcmdlSW4oYWN0aW9uSXRlbSwgWydjb25maWcnXSwge1xuICAgICAgICBkZWxheTogMCxcbiAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIGFjdGlvbkl0ZW0uaWQgPT09IGFjdGlvbkl0ZW1JZDtcbiAgfTtcblxuICBhY3Rpb25JdGVtR3JvdXBzICYmXG4gICAgYWN0aW9uSXRlbUdyb3Vwcy5zb21lKCh7YWN0aW9uSXRlbXN9OiB7YWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1zVHlwZX0pID0+IHtcbiAgICAgIHJldHVybiBhY3Rpb25JdGVtcy5zb21lKHRha2VJdGVtVW50aWxNYXRjaCk7XG4gICAgfSk7XG5cbiAgY29udGludW91c1BhcmFtZXRlckdyb3VwcyAmJlxuICAgIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cHMuc29tZShcbiAgICAgIChcbiAgICAgICAgcGFyYW1Hcm91cDpcbiAgICAgICAgICB8IENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cFR5cGU8J01PVVNFX1gnPlxuICAgICAgICAgIHwgQ29udGludW91c1BhcmFtZXRlckdyb3VwVHlwZTwnTU9VU0VfWSc+XG4gICAgICAgICAgfCBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBUeXBlPCdTQ1JPTExfUFJPR1JFU1MnPlxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHtjb250aW51b3VzQWN0aW9uR3JvdXBzfSA9IHBhcmFtR3JvdXA7XG4gICAgICAgIHJldHVybiBjb250aW51b3VzQWN0aW9uR3JvdXBzLnNvbWUoXG4gICAgICAgICAgKHthY3Rpb25JdGVtc306IHthY3Rpb25JdGVtczogQWN0aW9uSXRlbXNUeXBlfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkl0ZW1zLnNvbWUodGFrZUl0ZW1VbnRpbE1hdGNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcblxuICByZXR1cm4gc2V0SW4ocmF3RGF0YSwgWydhY3Rpb25MaXN0cyddLCB7XG4gICAgW2FjdGlvbkxpc3QuaWRdOiB7XG4gICAgICBpZDogYWN0aW9uTGlzdC5pZCxcbiAgICAgIGFjdGlvbkl0ZW1Hcm91cHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbkl0ZW1zOiBuZXdBY3Rpb25JdGVtcyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2Jhc2VkT24nIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkTmFtZXNwYWNlRXZlbnRQYXJhbWV0ZXIoZXZlbnRUeXBlSWQ6IGFueSwge2Jhc2VkT259KSB7XG4gIHJldHVybiAoXG4gICAgKGV2ZW50VHlwZUlkID09PSBFdmVudFR5cGVDb25zdHMuU0NST0xMSU5HX0lOX1ZJRVcgJiZcbiAgICAgIChiYXNlZE9uID09PSBFdmVudEJhc2VkT24uRUxFTUVOVCB8fCBiYXNlZE9uID09IG51bGwpKSB8fFxuICAgIChldmVudFR5cGVJZCA9PT0gRXZlbnRUeXBlQ29uc3RzLk1PVVNFX01PVkUgJiZcbiAgICAgIGJhc2VkT24gPT09IEV2ZW50QmFzZWRPbi5FTEVNRU5UKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlZFBhcmFtZXRlcklkKFxuICBldmVudFN0YXRlS2V5OiBhbnksXG4gIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkOiBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZFxuKSB7XG4gIGNvbnN0IG5hbWVzcGFjZWRQYXJhbWV0ZXJJZCA9XG4gICAgZXZlbnRTdGF0ZUtleSArIENPTE9OX0RFTElNSVRFUiArIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkO1xuXG4gIHJldHVybiBuYW1lc3BhY2VkUGFyYW1ldGVySWQgYXMgQ29udGludW91c1BhcmFtZXRlckdyb3VwSWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRBbGxvd01lZGlhUXVlcnkobWVkaWFRdWVyaWVzOiBhbnksIG1lZGlhUXVlcnlLZXk6IGFueSkge1xuICAvLyBEdXJpbmcgZGVzaWduIG1vZGUsIGN1cnJlbnQgbWVkaWEgcXVlcnkga2V5IGRvZXMgbm90IGV4aXN0XG4gIGlmIChtZWRpYVF1ZXJ5S2V5ID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gbWVkaWFRdWVyaWVzLmluZGV4T2YobWVkaWFRdWVyeUtleSkgIT09IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVkaWFRdWVyaWVzRXF1YWwobGlzdEE6IGFueSwgbGlzdEI6IGFueSkge1xuICByZXR1cm4gc2hhbGxvd0VxdWFsKGxpc3RBICYmIGxpc3RBLnNvcnQoKSwgbGlzdEIgJiYgbGlzdEIuc29ydCgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVRhcmdldCh0YXJnZXQ6IGFueSkge1xuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG4gIGlmICh0YXJnZXQucGx1Z2luRWxlbWVudCAmJiB0YXJnZXQub2JqZWN0SWQpIHtcbiAgICByZXR1cm4gdGFyZ2V0LnBsdWdpbkVsZW1lbnQgKyBCQVJfREVMSU1JVEVSICsgdGFyZ2V0Lm9iamVjdElkO1xuICB9XG4gIGlmICh0YXJnZXQub2JqZWN0SWQpIHtcbiAgICByZXR1cm4gdGFyZ2V0Lm9iamVjdElkO1xuICB9XG4gIGNvbnN0IHtpZCA9ICcnLCBzZWxlY3RvciA9ICcnLCB1c2VFdmVudFRhcmdldCA9ICcnfSA9IHRhcmdldDtcbiAgcmV0dXJuIGlkICsgQkFSX0RFTElNSVRFUiArIHNlbGVjdG9yICsgQkFSX0RFTElNSVRFUiArIHVzZUV2ZW50VGFyZ2V0O1xufVxuIl0sIm5hbWVzIjpbImNsZWFudXBIVE1MRWxlbWVudCIsImNsZWFyQWxsU3R5bGVzIiwiY2xlYXJPYmplY3RDYWNoZSIsImdldEFjdGlvbkxpc3RQcm9ncmVzcyIsImdldEFmZmVjdGVkRWxlbWVudHMiLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0RGVzdGluYXRpb25WYWx1ZXMiLCJnZXRFbGVtZW50SWQiLCJnZXRJbnN0YW5jZUlkIiwiZ2V0SW5zdGFuY2VPcmlnaW4iLCJnZXRJdGVtQ29uZmlnQnlLZXkiLCJnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleCIsImdldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZCIsImdldFJlbmRlclR5cGUiLCJnZXRTdHlsZVByb3AiLCJtZWRpYVF1ZXJpZXNFcXVhbCIsIm9ic2VydmVTdG9yZSIsInJlZHVjZUxpc3RUb0dyb3VwIiwicmVpZnlTdGF0ZSIsInJlbmRlckhUTUxFbGVtZW50Iiwic2hhbGxvd0VxdWFsIiwic2hvdWxkQWxsb3dNZWRpYVF1ZXJ5Iiwic2hvdWxkTmFtZXNwYWNlRXZlbnRQYXJhbWV0ZXIiLCJzdHJpbmdpZnlUYXJnZXQiLCJCQUNLR1JPVU5EIiwiVFJBTlNGT1JNIiwiVFJBTlNMQVRFXzNEIiwiU0NBTEVfM0QiLCJST1RBVEVfWCIsIlJPVEFURV9ZIiwiUk9UQVRFX1oiLCJTS0VXIiwiUFJFU0VSVkVfM0QiLCJGTEVYIiwiT1BBQ0lUWSIsIkZJTFRFUiIsIkZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTIiwiV0lEVEgiLCJIRUlHSFQiLCJCQUNLR1JPVU5EX0NPTE9SIiwiQk9SREVSX0NPTE9SIiwiQ09MT1IiLCJDSElMRFJFTiIsIklNTUVESUFURV9DSElMRFJFTiIsIlNJQkxJTkdTIiwiUEFSRU5UIiwiRElTUExBWSIsIldJTExfQ0hBTkdFIiwiQVVUTyIsIkNPTU1BX0RFTElNSVRFUiIsIkNPTE9OX0RFTElNSVRFUiIsIkJBUl9ERUxJTUlURVIiLCJSRU5ERVJfVFJBTlNGT1JNIiwiUkVOREVSX0dFTkVSQUwiLCJSRU5ERVJfU1RZTEUiLCJSRU5ERVJfUExVR0lOIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiVFJBTlNGT1JNX01PVkUiLCJUUkFOU0ZPUk1fU0NBTEUiLCJUUkFOU0ZPUk1fUk9UQVRFIiwiVFJBTlNGT1JNX1NLRVciLCJTVFlMRV9PUEFDSVRZIiwiU1RZTEVfRklMVEVSIiwiU1RZTEVfRk9OVF9WQVJJQVRJT04iLCJTVFlMRV9TSVpFIiwiU1RZTEVfQkFDS0dST1VORF9DT0xPUiIsIlNUWUxFX0JPUkRFUiIsIlNUWUxFX1RFWFRfQ09MT1IiLCJHRU5FUkFMX0RJU1BMQVkiLCJPQkpFQ1RfVkFMVUUiLCJBY3Rpb25UeXBlQ29uc3RzIiwidHJpbSIsInYiLCJjb2xvclN0eWxlUHJvcHMiLCJPYmplY3QiLCJmcmVlemUiLCJ3aWxsQ2hhbmdlUHJvcHMiLCJUUkFOU0ZPUk1fUFJFRklYRUQiLCJvYmplY3RDYWNoZSIsIk1hcCIsImNsZWFyIiwiaW5zdGFuY2VDb3VudCIsImVsZW1lbnRDb3VudCIsIml4RWxlbWVudHMiLCJyZWYiLCJrZXkiLCJpeEVsIiwiaWQiLCJldmVudHMiLCJhY3Rpb25MaXN0cyIsInNpdGUiLCJldmVudFR5cGVNYXAiLCJyZWR1Y2UiLCJyZXN1bHQiLCJldmVudCIsImV2ZW50VHlwZUlkIiwibWVkaWFRdWVyaWVzIiwibWVkaWFRdWVyeUtleXMiLCJtYXAiLCJtcSIsImNvbnNvbGUiLCJ3YXJuIiwiaXhEYXRhIiwic3RyaWN0RXF1YWwiLCJhIiwiYiIsInN0b3JlIiwic2VsZWN0Iiwib25DaGFuZ2UiLCJjb21wYXJhdG9yIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsImhhbmRsZUNoYW5nZSIsImN1cnJlbnRTdGF0ZSIsIm5leHRTdGF0ZSIsIm5vcm1hbGl6ZVRhcmdldCIsInRhcmdldCIsInR5cGUiLCJvYmplY3RJZCIsInNlbGVjdG9yIiwic2VsZWN0b3JHdWlkcyIsImFwcGxpZXNUbyIsInVzZUV2ZW50VGFyZ2V0IiwiY29uZmlnIiwiZXZlbnRUYXJnZXQiLCJlbGVtZW50Um9vdCIsImVsZW1lbnRBcGkiLCJFcnJvciIsInRhcmdldHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJhY2N1bXVsYXRvciIsImNvbmNhdCIsImdldFZhbGlkRG9jdW1lbnQiLCJnZXRRdWVyeVNlbGVjdG9yIiwicXVlcnlEb2N1bWVudCIsImdldENoaWxkRWxlbWVudHMiLCJnZXRTaWJsaW5nRWxlbWVudHMiLCJtYXRjaFNlbGVjdG9yIiwiZWxlbWVudENvbnRhaW5zIiwiaXNTaWJsaW5nTm9kZSIsImhhcyIsImdldCIsInNldCIsIkV2ZW50QXBwbGllc1RvIiwiUEFHRSIsImRvYyIsIm92ZXJyaWRlcyIsImFjdGlvbiIsImFmZmVjdGVkRWxlbWVudHMiLCJvdmVycmlkZSIsInZhbGlkT3ZlcnJpZGUiLCJCb29sZWFuIiwibGltaXRBZmZlY3RlZEVsZW1lbnRzIiwiYmFzZVNlbGVjdG9yIiwiZmluYWxTZWxlY3RvciIsImV2ZW50VGFyZ2V0U2VsZWN0b3IiLCJldmVudFRhcmdldHMiLCJmaWx0ZXIiLCJwYXJlbnRFbGVtZW50Iiwic29tZSIsInRhcmdldEVsZW1lbnQiLCJjaGlsZEVsZW1lbnQiLCJzaWJsaW5nRWxlbWVudCIsIklTX0JST1dTRVJfRU5WIiwiZWxlbWVudCIsImNvbnRhaW5zIiwiYWN0aW9uSXRlbSIsImFjdGlvblR5cGVJZCIsIndpbmRvdyIsInB4VmFsdWVSZWdleCIsImdldEZpbHRlckRlZmF1bHRzIiwiYWN0aW9uU3RhdGUiLCJmaWx0ZXJzIiwiZmlsdGVyRGVmYXVsdHMiLCJnZXRGb250VmFyaWF0aW9uRGVmYXVsdHMiLCJmb250VmFyaWF0aW9ucyIsImZvbnRWYXJpYXRpb24iLCJmb250VmFyaWF0aW9uRGVmYXVsdHMiLCJkZWZhdWx0VmFsdWUiLCJyZWZTdGF0ZSIsImNvbXB1dGVkU3R5bGUiLCJnZXRTdHlsZSIsImlzUGx1Z2luVHlwZSIsImdldFBsdWdpbk9yaWdpbiIsInRyYW5zZm9ybURlZmF1bHRzIiwidmFsdWUiLCJkZWZhdWx0VG8iLCJwYXJzZUZsb2F0IiwiaW5saW5lV2lkdGgiLCJpbmxpbmVIZWlnaHQiLCJ3aWR0aFZhbHVlIiwiaGVpZ2h0VmFsdWUiLCJ3aWR0aFVuaXQiLCJ0ZXN0Iiwid2lkdGgiLCJoZWlnaHRVbml0IiwiaGVpZ2h0IiwicGFyc2VDb2xvciIsImRpc3BsYXkiLCJyZWR1Y2VGaWx0ZXJzIiwicmVkdWNlRm9udFZhcmlhdGlvbnMiLCJnZXRQbHVnaW5Db25maWciLCJmaW5kTGFzdCIsImdldFBsdWdpbkRlc3RpbmF0aW9uIiwieFZhbHVlIiwieVZhbHVlIiwielZhbHVlIiwic2V0U3R5bGUiLCJnZXRQcm9wZXJ0eSIsInRlbXAiLCJyVmFsdWUiLCJnVmFsdWUiLCJiVmFsdWUiLCJhVmFsdWUiLCJnbG9iYWxTd2F0Y2hJZCIsInN0YXJ0c1dpdGgiLCJub3JtYWxpemVkVmFsdWUiLCJub3JtYWxpemVDb2xvciIsInJlZCIsImdyZWVuIiwiYmx1ZSIsImFscGhhIiwicmVuZGVyVHlwZSIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsImV2ZW50SWQiLCJzdHlsZVByb3AiLCJwbHVnaW5JbnN0YW5jZSIsInJlbmRlclRyYW5zZm9ybSIsInJlbmRlclN0eWxlIiwicmVuZGVyR2VuZXJhbCIsInJlbmRlclBsdWdpbiIsImJsdXIiLCJpbnZlcnQiLCJncmF5c2NhbGUiLCJzYXR1cmF0ZSIsInNlcGlhIiwiY29udHJhc3QiLCJicmlnaHRuZXNzIiwid2dodCIsIm9wc3oiLCJ3ZHRoIiwic2xudCIsImdldEZpbHRlclVuaXQiLCJmaWx0ZXJUeXBlIiwiYWN0aW9uSXRlbUNvbmZpZyIsInVuaXQiLCJ0cmFuc2Zvcm1LZXlzIiwia2V5cyIsIm5ld1RyYW5zZm9ybSIsImRlZmF1bHRzIiwieFVuaXQiLCJ5VW5pdCIsInpVbml0Iiwiam9pbiIsImFkZFdpbGxDaGFuZ2UiLCJoYXNEZWZpbmVkM2RUcmFuc2Zvcm0iLCJUUkFOU0ZPUk1fU1RZTEVfUFJFRklYRUQiLCJyZW5kZXJGaWx0ZXIiLCJmaWx0ZXJWYWx1ZSIsInJlbmRlckZvbnRWYXJpYXRpb24iLCJmb250VmFyaWF0aW9uVmFsdWUiLCJwdXNoIiwidW5kZWZpbmVkIiwicGFyYW1DYXB0dXJlIiwicmdiVmFsaWRSZWdleCIsInJnYk1hdGNoUmVnZXgiLCJSZWdFeHAiLCJnZXRGaXJzdE1hdGNoIiwicmVnZXgiLCJtYXRjaCIsImV4ZWMiLCJwcm9wIiwiaW5saW5lVmFsdWUiLCJtYXRjaGVzIiwic3BsaXQiLCJwYXJzZUludCIsIk1hdGgiLCJyb3VuZCIsIkZMRVhfUFJFRklYRUQiLCJ2YWxpZFByb3AiLCJ2YWx1ZXMiLCJpbmRleE9mIiwicmVtb3ZlV2lsbENoYW5nZSIsImZvckVhY2giLCJhY3Rpb25MaXN0SWQiLCJhY3Rpb25MaXN0IiwiY2xlYXJBY3Rpb25MaXN0U3R5bGVzIiwiYWN0aW9uSXRlbUdyb3VwcyIsImNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cHMiLCJhY3Rpb25Hcm91cCIsImNsZWFyQWN0aW9uR3JvdXBTdHlsZXMiLCJwYXJhbUdyb3VwIiwiY29udGludW91c0FjdGlvbkdyb3VwcyIsImFjdGlvbkl0ZW1zIiwiY2xlYXJFbGVtZW50IiwiY2xlYXJQbHVnaW4iLCJwcm9jZXNzRWxlbWVudEJ5VHlwZSIsImVmZmVjdCIsImNsZWFyU3R5bGVQcm9wIiwibWF4RHVyYXRpb24iLCJyZXN1bHRJbmRleCIsImluZGV4IiwidG90YWwiLCJkZWxheSIsImR1cmF0aW9uIiwiaW5zdGFuY2UiLCJ1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGUiLCJpbnN0YW5jZUl0ZW0iLCJ2ZXJib3NlVGltZUVsYXBzZWQiLCJ0b3RhbER1cmF0aW9uIiwiZWxhcHNlZER1cmF0aW9uIiwiZ3JvdXAiLCJjYXJyaWVySXRlbSIsIm9wdGltaXplRmxvYXQiLCJhY3Rpb25JdGVtSWQiLCJyYXdEYXRhIiwibmV3QWN0aW9uSXRlbXMiLCJ0YWtlSXRlbVVudGlsTWF0Y2giLCJtZXJnZUluIiwic2V0SW4iLCJiYXNlZE9uIiwiRXZlbnRUeXBlQ29uc3RzIiwiU0NST0xMSU5HX0lOX1ZJRVciLCJFdmVudEJhc2VkT24iLCJFTEVNRU5UIiwiTU9VU0VfTU9WRSIsImV2ZW50U3RhdGVLZXkiLCJjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCIsIm5hbWVzcGFjZWRQYXJhbWV0ZXJJZCIsIm1lZGlhUXVlcnlLZXkiLCJsaXN0QSIsImxpc3RCIiwic29ydCIsInBsdWdpbkVsZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUFtcUNOQSxrQkFBa0I7ZUFBbEJBOztJQTdEQUMsY0FBYztlQUFkQTs7SUExOEJBQyxnQkFBZ0I7ZUFBaEJBOztJQTBtQ0FDLHFCQUFxQjtlQUFyQkE7O0lBdi9CQUMsbUJBQW1CO2VBQW5CQTs7SUEwSkFDLGdCQUFnQjtlQUFoQkE7O0lBcU5BQyxvQkFBb0I7ZUFBcEJBOztJQXhkQUMsWUFBWTtlQUFaQTs7SUFMQUMsYUFBYTtlQUFiQTs7SUF5VEFDLGlCQUFpQjtlQUFqQkE7O0lBMElIQyxrQkFBa0I7ZUFBbEJBOztJQW1wQkdDLHVCQUF1QjtlQUF2QkE7O0lBeUdBQyx3QkFBd0I7ZUFBeEJBOztJQTlvQkFDLGFBQWE7ZUFBYkE7O0lBZUFDLFlBQVk7ZUFBWkE7O0lBaXBCQUMsaUJBQWlCO2VBQWpCQTs7SUF2cENBQyxZQUFZO2VBQVpBOztJQWtrQ0FDLGlCQUFpQjtlQUFqQkE7O0lBNW1DQUMsVUFBVTtlQUFWQTs7SUFzakJBQyxpQkFBaUI7ZUFBakJBOztJQWxtQlJDLFlBQVk7ZUFBWkEscUJBQVk7O0lBcXVDSkMscUJBQXFCO2VBQXJCQTs7SUFuQkFDLDZCQUE2QjtlQUE3QkE7O0lBK0JBQyxlQUFlO2VBQWZBOzs7a0VB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 }), 7164: (function (__unused_webpack_module, exports) { "use strict"; // from https://github.com/acdlite/recompose/blob/master/src/packages/recompose/shallowEqual.js /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @providesModule shallowEqual * @typechecks */ /* eslint-disable no-self-compare */ /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "default", ({ enumerable: true, get: function() { return _default; } })); function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 // Added the nonzero y check to make Flow happy, but it is redundant return x !== 0 || y !== 0 || 1 / x === 1 / y; } // Step 6.a: NaN == NaN return x !== x && y !== y; } /** * Performs equality by iterating through keys on an object and returning false * when any key has values which are not strictly equal between the arguments. * Returns true when the values of all keys are strictly equal. */ function shallowEqual(objA, objB) { if (is(objA, objB)) { return true; } if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { return false; } const keysA = Object.keys(objA); const keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } // Test for A's keys different from B. for(let i = 0; i < keysA.length; i++){ if (!Object.hasOwn(objB, // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'PropertyKey'. keysA[i]) || // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. | TS2538 - Type 'undefined' cannot be used as an index type. !is(objA[keysA[i]], objB[keysA[i]])) { return false; } } return true; } const _default = shallowEqual; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNoYWxsb3dFcXVhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hY2RsaXRlL3JlY29tcG9zZS9ibG9iL21hc3Rlci9zcmMvcGFja2FnZXMvcmVjb21wb3NlL3NoYWxsb3dFcXVhbC5qc1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBzaGFsbG93RXF1YWxcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHg6IG51bWJlciB8IFJlY29yZDxhbnksIGFueT4sIHk6IG51bWJlciB8IFJlY29yZDxhbnksIGFueT4pIHtcbiAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICBpZiAoeCA9PT0geSkge1xuICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgLy8gQWRkZWQgdGhlIG5vbnplcm8geSBjaGVjayB0byBtYWtlIEZsb3cgaGFwcHksIGJ1dCBpdCBpcyByZWR1bmRhbnRcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgfVxuICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBOiBSZWNvcmQ8YW55LCBhbnk+LCBvYmpCOiBSZWNvcmQ8YW55LCBhbnk+KTogYm9vbGVhbiB7XG4gIGlmIChpcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fFxuICAgIG9iakEgPT09IG51bGwgfHxcbiAgICB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHxcbiAgICBvYmpCID09PSBudWxsXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChcbiAgICAgICFPYmplY3QuaGFzT3duKFxuICAgICAgICBvYmpCLFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnUHJvcGVydHlLZXknLlxuICAgICAgICBrZXlzQVtpXVxuICAgICAgKSB8fFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjUzOCAtIFR5cGUgJ3VuZGVmaW5lZCcgY2Fubm90IGJlIHVzZWQgYXMgYW4gaW5kZXggdHlwZS4gfCBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgICAhaXMob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaGFsbG93RXF1YWw7XG4iXSwibmFtZXMiOlsiaXMiLCJ4IiwieSIsInNoYWxsb3dFcXVhbCIsIm9iakEiLCJvYmpCIiwia2V5c0EiLCJPYmplY3QiLCJrZXlzIiwia2V5c0IiLCJsZW5ndGgiLCJpIiwiaGFzT3duIl0sIm1hcHBpbmdzIjoiQUFBQSwrRkFBK0Y7QUFFL0Y7Ozs7Ozs7O0NBUUMsR0FFRCxrQ0FBa0MsR0FFbEM7OztDQUdDOzs7OytCQXlERDs7O2VBQUE7OztBQXhEQSxTQUFTQSxHQUFHQyxDQUE0QixFQUFFQyxDQUE0QjtJQUNwRSxzQkFBc0I7SUFDdEIsSUFBSUQsTUFBTUMsR0FBRztRQUNYLGtCQUFrQjtRQUNsQiwwQkFBMEI7UUFDMUIsb0VBQW9FO1FBQ3BFLE9BQU9ELE1BQU0sS0FBS0MsTUFBTSxLQUFLLElBQUlELE1BQU0sSUFBSUM7SUFDN0M7SUFDQSx1QkFBdUI7SUFDdkIsT0FBT0QsTUFBTUEsS0FBS0MsTUFBTUE7QUFDMUI7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU0MsYUFBYUMsSUFBc0IsRUFBRUMsSUFBc0I7SUFDbEUsSUFBSUwsR0FBR0ksTUFBTUMsT0FBTztRQUNsQixPQUFPO0lBQ1Q7SUFFQSxJQUNFLE9BQU9ELFNBQVMsWUFDaEJBLFNBQVMsUUFDVCxPQUFPQyxTQUFTLFlBQ2hCQSxTQUFTLE1BQ1Q7UUFDQSxPQUFPO0lBQ1Q7SUFFQSxNQUFNQyxRQUFRQyxPQUFPQyxJQUFJLENBQUNKO0lBQzFCLE1BQU1LLFFBQVFGLE9BQU9DLElBQUksQ0FBQ0g7SUFFMUIsSUFBSUMsTUFBTUksTUFBTSxLQUFLRCxNQUFNQyxNQUFNLEVBQUU7UUFDakMsT0FBTztJQUNUO0lBRUEsc0NBQXNDO0lBQ3RDLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJTCxNQUFNSSxNQUFNLEVBQUVDLElBQUs7UUFDckMsSUFDRSxDQUFDSixPQUFPSyxNQUFNLENBQ1pQLE1BQ0EsMEhBQTBIO1FBQzFIQyxLQUFLLENBQUNLLEVBQUUsS0FFViw2SUFBNkk7UUFDN0ksQ0FBQ1gsR0FBR0ksSUFBSSxDQUFDRSxLQUFLLENBQUNLLEVBQUUsQ0FBQyxFQUFFTixJQUFJLENBQUNDLEtBQUssQ0FBQ0ssRUFBRSxDQUFDLEdBQ2xDO1lBQ0EsT0FBTztRQUNUO0lBQ0Y7SUFFQSxPQUFPO0FBQ1Q7TUFFQSxXQUFlUiJ9 }), 5861: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { createElementState: function() { return createElementState; }, ixElements: function() { return ixElements; }, mergeActionState: function() { return mergeActionState; } }); const _timm = __webpack_require__(1185); const _sharedconstants = __webpack_require__(7087); const { HTML_ELEMENT, PLAIN_OBJECT, ABSTRACT_NODE, CONFIG_X_VALUE, CONFIG_Y_VALUE, CONFIG_Z_VALUE, CONFIG_VALUE, CONFIG_X_UNIT, CONFIG_Y_UNIT, CONFIG_Z_UNIT, CONFIG_UNIT } = _sharedconstants.IX2EngineConstants; const { IX2_SESSION_STOPPED, IX2_INSTANCE_ADDED, IX2_ELEMENT_STATE_CHANGED } = _sharedconstants.IX2EngineActionTypes; const initialState = {}; const refState = 'refState'; const ixElements = (state = initialState, action = {})=>{ switch(action.type){ case IX2_SESSION_STOPPED: { return initialState; } case IX2_INSTANCE_ADDED: { const { elementId, element: ref, origin, actionItem, refType } = action.payload; const { actionTypeId } = actionItem; let newState = state; // Create new ref entry if it doesn't exist if ((0, _timm.getIn)(newState, [ elementId, ref ]) !== ref) { newState = createElementState(newState, ref, refType, elementId, actionItem); } // Merge origin values into ref state return mergeActionState(newState, elementId, actionTypeId, origin, actionItem); } case IX2_ELEMENT_STATE_CHANGED: { const { elementId, actionTypeId, current, actionItem } = action.payload; return mergeActionState(state, elementId, actionTypeId, current, actionItem); } default: { return state; } } }; function createElementState(state, ref, refType, elementId, actionItem) { const refId = refType === PLAIN_OBJECT ? (0, _timm.getIn)(actionItem, [ 'config', 'target', 'objectId' ]) : null; return (0, _timm.mergeIn)(state, [ elementId ], { id: elementId, ref, refId, refType }); } function mergeActionState(state, elementId, actionTypeId, actionState, actionItem) { const units = pickUnits(actionItem); const mergePath = [ elementId, refState, actionTypeId ]; return (0, _timm.mergeIn)(state, mergePath, actionState, units); } const valueUnitPairs = [ [ CONFIG_X_VALUE, CONFIG_X_UNIT ], [ CONFIG_Y_VALUE, CONFIG_Y_UNIT ], [ CONFIG_Z_VALUE, CONFIG_Z_UNIT ], [ CONFIG_VALUE, CONFIG_UNIT ] ]; function pickUnits(actionItem) { const { config } = actionItem; return valueUnitPairs.reduce((result, pair)=>{ const valueKey = pair[0]; const unitKey = pair[1]; // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. const configValue = config[valueKey]; // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. const configUnit = config[unitKey]; if (configValue != null && configUnit != null) { // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. result[unitKey] = configUnit; } return result; }, {}); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVsZW1lbnRzUmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldEluLCBtZXJnZUlufSBmcm9tICd0aW1tJztcbmltcG9ydCB7XG4gIElYMkVuZ2luZUFjdGlvblR5cGVzLFxuICBJWDJFbmdpbmVDb25zdGFudHMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuY29uc3Qge1xuICBIVE1MX0VMRU1FTlQsXG4gIFBMQUlOX09CSkVDVCxcbiAgQUJTVFJBQ1RfTk9ERSxcbiAgQ09ORklHX1hfVkFMVUUsXG4gIENPTkZJR19ZX1ZBTFVFLFxuICBDT05GSUdfWl9WQUxVRSxcbiAgQ09ORklHX1ZBTFVFLFxuICBDT05GSUdfWF9VTklULFxuICBDT05GSUdfWV9VTklULFxuICBDT05GSUdfWl9VTklULFxuICBDT05GSUdfVU5JVCxcbn0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5cbmNvbnN0IHtJWDJfU0VTU0lPTl9TVE9QUEVELCBJWDJfSU5TVEFOQ0VfQURERUQsIElYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUR9ID1cbiAgSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5cbnR5cGUgUmVmVHlwZXMgPVxuICB8IHR5cGVvZiBIVE1MX0VMRU1FTlRcbiAgfCB0eXBlb2YgUExBSU5fT0JKRUNUXG4gIHwgdHlwZW9mIEFCU1RSQUNUX05PREU7XG5cbnR5cGUgQWN0aW9uU3RhdGUgPSB7XG4gIHhWYWx1ZT86IG51bWJlcjtcbiAgeVZhbHVlPzogbnVtYmVyO1xuICB6VmFsdWU/OiBudW1iZXI7XG4gIHZhbHVlPzogbnVtYmVyO1xuICB4VW5pdD86IHN0cmluZztcbiAgeVVuaXQ/OiBzdHJpbmc7XG4gIHpVbml0Pzogc3RyaW5nO1xuICB1bml0Pzogc3RyaW5nO1xufTtcblxudHlwZSBFbGVtZW50c1N0YXRlID0ge1xuICBbZWxlbWVudElkOiBzdHJpbmddOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICByZWY6IHVua25vd247IC8vIEhUTUxFbGVtZW50IHwgT2JqZWN0O1xuICAgIHJlZklkOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlZlR5cGU6IFJlZlR5cGVzO1xuICAgIHJlZlN0YXRlOiB7XG4gICAgICBbYWN0aW9uVHlwZUlkOiBzdHJpbmddOiBBY3Rpb25TdGF0ZTtcbiAgICB9O1xuICB9O1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBFbGVtZW50c1N0YXRlID0ge307XG5jb25zdCByZWZTdGF0ZSA9ICdyZWZTdGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBpeEVsZW1lbnRzID0gKFxuICBzdGF0ZTogRWxlbWVudHNTdGF0ZSA9IGluaXRpYWxTdGF0ZSxcbiAgYWN0aW9uOiBSZWNvcmQ8YW55LCBhbnk+ID0ge31cbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfU0VTU0lPTl9TVE9QUEVEOiB7XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIH1cbiAgICBjYXNlIElYMl9JTlNUQU5DRV9BRERFRDoge1xuICAgICAgY29uc3Qge1xuICAgICAgICBlbGVtZW50SWQsXG4gICAgICAgIGVsZW1lbnQ6IHJlZixcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBhY3Rpb25JdGVtLFxuICAgICAgICByZWZUeXBlLFxuICAgICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gICAgICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICAgICAgLy8gQ3JlYXRlIG5ldyByZWYgZW50cnkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgaWYgKGdldEluKG5ld1N0YXRlLCBbZWxlbWVudElkLCByZWZdKSAhPT0gcmVmKSB7XG4gICAgICAgIG5ld1N0YXRlID0gY3JlYXRlRWxlbWVudFN0YXRlKFxuICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgIHJlZixcbiAgICAgICAgICByZWZUeXBlLFxuICAgICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgICBhY3Rpb25JdGVtXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1lcmdlIG9yaWdpbiB2YWx1ZXMgaW50byByZWYgc3RhdGVcbiAgICAgIHJldHVybiBtZXJnZUFjdGlvblN0YXRlKFxuICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgZWxlbWVudElkLFxuICAgICAgICBhY3Rpb25UeXBlSWQsXG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgYWN0aW9uSXRlbVxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBJWDJfRUxFTUVOVF9TVEFURV9DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7ZWxlbWVudElkLCBhY3Rpb25UeXBlSWQsIGN1cnJlbnQsIGFjdGlvbkl0ZW19ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gbWVyZ2VBY3Rpb25TdGF0ZShcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgYWN0aW9uVHlwZUlkLFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICBhY3Rpb25JdGVtXG4gICAgICApO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFN0YXRlKFxuICBzdGF0ZTogRWxlbWVudHNTdGF0ZSxcbiAgcmVmOiB1bmtub3duLFxuICByZWZUeXBlOiBSZWZUeXBlcyxcbiAgZWxlbWVudElkOiBzdHJpbmcsXG4gIGFjdGlvbkl0ZW06IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbikge1xuICBjb25zdCByZWZJZCA9XG4gICAgcmVmVHlwZSA9PT0gUExBSU5fT0JKRUNUXG4gICAgICA/IGdldEluKGFjdGlvbkl0ZW0sIFsnY29uZmlnJywgJ3RhcmdldCcsICdvYmplY3RJZCddKVxuICAgICAgOiBudWxsO1xuICByZXR1cm4gbWVyZ2VJbihzdGF0ZSwgW2VsZW1lbnRJZF0sIHtcbiAgICBpZDogZWxlbWVudElkLFxuICAgIHJlZixcbiAgICByZWZJZCxcbiAgICByZWZUeXBlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQWN0aW9uU3RhdGUoXG4gIHN0YXRlOiBFbGVtZW50c1N0YXRlLFxuICBlbGVtZW50SWQ6IHN0cmluZyxcbiAgYWN0aW9uVHlwZUlkOiBzdHJpbmcsXG4gIGFjdGlvblN0YXRlOiBBY3Rpb25TdGF0ZSxcbiAgYWN0aW9uSXRlbTogUmVjb3JkPGFueSwgYW55PlxuKSB7XG4gIGNvbnN0IHVuaXRzID0gcGlja1VuaXRzKGFjdGlvbkl0ZW0pO1xuICBjb25zdCBtZXJnZVBhdGggPSBbZWxlbWVudElkLCByZWZTdGF0ZSwgYWN0aW9uVHlwZUlkXTtcbiAgcmV0dXJuIG1lcmdlSW4oc3RhdGUsIG1lcmdlUGF0aCwgYWN0aW9uU3RhdGUsIHVuaXRzKTtcbn1cblxuY29uc3QgdmFsdWVVbml0UGFpcnMgPSBbXG4gIFtDT05GSUdfWF9WQUxVRSwgQ09ORklHX1hfVU5JVF0sXG4gIFtDT05GSUdfWV9WQUxVRSwgQ09ORklHX1lfVU5JVF0sXG4gIFtDT05GSUdfWl9WQUxVRSwgQ09ORklHX1pfVU5JVF0sXG4gIFtDT05GSUdfVkFMVUUsIENPTkZJR19VTklUXSxcbl07XG5cbmZ1bmN0aW9uIHBpY2tVbml0cyhhY3Rpb25JdGVtOiBSZWNvcmQ8YW55LCBhbnk+KSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uSXRlbTtcbiAgcmV0dXJuIHZhbHVlVW5pdFBhaXJzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PigocmVzdWx0LCBwYWlyKSA9PiB7XG4gICAgY29uc3QgdmFsdWVLZXkgPSBwYWlyWzBdO1xuICAgIGNvbnN0IHVuaXRLZXkgPSBwYWlyWzFdO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBjb25maWdbdmFsdWVLZXldO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgY29uc3QgY29uZmlnVW5pdCA9IGNvbmZpZ1t1bml0S2V5XTtcbiAgICBpZiAoY29uZmlnVmFsdWUgIT0gbnVsbCAmJiBjb25maWdVbml0ICE9IG51bGwpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgICByZXN1bHRbdW5pdEtleV0gPSBjb25maWdVbml0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlRWxlbWVudFN0YXRlIiwiaXhFbGVtZW50cyIsIm1lcmdlQWN0aW9uU3RhdGUiLCJIVE1MX0VMRU1FTlQiLCJQTEFJTl9PQkpFQ1QiLCJBQlNUUkFDVF9OT0RFIiwiQ09ORklHX1hfVkFMVUUiLCJDT05GSUdfWV9WQUxVRSIsIkNPTkZJR19aX1ZBTFVFIiwiQ09ORklHX1ZBTFVFIiwiQ09ORklHX1hfVU5JVCIsIkNPTkZJR19ZX1VOSVQiLCJDT05GSUdfWl9VTklUIiwiQ09ORklHX1VOSVQiLCJJWDJFbmdpbmVDb25zdGFudHMiLCJJWDJfU0VTU0lPTl9TVE9QUEVEIiwiSVgyX0lOU1RBTkNFX0FEREVEIiwiSVgyX0VMRU1FTlRfU1RBVEVfQ0hBTkdFRCIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwiaW5pdGlhbFN0YXRlIiwicmVmU3RhdGUiLCJzdGF0ZSIsImFjdGlvbiIsInR5cGUiLCJlbGVtZW50SWQiLCJlbGVtZW50IiwicmVmIiwib3JpZ2luIiwiYWN0aW9uSXRlbSIsInJlZlR5cGUiLCJwYXlsb2FkIiwiYWN0aW9uVHlwZUlkIiwibmV3U3RhdGUiLCJnZXRJbiIsImN1cnJlbnQiLCJyZWZJZCIsIm1lcmdlSW4iLCJpZCIsImFjdGlvblN0YXRlIiwidW5pdHMiLCJwaWNrVW5pdHMiLCJtZXJnZVBhdGgiLCJ2YWx1ZVVuaXRQYWlycyIsImNvbmZpZyIsInJlZHVjZSIsInJlc3VsdCIsInBhaXIiLCJ2YWx1ZUtleSIsInVuaXRLZXkiLCJjb25maWdWYWx1ZSIsImNvbmZpZ1VuaXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBOEdnQkEsa0JBQWtCO2VBQWxCQTs7SUF4REhDLFVBQVU7ZUFBVkE7O0lBNkVHQyxnQkFBZ0I7ZUFBaEJBOzs7c0JBbklhO2lDQUl0QjtBQUVQLE1BQU0sRUFDSkMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLGFBQWEsRUFDYkMsYUFBYSxFQUNiQyxXQUFXLEVBQ1osR0FBR0MsbUNBQWtCO0FBRXRCLE1BQU0sRUFBQ0MsbUJBQW1CLEVBQUVDLGtCQUFrQixFQUFFQyx5QkFBeUIsRUFBQyxHQUN4RUMscUNBQW9CO0FBOEJ0QixNQUFNQyxlQUE4QixDQUFDO0FBQ3JDLE1BQU1DLFdBQVc7QUFFVixNQUFNbkIsYUFBYSxDQUN4Qm9CLFFBQXVCRixZQUFZLEVBQ25DRyxTQUEyQixDQUFDLENBQUM7SUFFN0IsT0FBUUEsT0FBT0MsSUFBSTtRQUNqQixLQUFLUjtZQUFxQjtnQkFDeEIsT0FBT0k7WUFDVDtRQUNBLEtBQUtIO1lBQW9CO2dCQUN2QixNQUFNLEVBQ0pRLFNBQVMsRUFDVEMsU0FBU0MsR0FBRyxFQUNaQyxNQUFNLEVBQ05DLFVBQVUsRUFDVkMsT0FBTyxFQUNSLEdBQUdQLE9BQU9RLE9BQU87Z0JBRWxCLE1BQU0sRUFBQ0MsWUFBWSxFQUFDLEdBQUdIO2dCQUN2QixJQUFJSSxXQUFXWDtnQkFFZiwyQ0FBMkM7Z0JBQzNDLElBQUlZLElBQUFBLFdBQUssRUFBQ0QsVUFBVTtvQkFBQ1I7b0JBQVdFO2lCQUFJLE1BQU1BLEtBQUs7b0JBQzdDTSxXQUFXaEMsbUJBQ1RnQyxVQUNBTixLQUNBRyxTQUNBTCxXQUNBSTtnQkFFSjtnQkFFQSxxQ0FBcUM7Z0JBQ3JDLE9BQU8xQixpQkFDTDhCLFVBQ0FSLFdBQ0FPLGNBQ0FKLFFBQ0FDO1lBRUo7UUFDQSxLQUFLWDtZQUEyQjtnQkFDOUIsTUFBTSxFQUFDTyxTQUFTLEVBQUVPLFlBQVksRUFBRUcsT0FBTyxFQUFFTixVQUFVLEVBQUMsR0FBR04sT0FBT1EsT0FBTztnQkFDckUsT0FBTzVCLGlCQUNMbUIsT0FDQUcsV0FDQU8sY0FDQUcsU0FDQU47WUFFSjtRQUNBO1lBQVM7Z0JBQ1AsT0FBT1A7WUFDVDtJQUNGO0FBQ0Y7QUFFTyxTQUFTckIsbUJBQ2RxQixLQUFvQixFQUNwQkssR0FBWSxFQUNaRyxPQUFpQixFQUNqQkwsU0FBaUIsRUFDakJJLFVBRUM7SUFFRCxNQUFNTyxRQUNKTixZQUFZekIsZUFDUjZCLElBQUFBLFdBQUssRUFBQ0wsWUFBWTtRQUFDO1FBQVU7UUFBVTtLQUFXLElBQ2xEO0lBQ04sT0FBT1EsSUFBQUEsYUFBTyxFQUFDZixPQUFPO1FBQUNHO0tBQVUsRUFBRTtRQUNqQ2EsSUFBSWI7UUFDSkU7UUFDQVM7UUFDQU47SUFDRjtBQUNGO0FBRU8sU0FBUzNCLGlCQUNkbUIsS0FBb0IsRUFDcEJHLFNBQWlCLEVBQ2pCTyxZQUFvQixFQUNwQk8sV0FBd0IsRUFDeEJWLFVBQTRCO0lBRTVCLE1BQU1XLFFBQVFDLFVBQVVaO0lBQ3hCLE1BQU1hLFlBQVk7UUFBQ2pCO1FBQVdKO1FBQVVXO0tBQWE7SUFDckQsT0FBT0ssSUFBQUEsYUFBTyxFQUFDZixPQUFPb0IsV0FBV0gsYUFBYUM7QUFDaEQ7QUFFQSxNQUFNRyxpQkFBaUI7SUFDckI7UUFBQ3BDO1FBQWdCSTtLQUFjO0lBQy9CO1FBQUNIO1FBQWdCSTtLQUFjO0lBQy9CO1FBQUNIO1FBQWdCSTtLQUFjO0lBQy9CO1FBQUNIO1FBQWNJO0tBQVk7Q0FDNUI7QUFFRCxTQUFTMkIsVUFBVVosVUFBNEI7SUFDN0MsTUFBTSxFQUFDZSxNQUFNLEVBQUMsR0FBR2Y7SUFDakIsT0FBT2MsZUFBZUUsTUFBTSxDQUFzQixDQUFDQyxRQUFRQztRQUN6RCxNQUFNQyxXQUFXRCxJQUFJLENBQUMsRUFBRTtRQUN4QixNQUFNRSxVQUFVRixJQUFJLENBQUMsRUFBRTtRQUN2QixnRkFBZ0Y7UUFDaEYsTUFBTUcsY0FBY04sTUFBTSxDQUFDSSxTQUFTO1FBQ3BDLGdGQUFnRjtRQUNoRixNQUFNRyxhQUFhUCxNQUFNLENBQUNLLFFBQVE7UUFDbEMsSUFBSUMsZUFBZSxRQUFRQyxjQUFjLE1BQU07WUFDN0MsZ0ZBQWdGO1lBQ2hGTCxNQUFNLENBQUNHLFFBQVEsR0FBR0U7UUFDcEI7UUFDQSxPQUFPTDtJQUNULEdBQUcsQ0FBQztBQUNOIn0= }), 8497: (function () { /** * ---------------------------------------------------------------------- * Webflow: Interactions 2.0: Init */ Webflow.require('ix2').init( {"events":{"e":{"id":"e","name":"","animationType":"custom","eventTypeId":"MOUSE_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-51"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e51","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e51","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1770774629932},"e-2":{"id":"e-2","name":"","animationType":"custom","eventTypeId":"MOUSE_SECOND_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a-2","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-50"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e51","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e51","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1770774629933},"e-3":{"id":"e-3","name":"","animationType":"preset","eventTypeId":"MOUSE_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-49"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1769136330014},"e-4":{"id":"e-4","name":"","animationType":"preset","eventTypeId":"MOUSE_SECOND_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a-2","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-48"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1769136330014},"e-5":{"id":"e-5","name":"","animationType":"custom","eventTypeId":"MOUSE_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-51"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1770774629932},"e-6":{"id":"e-6","name":"","animationType":"custom","eventTypeId":"MOUSE_SECOND_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a-2","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-50"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1770774629933},"e-17":{"id":"e-17","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-18"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|28d7fc4f-c4a6-5c93-0f4c-bda8eb51b2a1","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|28d7fc4f-c4a6-5c93-0f4c-bda8eb51b2a1","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"LEFT","effectIn":true},"createdOn":1774947615812},"e-18":{"id":"e-18","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutLeft","autoStopEventId":"e-17"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|28d7fc4f-c4a6-5c93-0f4c-bda8eb51b2a1","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|28d7fc4f-c4a6-5c93-0f4c-bda8eb51b2a1","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"LEFT","effectIn":false},"createdOn":1774947615813},"e-21":{"id":"e-21","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-22"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|9f6bd44d-09bc-6502-1188-5f0959e917a7","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|9f6bd44d-09bc-6502-1188-5f0959e917a7","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":400,"direction":"RIGHT","effectIn":true},"createdOn":1774947986910},"e-22":{"id":"e-22","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutRight","autoStopEventId":"e-21"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|9f6bd44d-09bc-6502-1188-5f0959e917a7","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|9f6bd44d-09bc-6502-1188-5f0959e917a7","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":200,"direction":"RIGHT","effectIn":false},"createdOn":1774947986910},"e-23":{"id":"e-23","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-24"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|6f287dcc-03bb-bd59-45ae-c54fd0ad99f6","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|6f287dcc-03bb-bd59-45ae-c54fd0ad99f6","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":400,"direction":"LEFT","effectIn":true},"createdOn":1774948056559},"e-24":{"id":"e-24","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-23"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|6f287dcc-03bb-bd59-45ae-c54fd0ad99f6","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|6f287dcc-03bb-bd59-45ae-c54fd0ad99f6","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":200,"direction":"LEFT","effectIn":true},"createdOn":1774948056559},"e-27":{"id":"e-27","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-28"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|6f287dcc-03bb-bd59-45ae-c54fd0ad99f9","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|6f287dcc-03bb-bd59-45ae-c54fd0ad99f9","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"RIGHT","effectIn":true},"createdOn":1774948128519},"e-28":{"id":"e-28","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutRight","autoStopEventId":"e-27"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|6f287dcc-03bb-bd59-45ae-c54fd0ad99f9","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|6f287dcc-03bb-bd59-45ae-c54fd0ad99f9","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"RIGHT","effectIn":false},"createdOn":1774948128519},"e-29":{"id":"e-29","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-30"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|b31dc74e-e738-1c6c-3542-789131a689f3","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|b31dc74e-e738-1c6c-3542-789131a689f3","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":200,"direction":"LEFT","effectIn":true},"createdOn":1774948242793},"e-30":{"id":"e-30","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutLeft","autoStopEventId":"e-29"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|b31dc74e-e738-1c6c-3542-789131a689f3","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|b31dc74e-e738-1c6c-3542-789131a689f3","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":200,"direction":"LEFT","effectIn":false},"createdOn":1774948242793},"e-31":{"id":"e-31","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-32"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|d9e66682-1df7-4936-e5c8-01efd67f4a80","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|d9e66682-1df7-4936-e5c8-01efd67f4a80","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"RIGHT","effectIn":true},"createdOn":1774948245120},"e-32":{"id":"e-32","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutRight","autoStopEventId":"e-31"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|d9e66682-1df7-4936-e5c8-01efd67f4a80","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|d9e66682-1df7-4936-e5c8-01efd67f4a80","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"RIGHT","effectIn":false},"createdOn":1774948245120},"e-33":{"id":"e-33","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-34"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row","originalId":"69c2668b77c7997eafe5e62b|7e003bb2-bd90-95e2-c45a-6fe72b40ffb3","appliesTo":"CLASS"},"targets":[{"selector":".row","originalId":"69c2668b77c7997eafe5e62b|7e003bb2-bd90-95e2-c45a-6fe72b40ffb3","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-34":{"id":"e-34","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-33"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row","originalId":"69c2668b77c7997eafe5e62b|7e003bb2-bd90-95e2-c45a-6fe72b40ffb3","appliesTo":"CLASS"},"targets":[{"selector":".row","originalId":"69c2668b77c7997eafe5e62b|7e003bb2-bd90-95e2-c45a-6fe72b40ffb3","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-35":{"id":"e-35","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-36"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|49ec0dd9-3984-64e7-c31c-8ecb690acb6e","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|49ec0dd9-3984-64e7-c31c-8ecb690acb6e","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"LEFT","effectIn":true},"createdOn":1775186486253},"e-36":{"id":"e-36","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutLeft","autoStopEventId":"e-35"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|49ec0dd9-3984-64e7-c31c-8ecb690acb6e","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|49ec0dd9-3984-64e7-c31c-8ecb690acb6e","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"LEFT","effectIn":false},"createdOn":1775186486253},"e-37":{"id":"e-37","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-38"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|49ec0dd9-3984-64e7-c31c-8ecb690acb6f","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|49ec0dd9-3984-64e7-c31c-8ecb690acb6f","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":400,"direction":"RIGHT","effectIn":true},"createdOn":1775186486253},"e-38":{"id":"e-38","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutRight","autoStopEventId":"e-37"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|49ec0dd9-3984-64e7-c31c-8ecb690acb6f","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|49ec0dd9-3984-64e7-c31c-8ecb690acb6f","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":200,"direction":"RIGHT","effectIn":false},"createdOn":1775186486253},"e-39":{"id":"e-39","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-40"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|9d087ce2-d2a4-66df-ce6f-fe65653e4943","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|9d087ce2-d2a4-66df-ce6f-fe65653e4943","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"LEFT","effectIn":true},"createdOn":1775186502962},"e-40":{"id":"e-40","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutLeft","autoStopEventId":"e-39"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|9d087ce2-d2a4-66df-ce6f-fe65653e4943","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|9d087ce2-d2a4-66df-ce6f-fe65653e4943","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"LEFT","effectIn":false},"createdOn":1775186502962},"e-41":{"id":"e-41","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-42"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|9d087ce2-d2a4-66df-ce6f-fe65653e4944","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|9d087ce2-d2a4-66df-ce6f-fe65653e4944","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":400,"direction":"RIGHT","effectIn":true},"createdOn":1775186502962},"e-42":{"id":"e-42","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutRight","autoStopEventId":"e-41"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69c2668b77c7997eafe5e62b|9d087ce2-d2a4-66df-ce6f-fe65653e4944","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69c2668b77c7997eafe5e62b|9d087ce2-d2a4-66df-ce6f-fe65653e4944","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":200,"direction":"RIGHT","effectIn":false},"createdOn":1775186502962}},"actionLists":{"a":{"id":"a","title":"color-red 2","actionItemGroups":[{"actionItems":[{"id":"a-n","actionTypeId":"STYLE_BACKGROUND_COLOR","config":{"delay":0,"easing":"","duration":500,"target":{},"globalSwatchId":"","rValue":255,"bValue":62,"gValue":62,"aValue":1}},{"id":"a-n-2","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":1,"unit":""}},{"id":"a-n-3","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":0,"unit":""}},{"id":"a-n-4","actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"","duration":500,"target":{},"xValue":-41,"xUnit":"px","yUnit":"PX","zUnit":"PX"}},{"id":"a-n-5","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":0,"unit":""}}]}],"useFirstGroupAsInitialState":false,"createdOn":1769064936911},"a-2":{"id":"a-2","title":"color-red 5","actionItemGroups":[{"actionItems":[{"id":"a-2-n","actionTypeId":"STYLE_BACKGROUND_COLOR","config":{"delay":0,"easing":"","duration":500,"target":{},"globalSwatchId":"","rValue":56,"bValue":236,"gValue":152,"aValue":1}},{"id":"a-2-n-2","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":0,"unit":""}},{"id":"a-2-n-3","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":1,"unit":""}},{"id":"a-2-n-4","actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"","duration":500,"target":{},"xValue":0,"xUnit":"px","yUnit":"PX","zUnit":"PX"}},{"id":"a-2-n-5","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":1,"unit":""}}]}],"useFirstGroupAsInitialState":false,"createdOn":1769064936911},"slideInLeft":{"id":"slideInLeft","useFirstGroupAsInitialState":true,"actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":-100,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]},{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":1}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]},"slideOutLeft":{"id":"slideOutLeft","actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"inQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"inQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":-100,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]},"slideInRight":{"id":"slideInRight","useFirstGroupAsInitialState":true,"actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":100,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]},{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":1}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]},"slideOutRight":{"id":"slideOutRight","actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"inQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"inQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":100,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]},"slideInBottom":{"id":"slideInBottom","useFirstGroupAsInitialState":true,"actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":100,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}},{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":1}}]}]},"slideOutBottom":{"id":"slideOutBottom","actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"inQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"inQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":100,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]}},"site":{"mediaQueries":[{"key":"main","min":992,"max":10000},{"key":"medium","min":768,"max":991},{"key":"small","min":480,"max":767},{"key":"tiny","min":0,"max":479}]}} ); }), }); /************************************************************************/ // The module cache var __webpack_module_cache__ = {}; // The require function function __webpack_require__(moduleId) { // Check if module is in cache var cachedModule = __webpack_module_cache__[moduleId]; if (cachedModule !== undefined) { return cachedModule.exports; } // Create a new module (and put it into the cache) var module = (__webpack_module_cache__[moduleId] = { id: moduleId, loaded: false, exports: {} }); // Execute the module function __webpack_modules__[moduleId](module, module.exports, __webpack_require__); // Flag the module as loaded module.loaded = true; // Return the exports of the module return module.exports; } /************************************************************************/ // webpack/runtime/define_property_getters (() => { __webpack_require__.d = (exports, definition) => { for(var key in definition) { if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); } } }; })(); // webpack/runtime/esm_module_decorator (() => { __webpack_require__.hmd = (module) => { module = Object.create(module); if (!module.children) module.children = []; Object.defineProperty(module, 'exports', { enumerable: true, set: () => { throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id); } }); return module; }; })(); // webpack/runtime/global (() => { __webpack_require__.g = (() => { if (typeof globalThis === 'object') return globalThis; try { return this || new Function('return this')(); } catch (e) { if (typeof window === 'object') return window; } })(); })(); // webpack/runtime/has_own_property (() => { __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) })(); // webpack/runtime/make_namespace_object (() => { // define __esModule on exports __webpack_require__.r = (exports) => { if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); } Object.defineProperty(exports, '__esModule', { value: true }); }; })(); // webpack/runtime/node_module_decorator (() => { __webpack_require__.nmd = (module) => { module.paths = []; if (!module.children) module.children = []; return module; }; })(); // webpack/runtime/rspack_version (() => { __webpack_require__.rv = () => ("1.3.9") })(); // webpack/runtime/rspack_unique_id (() => { __webpack_require__.ruid = "bundler=rspack@1.3.9"; })(); /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. (() => { __webpack_require__(9461);__webpack_require__(7624);__webpack_require__(286);__webpack_require__(8334);__webpack_require__(2338);__webpack_require__(3695);__webpack_require__(941);__webpack_require__(5134);__webpack_require__(9078);__webpack_require__(8497); })(); })() ;