{"version":3,"file":"javascripts/47039.75232323c6e6391cf395.js","mappings":"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","sources":["webpack:///../../node_modules/lodash.clonedeep/index.js","webpack:///../../node_modules/lottie-colorify/lib/index.js","webpack:///../../node_modules/lottie-web/build/player/lottie.js"],"sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n","\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getColors = exports.flatten = exports.replaceColor = exports.colorify = void 0;\nvar lodash_clonedeep_1 = __importDefault(require(\"lodash.clonedeep\"));\nexports.colorify = function (destColors, lottie) {\n if (destColors === void 0) { destColors = []; }\n var modifiedColors = [];\n for (var _i = 0, destColors_1 = destColors; _i < destColors_1.length; _i++) {\n var color = destColors_1[_i];\n modifiedColors.push(convertColorToLottieColor(color));\n }\n var newLottie = modifyColors(modifiedColors, lodash_clonedeep_1.default(lottie));\n return newLottie;\n};\nvar convertColorToLottieColor = function (color) {\n if (typeof color === 'string' && color.match(/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i)) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(color);\n if (!result) {\n throw new Error('Color can be only hex or rgb array (ex. [10,20,30])');\n }\n return [\n Math.round((parseInt(result[1], 16) / 255) * 1000) / 1000,\n Math.round((parseInt(result[2], 16) / 255) * 1000) / 1000,\n Math.round((parseInt(result[3], 16) / 255) * 1000) / 1000,\n ];\n }\n else if (typeof color === 'object' && color.length === 3 && color.every(function (item) { return item >= 0 && item <= 255; })) {\n return [\n Math.round((color[0] / 255) * 1000) / 1000,\n Math.round((color[1] / 255) * 1000) / 1000,\n Math.round((color[2] / 255) * 1000) / 1000,\n ];\n }\n else if (!color) {\n return undefined;\n }\n else {\n throw new Error('Color can be only hex or rgb array (ex. [10,20,30])');\n }\n};\nvar round = function (n) { return Math.round(n * 1000) / 1000; };\nexports.replaceColor = function (sourceColor, targetColor, lottieObj) {\n var genSourceLottieColor = convertColorToLottieColor(sourceColor);\n var genTargetLottieColor = convertColorToLottieColor(targetColor);\n if (!genSourceLottieColor || !genTargetLottieColor) {\n throw new Error('Proper colors must be used for both source and target');\n }\n function doReplace(sourceLottieColor, targetLottieColor, obj) {\n if (obj.s && Array.isArray(obj.s) && obj.s.length === 4) {\n if (sourceLottieColor[0] === obj.s[0] && sourceLottieColor[1] === obj.s[1] && sourceLottieColor[2] === obj.s[2]) {\n obj.s = __spreadArrays(targetLottieColor, [1]);\n }\n }\n else if (obj.c && obj.c.k) {\n if (Array.isArray(obj.c.k) && typeof obj.c.k[0] !== 'number') {\n doReplace(sourceLottieColor, targetLottieColor, obj.c.k);\n }\n else if (sourceLottieColor[0] === round(obj.c.k[0]) &&\n sourceLottieColor[1] === round(obj.c.k[1]) &&\n sourceLottieColor[2] === round(obj.c.k[2])) {\n obj.c.k = targetLottieColor;\n }\n }\n else {\n for (var key in obj) {\n if (typeof obj[key] === 'object') {\n doReplace(sourceLottieColor, targetLottieColor, obj[key]);\n }\n }\n }\n return obj;\n }\n return doReplace(genSourceLottieColor, genTargetLottieColor, lodash_clonedeep_1.default(lottieObj));\n};\nexports.flatten = function (targetColor, lottieObj) {\n var genTargetLottieColor = convertColorToLottieColor(targetColor);\n if (!genTargetLottieColor) {\n throw new Error('Proper colors must be used for target');\n }\n function doFlatten(targetLottieColor, obj) {\n if (obj.s && Array.isArray(obj.s) && obj.s.length === 4) {\n obj.s = __spreadArrays(targetLottieColor, [1]);\n }\n else if (obj.c && obj.c.k) {\n if (Array.isArray(obj.c.k) && typeof obj.c.k[0] !== 'number') {\n doFlatten(targetLottieColor, obj.c.k);\n }\n else {\n obj.c.k = targetLottieColor;\n }\n }\n else {\n for (var key in obj) {\n if (typeof obj[key] === 'object') {\n doFlatten(targetLottieColor, obj[key]);\n }\n }\n }\n return obj;\n }\n return doFlatten(genTargetLottieColor, lodash_clonedeep_1.default(lottieObj));\n};\nvar modifyColors = function (colorsArray, lottieObj) {\n var i = 0;\n function doModify(colors, obj) {\n if (obj.s && Array.isArray(obj.s) && obj.s.length === 4) {\n if (colors[i]) {\n obj.s = __spreadArrays(colors[i], [1]);\n }\n i++;\n }\n else if (obj.c && obj.c.k) {\n if (Array.isArray(obj.c.k) && typeof obj.c.k[0] !== 'number') {\n doModify(colors, obj.c.k);\n }\n else {\n if (colors[i]) {\n obj.c.k = colors[i];\n }\n i++;\n }\n }\n for (var key in obj) {\n if (typeof obj[key] === 'object') {\n doModify(colors, obj[key]);\n }\n }\n return obj;\n }\n return doModify(colorsArray, lottieObj);\n};\nvar convertLottieColorToRgb = function (lottieColor) {\n return [Math.round(lottieColor[0] * 255), Math.round(lottieColor[1] * 255), Math.round(lottieColor[2] * 255)];\n};\nvar convertLottieColorToRgba = function (lottieColor) {\n return [\n Math.round(lottieColor[0] * 255),\n Math.round(lottieColor[1] * 255),\n Math.round(lottieColor[2] * 255),\n lottieColor[3],\n ];\n};\nexports.getColors = function (lottieObj) {\n var res = [];\n function doGet(obj) {\n if (obj.s && Array.isArray(obj.s) && obj.s.length === 4) {\n res.push(convertLottieColorToRgba(obj.s));\n }\n else if (obj.c && obj.c.k) {\n if (Array.isArray(obj.c.k) && typeof obj.c.k[0] !== 'number') {\n doGet(obj.c.k);\n }\n else {\n res.push(convertLottieColorToRgb(obj.c.k));\n }\n }\n else {\n for (var key in obj) {\n if (typeof obj[key] === 'object') {\n doGet(obj[key]);\n }\n }\n }\n return res;\n }\n doGet(lottieObj);\n return res;\n};\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n var svgNS = 'http://www.w3.org/2000/svg';\n var locationHref = '';\n var _useWebWorker = false;\n var initialDefaultFrame = -999999;\n\n var setWebWorker = function setWebWorker(flag) {\n _useWebWorker = !!flag;\n };\n\n var getWebWorker = function getWebWorker() {\n return _useWebWorker;\n };\n\n var setLocationHref = function setLocationHref(value) {\n locationHref = value;\n };\n\n var getLocationHref = function getLocationHref() {\n return locationHref;\n };\n\n function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n // import Howl from '../../3rd_party/howler';\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n }\n\n if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\n });\n }\n\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n\n this._updateVolume();\n },\n getVolume: function getVolume() {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n\n default:\n value = 1.1;\n break;\n }\n\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n\n return arr;\n }\n\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n\n if (type === 'int16') {\n return new Int16Array(len);\n }\n\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n\n return createRegularArray(type, len);\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n\n return createRegularArray;\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n var subframeEnabled = true;\n var expressionsPlugin = null;\n var expressionsInterfaces = null;\n var idPrefix$1 = '';\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var _shouldRoundValues = false;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n\n (function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface$1() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n\n return value;\n }\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\n\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n\n default:\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n\n default:\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n\n var setExpressionInterfaces = function setExpressionInterfaces(value) {\n expressionsInterfaces = value;\n };\n\n var getExpressionInterfaces = function getExpressionInterfaces() {\n return expressionsInterfaces;\n };\n\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\n };\n\n var getIdPrefix = function getIdPrefix() {\n return idPrefix$1;\n };\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n\n return JSON.parse(JSON.stringify(comp.layers));\n }\n\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n\n return null;\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n }\n };\n\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: 'no'\n });\n charData.data.shapes[0].it.push({\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n },\n sk: {\n k: 0,\n a: 0\n },\n sa: {\n k: 0,\n a: 0\n },\n ty: 'tr'\n });\n }\n }\n }\n }\n };\n }();\n\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n\n try {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), path, true);\n } catch (error) {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n }\n\n xhr.send();\n }\n\n return {\n load: loadAsset\n };\n }();\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n\n _workerSelf.dataManager.completeData(animation);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n\n if (box.width || _count > 500) {\n this._imageLoaded();\n\n clearInterval(intervalId);\n }\n\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n\n if (keysCount === 0) {\n throw new Error();\n }\n\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n\n markers.push(markerData);\n }\n\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n\n function getRenderer(key) {\n return renderers[key];\n }\n\n function getRegisteredRenderer() {\n // Returns canvas by default for compatibility\n if (renderers.canvas) {\n return 'canvas';\n } // Returns any renderer that is registered\n\n\n for (var key in renderers) {\n if (renderers[key]) {\n return key;\n }\n }\n\n return '';\n }\n\n function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n this.expressionsPlugin = getExpressionsPlugin();\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = 'svg';\n\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n\n var RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (_typeof$4(animationData) !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== 'false';\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n if (!params.path) {\n this.trigger('destroy');\n } else {\n this.setParams(params);\n }\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function (width, height) {\n // Adding this validation for backwards compatibility in case an event object was being passed down\n var _width = typeof width === 'number' ? width : undefined;\n\n var _height = typeof height === 'number' ? height : undefined;\n\n this.renderer.updateContainerSize(_width, _height);\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n\n try {\n if (this.expressionsPlugin) {\n this.expressionsPlugin.resetFrame();\n }\n\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_play');\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_pause');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n\n return null;\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.expressionsPlugin = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setLoop = function (isLooping) {\n this.loop = isLooping;\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {// TODO: decide how to handle catch case\n }\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize; // moduleOb.start = start;\n\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n /* eslint-disable */\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n var pooling = function () {\n function _double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n \"double\": _double\n };\n }();\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n }();\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments())\n };\n }\n\n return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n\n flag = false;\n }\n }\n\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0t0 = t0 * t0 * t0; //\n\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0t1 = t0 * t0 * t1; //\n\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1t1 = t0 * t1 * t1; //\n\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyframeMetadata.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n var PropertyFactory = function () {\n function getProp(elem, data, type, mult, container) {\n if (data.sid) {\n data = elem.globalData.slotManager.getProp(data);\n }\n\n var p;\n\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n\n default:\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\n\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return poolFactory(8, create);\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n\n default:\n arr = [];\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n\n return newPath;\n };\n\n ShapePath.prototype.length = function () {\n return this._length;\n };\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n var shapeCollectionPool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching); /// /\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i;\n var len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue;\n\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n\n var i;\n var len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2; // }\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function multiply(matrix) {\n var matrixProps = matrix.props;\n return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.multiply = multiply;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\n function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n function setLocation(href) {\n setLocationHref(href);\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n\n case 'matrix':\n return Matrix;\n\n default:\n return null;\n }\n }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocation;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize; // lottie.start = start;\n\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.useWebWorker = setWebWorker;\n lottie.setIDPrefix = setPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.12.2';\n\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n\n return null;\n }\n\n var queryString = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n try {\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n } catch (err) {//\n }\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return clonedPath;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n this.appliedTransformations = 0;\n this.pre.reset();\n\n if (!this.a.effectsSequence.length) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {//\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n\n while (pos > 0) {\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 1,\n ix: 6,\n k: [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n s: {\n a: 0,\n ix: 3,\n k: [100, 100]\n },\n sa: {\n a: 0,\n ix: 5,\n k: 0\n },\n sk: {\n a: 0,\n ix: 4,\n k: 0\n },\n ty: 'tr'\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n\n cont += 1;\n }\n\n this._currentCopies = copies; /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n\n return hasReloaded;\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return clonedPath;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function floatEqual(a, b) {\n return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n }\n\n function floatZero(f) {\n return Math.abs(f) <= 0.00001;\n }\n\n function lerp(p0, p1, amount) {\n return p0 * (1 - amount) + p1 * amount;\n }\n\n function lerpPoint(p0, p1, amount) {\n return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n }\n\n function quadRoots(a, b, c) {\n // no root\n if (a === 0) return [];\n var s = b * b - 4 * a * c; // Complex roots\n\n if (s < 0) return [];\n var singleRoot = -b / (2 * a); // 1 root\n\n if (s === 0) return [singleRoot];\n var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n return [singleRoot - delta, singleRoot + delta];\n }\n\n function polynomialCoefficients(p0, p1, p2, p3) {\n return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n }\n\n function singlePoint(p) {\n return new PolynomialBezier(p, p, p, p, false);\n }\n\n function PolynomialBezier(p0, p1, p2, p3, linearize) {\n if (linearize && pointEqual(p0, p1)) {\n p1 = lerpPoint(p0, p3, 1 / 3);\n }\n\n if (linearize && pointEqual(p2, p3)) {\n p2 = lerpPoint(p0, p3, 2 / 3);\n }\n\n var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n this.a = [coeffx[0], coeffy[0]];\n this.b = [coeffx[1], coeffy[1]];\n this.c = [coeffx[2], coeffy[2]];\n this.d = [coeffx[3], coeffy[3]];\n this.points = [p0, p1, p2, p3];\n }\n\n PolynomialBezier.prototype.point = function (t) {\n return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n };\n\n PolynomialBezier.prototype.derivative = function (t) {\n return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n };\n\n PolynomialBezier.prototype.tangentAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[1], p[0]);\n };\n\n PolynomialBezier.prototype.normalAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[0], p[1]);\n };\n\n PolynomialBezier.prototype.inflectionPoints = function () {\n var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n if (floatZero(denom)) return [];\n var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n if (square < 0) return [];\n var root = Math.sqrt(square);\n\n if (floatZero(root)) {\n if (root > 0 && root < 1) return [tcusp];\n return [];\n }\n\n return [tcusp - root, tcusp + root].filter(function (r) {\n return r > 0 && r < 1;\n });\n };\n\n PolynomialBezier.prototype.split = function (t) {\n if (t <= 0) return [singlePoint(this.points[0]), this];\n if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n var p10 = lerpPoint(this.points[0], this.points[1], t);\n var p11 = lerpPoint(this.points[1], this.points[2], t);\n var p12 = lerpPoint(this.points[2], this.points[3], t);\n var p20 = lerpPoint(p10, p11, t);\n var p21 = lerpPoint(p11, p12, t);\n var p3 = lerpPoint(p20, p21, t);\n return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n };\n\n function extrema(bez, comp) {\n var min = bez.points[0][comp];\n var max = bez.points[bez.points.length - 1][comp];\n\n if (min > max) {\n var e = max;\n max = min;\n min = e;\n } // Derivative roots to find min/max\n\n\n var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n for (var i = 0; i < f.length; i += 1) {\n if (f[i] > 0 && f[i] < 1) {\n var val = bez.point(f[i])[comp];\n if (val < min) min = val;else if (val > max) max = val;\n }\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n PolynomialBezier.prototype.bounds = function () {\n return {\n x: extrema(this, 0),\n y: extrema(this, 1)\n };\n };\n\n PolynomialBezier.prototype.boundingBox = function () {\n var bounds = this.bounds();\n return {\n left: bounds.x.min,\n right: bounds.x.max,\n top: bounds.y.min,\n bottom: bounds.y.max,\n width: bounds.x.max - bounds.x.min,\n height: bounds.y.max - bounds.y.min,\n cx: (bounds.x.max + bounds.x.min) / 2,\n cy: (bounds.y.max + bounds.y.min) / 2\n };\n };\n\n function intersectData(bez, t1, t2) {\n var box = bez.boundingBox();\n return {\n cx: box.cx,\n cy: box.cy,\n width: box.width,\n height: box.height,\n bez: bez,\n t: (t1 + t2) / 2,\n t1: t1,\n t2: t2\n };\n }\n\n function splitData(data) {\n var split = data.bez.split(0.5);\n return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n }\n\n function boxIntersect(b1, b2) {\n return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n }\n\n function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n if (!boxIntersect(d1, d2)) return;\n\n if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n intersections.push([d1.t, d2.t]);\n return;\n }\n\n var d1s = splitData(d1);\n var d2s = splitData(d2);\n intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n }\n\n PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n if (tolerance === undefined) tolerance = 2;\n if (maxRecursion === undefined) maxRecursion = 7;\n var intersections = [];\n intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n return intersections;\n };\n\n PolynomialBezier.shapeSegment = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n };\n\n PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n };\n\n function crossProduct(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n }\n\n function lineIntersection(start1, end1, start2, end2) {\n var v1 = [start1[0], start1[1], 1];\n var v2 = [end1[0], end1[1], 1];\n var v3 = [start2[0], start2[1], 1];\n var v4 = [end2[0], end2[1], 1];\n var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n if (floatZero(r[2])) return null;\n return [r[0] / r[2], r[1] / r[2]];\n }\n\n function polarOffset(p, angle, length) {\n return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n }\n\n function pointDistance(p1, p2) {\n return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n }\n\n function pointEqual(p1, p2) {\n return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n }\n\n function ZigZagModifier() {}\n\n extendPrototype([ShapeModifier], ZigZagModifier);\n\n ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n };\n\n function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n var angO = angle - Math.PI / 2;\n var angI = angle + Math.PI / 2;\n var px = point[0] + Math.cos(angle) * direction * amplitude;\n var py = point[1] - Math.sin(angle) * direction * amplitude;\n outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n }\n\n function getPerpendicularVector(pt1, pt2) {\n var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n var rot = -Math.PI * 0.5;\n var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n return rotatedVector;\n }\n\n function getProjectingAngle(path, cur) {\n var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n var nextIndex = (cur + 1) % path.length();\n var prevPoint = path.v[prevIndex];\n var nextPoint = path.v[nextIndex];\n var pVector = getPerpendicularVector(prevPoint, nextPoint);\n return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n }\n\n function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n var angle = getProjectingAngle(path, cur);\n var point = path.v[cur % path._length];\n var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n var nextPoint = path.v[(cur + 1) % path._length];\n var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n }\n\n function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n for (var i = 0; i < frequency; i += 1) {\n var t = (i + 1) / (frequency + 1);\n var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n var angle = segment.normalAngle(t);\n var point = segment.point(t);\n setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n direction = -direction;\n }\n\n return direction;\n }\n\n ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n var count = path._length;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n\n if (!path.c) {\n count -= 1;\n }\n\n if (count === 0) return clonedPath;\n var direction = -1;\n var segment = PolynomialBezier.shapeSegment(path, 0);\n zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n for (var i = 0; i < count; i += 1) {\n direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n if (i === count - 1 && !path.c) {\n segment = null;\n } else {\n segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n }\n\n zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n }\n\n return clonedPath;\n };\n\n ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amplitude = this.amplitude.v;\n var frequency = Math.max(0, Math.round(this.frequency.v));\n var pointType = this.pointsType.v;\n\n if (amplitude !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function linearOffset(p1, p2, amount) {\n var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n }\n\n function offsetSegment(segment, amount) {\n var p0;\n var p1a;\n var p1b;\n var p2b;\n var p2a;\n var p3;\n var e;\n e = linearOffset(segment.points[0], segment.points[1], amount);\n p0 = e[0];\n p1a = e[1];\n e = linearOffset(segment.points[1], segment.points[2], amount);\n p1b = e[0];\n p2b = e[1];\n e = linearOffset(segment.points[2], segment.points[3], amount);\n p2a = e[0];\n p3 = e[1];\n var p1 = lineIntersection(p0, p1a, p1b, p2b);\n if (p1 === null) p1 = p1a;\n var p2 = lineIntersection(p2a, p3, p1b, p2b);\n if (p2 === null) p2 = p2a;\n return new PolynomialBezier(p0, p1, p2, p3);\n }\n\n function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n var p0 = seg1.points[3];\n var p1 = seg2.points[0]; // Bevel\n\n if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n if (pointEqual(p0, p1)) return p0; // Round\n\n if (lineJoin === 2) {\n var angleOut = -seg1.tangentAngle(1);\n var angleIn = -seg2.tangentAngle(0) + Math.PI;\n var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n return p1;\n } // Miter\n\n\n var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n var intersection = lineIntersection(t0, p0, p1, t1);\n\n if (intersection && pointDistance(intersection, p0) < miterLimit) {\n outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n return intersection;\n }\n\n return p0;\n }\n\n function getIntersection(a, b) {\n var intersect = a.intersections(b);\n if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n if (intersect.length) return intersect[0];\n return null;\n }\n\n function pruneSegmentIntersection(a, b) {\n var outa = a.slice();\n var outb = b.slice();\n var intersect = getIntersection(a[a.length - 1], b[0]);\n\n if (intersect) {\n outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n outb[0] = b[0].split(intersect[1])[1];\n }\n\n if (a.length > 1 && b.length > 1) {\n intersect = getIntersection(a[0], b[b.length - 1]);\n\n if (intersect) {\n return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n }\n }\n\n return [outa, outb];\n }\n\n function pruneIntersections(segments) {\n var e;\n\n for (var i = 1; i < segments.length; i += 1) {\n e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n segments[i - 1] = e[0];\n segments[i] = e[1];\n }\n\n if (segments.length > 1) {\n e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n segments[segments.length - 1] = e[0];\n segments[0] = e[1];\n }\n\n return segments;\n }\n\n function offsetSegmentSplit(segment, amount) {\n /*\r\n We split each bezier segment into smaller pieces based\r\n on inflection points, this ensures the control point\r\n polygon is convex.\r\n (A cubic bezier can have none, one, or two inflection points)\r\n */\n var flex = segment.inflectionPoints();\n var left;\n var right;\n var split;\n var mid;\n\n if (flex.length === 0) {\n return [offsetSegment(segment, amount)];\n }\n\n if (flex.length === 1 || floatEqual(flex[1], 1)) {\n split = segment.split(flex[0]);\n left = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(right, amount)];\n }\n\n split = segment.split(flex[0]);\n left = split[0];\n var t = (flex[1] - flex[0]) / (1 - flex[0]);\n split = split[1].split(t);\n mid = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n }\n\n function OffsetPathModifier() {}\n\n extendPrototype([ShapeModifier], OffsetPathModifier);\n\n OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n this.lineJoin = data.lj;\n this._isAnimated = this.amount.effectsSequence.length !== 0;\n };\n\n OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n var outputBezier = shapePool.newElement();\n outputBezier.c = inputBezier.c;\n var count = inputBezier.length();\n\n if (!inputBezier.c) {\n count -= 1;\n }\n\n var i;\n var j;\n var segment;\n var multiSegments = [];\n\n for (i = 0; i < count; i += 1) {\n segment = PolynomialBezier.shapeSegment(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n\n if (!inputBezier.c) {\n for (i = count - 1; i >= 0; i -= 1) {\n segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n }\n\n multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n var lastPoint = null;\n var lastSeg = null;\n\n for (i = 0; i < multiSegments.length; i += 1) {\n var multiSegment = multiSegments[i];\n if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n lastSeg = multiSegment[multiSegment.length - 1];\n\n for (j = 0; j < multiSegment.length; j += 1) {\n segment = multiSegment[j];\n\n if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n } else {\n outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n }\n\n outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n lastPoint = segment.points[3];\n }\n }\n\n if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n return outputBezier;\n };\n\n OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n var miterLimit = this.miterLimit.v;\n var lineJoin = this.lineJoin;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = []; // Hindi characters\n\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n var BLACK_FLAG_CODE_POINT = 127988;\n var CANCEL_TAG_CODE_POINT = 917631;\n var A_TAG_CODE_POINT = 917601;\n var Z_TAG_CODE_POINT = 917626;\n var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode); // Remember width with no applied web font\n\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n\n return helper.measureText(text).width;\n }\n\n return {\n measureText: measure\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach(function (data) {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n }\n\n return emptyChar;\n }\n\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n // to avoid collisions between equal chars\n\n var index = _char2;\n\n if (!fontData.cache[index]) {\n var tHelper = fontData.helper;\n\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index] = tHelper.measureText(_char2) / 100;\n }\n }\n\n return fontData.cache[index] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function getCodePoint(string) {\n var codePoint = 0;\n var first = string.charCodeAt(0);\n\n if (first >= 0xD800 && first <= 0xDBFF) {\n var second = string.charCodeAt(1);\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return codePoint;\n } // Skin tone modifiers\n\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(charCode) {\n return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n } // This codepoint may change the appearance of the preceding character.\n // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n // as a colorful image as compared to a monochrome text variant.\n\n\n function isVariationSelector(charCode) {\n return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n } // The regional indicator symbols are a set of 26 alphabetic Unicode\n /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n // two-letter country codes in a way that allows optional special treatment.\n\n\n function isRegionalCode(string) {\n var codePoint = getCodePoint(string);\n\n if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n return true;\n }\n\n return false;\n } // Some Emoji implementations represent combinations of\n // two “regional indicator” letters as a single flag symbol.\n\n\n function isFlagEmoji(string) {\n return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n }\n\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n } // Regional flags start with a BLACK_FLAG_CODE_POINT\n // folowed by 5 chars in the TAG range\n // and end with a CANCEL_TAG_CODE_POINT\n\n\n function isRegionalFlag(text, index) {\n var codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint !== BLACK_FLAG_CODE_POINT) {\n return false;\n }\n\n var count = 0;\n index += 2;\n\n while (count < 5) {\n codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n return false;\n }\n\n count += 1;\n index += 2;\n }\n\n return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isFlagEmoji = isFlagEmoji;\n Font.isRegionalCode = isRegionalCode;\n Font.isCombinedCharacter = isCombinedCharacter;\n Font.isRegionalFlag = isRegionalFlag;\n Font.isVariationSelector = isVariationSelector;\n Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n function SlotManager(animationData) {\n this.animationData = animationData;\n }\n\n SlotManager.prototype.getProp = function (data) {\n if (this.animationData.slots && this.animationData.slots[data.sid]) {\n return Object.assign(data, this.animationData.slots[data.sid].p);\n }\n\n return data;\n };\n\n function slotFactory(animationData) {\n return new SlotManager(animationData);\n }\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; // layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; // list of animated components\n\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n }\n\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n eff = null;\n\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0;\n var len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var LayerExpressionInterface = expressionsInterfaces('layer');\n var EffectsExpressionInterface = expressionsInterfaces('effects');\n var ShapeExpressionInterface = expressionsInterfaces('shape');\n var TextExpressionInterface = expressionsInterfaces('text');\n var CompExpressionInterface = expressionsInterfaces('comp');\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n /**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n function FrameElement() {}\n\n FrameElement.prototype = {\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false; // list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\n\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n\n FootageElement.prototype.prepareFrame = function () {};\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n\n FootageElement.prototype.renderFrame = function () {};\n\n FootageElement.prototype.destroy = function () {};\n\n FootageElement.prototype.initExpressions = function () {\n var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var FootageInterface = expressionsInterfaces('footage');\n this.layerInterface = FootageInterface(this);\n };\n\n FootageElement.prototype.getFootageData = function () {\n return this.footageData;\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n k: [100]\n }, 1, 0.01, this);\n }\n\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 15:\n return this.createFootage(layer);\n\n default:\n return this.createNull(layer);\n }\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n BaseRenderer.prototype.getElementById = function (ind) {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.ind === ind) {\n return this.elements[i];\n }\n }\n\n return null;\n };\n\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n\n if (path.length === 0) {\n return element;\n }\n\n return element.getElementByPath(path);\n };\n\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.slotManager = slotFactory(animData);\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n var effectTypes = {\n TRANSFORM_EFFECT: 'transformEFfect'\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n var mat = new Matrix();\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _localMatMdf: false,\n _opMdf: false,\n mat: mat,\n localMat: mat,\n localOpacity: 1\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } // TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {// this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n }\n }\n }\n\n if (this.finalTransform._matMdf) {\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n }\n\n if (this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n }\n },\n renderLocalTransform: function renderLocalTransform() {\n if (this.localTransforms) {\n var i = 0;\n var len = this.localTransforms.length;\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n while (i < len) {\n if (this.localTransforms[i]._mdf) {\n this.finalTransform._localMatMdf = true;\n }\n\n if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n this.finalTransform._opMdf = true;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._localMatMdf) {\n var localMat = this.finalTransform.localMat;\n this.localTransforms[0].matrix.clone(localMat);\n\n for (i = 1; i < len; i += 1) {\n var lmat = this.localTransforms[i].matrix;\n localMat.multiply(lmat);\n }\n\n localMat.multiply(this.finalTransform.mat);\n }\n\n if (this.finalTransform._opMdf) {\n var localOp = this.finalTransform.localOpacity;\n\n for (i = 0; i < len; i += 1) {\n localOp *= this.localTransforms[i].opacity * 0.01;\n }\n\n this.finalTransform.localOpacity = localOp;\n }\n }\n },\n searchEffectTransforms: function searchEffectTransforms() {\n if (this.renderableEffectsManager) {\n var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n if (transformEffects.length) {\n this.localTransforms = [];\n this.finalTransform.localMat = new Matrix();\n var i = 0;\n var len = transformEffects.length;\n\n for (i = 0; i < len; i += 1) {\n this.localTransforms.push(transformEffects[i]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i;\n var len = transforms.length;\n var ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n } // pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true,\n svgLumaHidden: true,\n offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n if (/firefox/i.test(navigator.userAgent)) {\n ob.svgLumaHidden = false;\n }\n\n return ob;\n }();\n\n var registeredEffects$1 = {};\n var idPrefix = 'filter_result_';\n\n function SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects$1[type]) {\n var Effect = registeredEffects$1[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n\n if (registeredEffects$1[type].countsAsEffect) {\n count += 1;\n }\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n SVGEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect$1(id, effect, countsAsEffect) {\n registeredEffects$1[id] = {\n effect: effect,\n countsAsEffect: countsAsEffect\n };\n }\n\n function SVGBaseElement() {}\n\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n if (this.data.td) {\n this.matteMasks = {};\n var gg = createNS('g');\n gg.setAttribute('id', this.layerId);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n this.globalData.defs.appendChild(gg);\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._localMatMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n this.searchEffectTransforms();\n },\n getMatte: function getMatte(matteType) {\n // This should not be a common case. But for backward compatibility, we'll create the matte object.\n // It solves animations that have two consecutive layers marked as matte masks.\n // Which is an undefined behavior in AE.\n if (!this.matteMasks) {\n this.matteMasks = {};\n }\n\n if (!this.matteMasks[matteType]) {\n var id = this.layerId + '_' + matteType;\n var filId;\n var fil;\n var useElement;\n var gg;\n\n if (matteType === 1 || matteType === 3) {\n var masker = createNS('mask');\n masker.setAttribute('id', id);\n masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n masker.appendChild(useElement);\n this.globalData.defs.appendChild(masker);\n\n if (!featureSupport.maskType && matteType === 1) {\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(useElement);\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (matteType === 2) {\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', id);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); /// /\n\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc); /// /\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n maskGrouper.appendChild(useElement);\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n\n this.matteMasks[matteType] = id;\n }\n\n return this.matteMasks[matteType];\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\n function HierarchyElement() {}\n\n HierarchyElement.prototype = {\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\n\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n\n function RenderableDOMElement() {}\n\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n\n if (this.assetData && this.assetData.sid) {\n this.assetData = globalData.slotManager.getProp(this.assetData);\n }\n\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i;\n var len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0;\n var len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n\n case 'no':\n return renderNoop;\n\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {}\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var iterations;\n var k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n mat.multiply(itemData.transformers[k].mProps.v);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops;\n var i;\n var len;\n var stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n } // gfill.setAttribute('fy','200');\n\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\n\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n\n if (data.d && data.d.sid) {\n data.d = elem.globalData.slotManager.getProp(data.d);\n }\n\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n var shouldCombineNext = false;\n var currentChars = '';\n\n while (i < len) {\n shouldCombine = shouldCombineNext;\n shouldCombineNext = false;\n charCode = text.charCodeAt(i);\n currentChars = text.charAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n if (FontManager.isRegionalFlag(text, i)) {\n currentChars = text.substr(i, 14);\n } else {\n secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (FontManager.isModifier(charCode, secondCharCode)) {\n currentChars = text.substr(i, 2);\n shouldCombine = true;\n } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n currentChars = text.substr(i, 4);\n } else {\n currentChars = text.substr(i, 2);\n }\n }\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isVariationSelector(charCode)) {\n shouldCombine = true;\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n shouldCombine = true;\n shouldCombineNext = true;\n }\n\n if (shouldCombine) {\n charactersArray[charactersArray.length - 1] += currentChars;\n shouldCombine = false;\n } else {\n charactersArray.push(currentChars);\n }\n\n i += currentChars.length;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.setCurrentData(dData);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n } // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n\n var threshold = 0.5 - smoothness * 0.5;\n\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r.v) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO; //\n\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n } //\n\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n\n default:\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true; // Force alignment only works with a single line for now\n\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\n\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n\n ITextElement.prototype.validateText = function () {\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n var emptyShapeData = {\n shapes: []\n };\n\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n\n return data;\n };\n\n SVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n default:\n justify = 'start';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n } //\n\n }\n\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n this.validateText();\n\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n\n extendPrototype([BaseRenderer], SVGRendererBase);\n\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRendererBase.prototype.updateContainerSize = function () {};\n\n SVGRendererBase.prototype.findIndexByInd = function (ind) {\n var i = 0;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ind === ind) {\n return i;\n }\n }\n\n return -1;\n };\n\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n if (elementIndex === -1) {\n return;\n }\n\n if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n this.buildItem(elementIndex);\n this.addPendingElement(element);\n } else {\n var matteElement = elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[pos].tt);\n element.setMatte(matteMask);\n }\n }\n };\n\n SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n var matteElement = this.elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[i].tt);\n element.setMatte(matteMask);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\n };\n /* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n }; */\n\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i;\n var len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n SVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n },\n width: config && config.width,\n height: config && config.height,\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n\n extendPrototype([SVGRendererBase], SVGRenderer);\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n\n var lumaLoader = function lumaLoader() {\n var id = '__lottie_element_luma_buffer';\n var lumaBuffer = null;\n var lumaBufferCtx = null;\n var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n // Naming it solution 2 to mark the extra comment lines.\n\n /*\r\n var svgString = [\r\n '',\r\n ].join('');\r\n var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n var url = URL.createObjectURL(blob);\r\n */\n\n function createLumaSvgFilter() {\n var _svg = createNS('svg');\n\n var fil = createNS('filter');\n var matrix = createNS('feColorMatrix');\n fil.setAttribute('id', id);\n matrix.setAttribute('type', 'matrix');\n matrix.setAttribute('color-interpolation-filters', 'sRGB');\n matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n fil.appendChild(matrix);\n\n _svg.appendChild(fil);\n\n _svg.setAttribute('id', id + '_svg');\n\n if (featureSupport.svgLumaHidden) {\n _svg.style.display = 'none';\n }\n\n return _svg;\n }\n\n function loadLuma() {\n if (!lumaBuffer) {\n svg = createLumaSvgFilter();\n document.body.appendChild(svg);\n lumaBuffer = createTag('canvas');\n lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n lumaBufferCtx.fillRect(0, 0, 1, 1);\n }\n }\n\n function getLuma(canvas) {\n if (!lumaBuffer) {\n loadLuma();\n }\n\n lumaBuffer.width = canvas.width;\n lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n return lumaBuffer;\n }\n\n return {\n load: loadLuma,\n get: getLuma\n };\n };\n\n function createCanvas(width, height) {\n if (featureSupport.offscreenCanvas) {\n return new OffscreenCanvas(width, height);\n }\n\n var canvas = createTag('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n var assetLoader = function () {\n return {\n loadLumaCanvas: lumaLoader.load,\n getLumaCanvas: lumaLoader.get,\n createCanvas: createCanvas\n };\n }();\n\n var registeredEffects = {};\n\n function CVEffects(elem) {\n var i;\n var len = elem.data.ef ? elem.data.ef.length : 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n CVEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect(id, effect) {\n registeredEffects[id] = {\n effect: effect\n };\n }\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n\n this.hasMasks = hasMasks;\n\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\n\n var operationsMap = {\n 1: 'source-in',\n 2: 'source-out',\n 3: 'source-in',\n 4: 'source-out'\n };\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n // If the layer is masked we will use two buffers to store each different states of the drawing\n // This solution is not ideal for several reason. But unfortunately, because of the recursive\n // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n // It might be challenging because the layer most likely is transformed in some way\n if (this.data.tt >= 1) {\n this.buffers = [];\n var canvasContext = this.globalData.canvasContext;\n var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas);\n var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas2);\n\n if (this.data.tt >= 3 && !document._isProxy) {\n assetLoader.loadLumaCanvas();\n }\n }\n\n this.canvasContext = this.globalData.canvasContext;\n this.transformCanvas = this.globalData.transformCanvas;\n this.renderableEffectsManager = new CVEffects(this);\n this.searchEffectTransforms();\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n clearCanvas: function clearCanvas(canvasContext) {\n canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n },\n prepareLayer: function prepareLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[0];\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n this.currentTransform = this.canvasContext.getTransform();\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform);\n }\n },\n exitLayer: function exitLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n // that only contains the content of this layer\n // (if it is a composition, it also includes the nested layers)\n\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx);\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n if (this.data.tt >= 3 && !document._isProxy) {\n // We copy the painted mask to a buffer that has a color matrix filter applied to it\n // that applies the rgb values to the alpha channel\n var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n var lumaBufferCtx = lumaBuffer.getContext('2d');\n lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n this.canvasContext.drawImage(lumaBuffer, 0, 0);\n }\n\n this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n // We use destination-over to draw the global drawing below the current layer\n\n this.canvasContext.globalCompositeOperation = 'destination-over';\n this.canvasContext.drawImage(this.buffers[0], 0, 0);\n this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n this.canvasContext.globalCompositeOperation = 'source-over';\n }\n },\n renderFrame: function renderFrame(forceRender) {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n if (this.data.td === 1 && !forceRender) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.prepareLayer();\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n this.exitLayer();\n\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem[\"do\"] = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n\n CVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type; // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n } else {\n renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n\n renderer.ctxOpacity(currentStyle.coOp);\n\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st' || type === 'gs') {\n // ctx.stroke();\n renderer.ctxStroke();\n\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n\n if (type !== 'st' && type !== 'gs') {\n // ctx.fill(currentStyle.r);\n this.globalData.renderer.ctxFill(currentStyle.r);\n }\n\n renderer.restore();\n }\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {//\n }\n }\n\n if (isMain) {\n this.drawLayer();\n }\n };\n\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n\n styledShape.trNodes = shapeNodes;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n\n styleElem.grd = grd;\n }\n\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\n }\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n var renderer = this.globalData.renderer;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n renderer.save();\n renderer.ctxTransform(renderedLetter.p);\n renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n renderer.ctxFillStyle(renderedLetter.fc);\n lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n renderer.ctxFill(); // this.globalData.canvasContext.fill();\n /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n /// ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n\n CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVSolidElement.prototype.renderInnerContent = function () {\n // var ctx = this.canvasContext;\n this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n };\n\n function CanvasRendererBase() {}\n\n extendPrototype([BaseRenderer], CanvasRendererBase);\n\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n };\n\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n };\n\n CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n this.canvasContext.fillStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n this.canvasContext.strokeStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n this.canvasContext.lineWidth = value;\n };\n\n CanvasRendererBase.prototype.ctxLineCap = function (value) {\n this.canvasContext.lineCap = value;\n };\n\n CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n this.canvasContext.lineJoin = value;\n };\n\n CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n this.canvasContext.miterLimit = value;\n };\n\n CanvasRendererBase.prototype.ctxFill = function (rule) {\n this.canvasContext.fill(rule);\n };\n\n CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n this.canvasContext.fillRect(x, y, w, h);\n };\n\n CanvasRendererBase.prototype.ctxStroke = function () {\n this.canvasContext.stroke();\n };\n\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRendererBase.prototype.save = function () {\n this.canvasContext.save();\n };\n\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.restore(actionFlag);\n };\n\n CanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.contextData.setContext(this.canvasContext);\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n\n CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n this.reset();\n var elementWidth;\n var elementHeight;\n\n if (width) {\n elementWidth = width;\n elementHeight = height;\n this.canvasContext.canvas.width = elementWidth;\n this.canvasContext.canvas.height = elementHeight;\n } else {\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n } else {\n elementWidth = this.canvasContext.canvas.width;\n elementHeight = this.canvasContext.canvas.height;\n }\n\n this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n }\n\n var elementRel;\n var animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n // console.log('NEW: ',num);\n\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\n };\n\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function CanvasContext() {\n this.opacity = -1;\n this.transform = createTypedArray('float32', 16);\n this.fillStyle = '';\n this.strokeStyle = '';\n this.lineWidth = '';\n this.lineCap = '';\n this.lineJoin = '';\n this.miterLimit = '';\n this.id = Math.random();\n }\n\n function CVContextData() {\n this.stack = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n var i;\n var len = 15;\n\n for (i = 0; i < len; i += 1) {\n var canvasContext = new CanvasContext();\n this.stack[i] = canvasContext;\n }\n\n this._length = len;\n this.nativeContext = null;\n this.transformMat = new Matrix();\n this.currentOpacity = 1; //\n\n this.currentFillStyle = '';\n this.appliedFillStyle = ''; //\n\n this.currentStrokeStyle = '';\n this.appliedStrokeStyle = ''; //\n\n this.currentLineWidth = '';\n this.appliedLineWidth = ''; //\n\n this.currentLineCap = '';\n this.appliedLineCap = ''; //\n\n this.currentLineJoin = '';\n this.appliedLineJoin = ''; //\n\n this.appliedMiterLimit = '';\n this.currentMiterLimit = '';\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.stack[i] = new CanvasContext();\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.stack[this.cArrPos].opacity = 1;\n };\n\n CVContextData.prototype.restore = function (forceRestore) {\n this.cArrPos -= 1;\n var currentContext = this.stack[this.cArrPos];\n var transform = currentContext.transform;\n var i;\n var arr = this.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = transform[i];\n }\n\n if (forceRestore) {\n this.nativeContext.restore();\n var prevStack = this.stack[this.cArrPos + 1];\n this.appliedFillStyle = prevStack.fillStyle;\n this.appliedStrokeStyle = prevStack.strokeStyle;\n this.appliedLineWidth = prevStack.lineWidth;\n this.appliedLineCap = prevStack.lineCap;\n this.appliedLineJoin = prevStack.lineJoin;\n this.appliedMiterLimit = prevStack.miterLimit;\n }\n\n this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n this.nativeContext.globalAlpha = currentContext.opacity;\n this.currentOpacity = currentContext.opacity;\n }\n\n this.currentFillStyle = currentContext.fillStyle;\n this.currentStrokeStyle = currentContext.strokeStyle;\n this.currentLineWidth = currentContext.lineWidth;\n this.currentLineCap = currentContext.lineCap;\n this.currentLineJoin = currentContext.lineJoin;\n this.currentMiterLimit = currentContext.miterLimit;\n };\n\n CVContextData.prototype.save = function (saveOnNativeFlag) {\n if (saveOnNativeFlag) {\n this.nativeContext.save();\n }\n\n var props = this.cTr.props;\n\n if (this._length <= this.cArrPos) {\n this.duplicate();\n }\n\n var currentStack = this.stack[this.cArrPos];\n var i;\n\n for (i = 0; i < 16; i += 1) {\n currentStack.transform[i] = props[i];\n }\n\n this.cArrPos += 1;\n var newStack = this.stack[this.cArrPos];\n newStack.opacity = currentStack.opacity;\n newStack.fillStyle = currentStack.fillStyle;\n newStack.strokeStyle = currentStack.strokeStyle;\n newStack.lineWidth = currentStack.lineWidth;\n newStack.lineCap = currentStack.lineCap;\n newStack.lineJoin = currentStack.lineJoin;\n newStack.miterLimit = currentStack.miterLimit;\n };\n\n CVContextData.prototype.setOpacity = function (value) {\n this.stack[this.cArrPos].opacity = value;\n };\n\n CVContextData.prototype.setContext = function (value) {\n this.nativeContext = value;\n };\n\n CVContextData.prototype.fillStyle = function (value) {\n if (this.stack[this.cArrPos].fillStyle !== value) {\n this.currentFillStyle = value;\n this.stack[this.cArrPos].fillStyle = value;\n }\n };\n\n CVContextData.prototype.strokeStyle = function (value) {\n if (this.stack[this.cArrPos].strokeStyle !== value) {\n this.currentStrokeStyle = value;\n this.stack[this.cArrPos].strokeStyle = value;\n }\n };\n\n CVContextData.prototype.lineWidth = function (value) {\n if (this.stack[this.cArrPos].lineWidth !== value) {\n this.currentLineWidth = value;\n this.stack[this.cArrPos].lineWidth = value;\n }\n };\n\n CVContextData.prototype.lineCap = function (value) {\n if (this.stack[this.cArrPos].lineCap !== value) {\n this.currentLineCap = value;\n this.stack[this.cArrPos].lineCap = value;\n }\n };\n\n CVContextData.prototype.lineJoin = function (value) {\n if (this.stack[this.cArrPos].lineJoin !== value) {\n this.currentLineJoin = value;\n this.stack[this.cArrPos].lineJoin = value;\n }\n };\n\n CVContextData.prototype.miterLimit = function (value) {\n if (this.stack[this.cArrPos].miterLimit !== value) {\n this.currentMiterLimit = value;\n this.stack[this.cArrPos].miterLimit = value;\n }\n };\n\n CVContextData.prototype.transform = function (props) {\n this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n currentTransform.cloneFromProps(this.transformMat.props);\n var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CVContextData.prototype.opacity = function (op) {\n var currentOpacity = this.stack[this.cArrPos].opacity;\n currentOpacity *= op < 0 ? 0 : op;\n\n if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n if (this.currentOpacity !== op) {\n this.nativeContext.globalAlpha = op;\n this.currentOpacity = op;\n }\n\n this.stack[this.cArrPos].opacity = currentOpacity;\n }\n };\n\n CVContextData.prototype.fill = function (rule) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fill(rule);\n };\n\n CVContextData.prototype.fillRect = function (x, y, w, h) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fillRect(x, y, w, h);\n };\n\n CVContextData.prototype.stroke = function () {\n if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n this.appliedStrokeStyle = this.currentStrokeStyle;\n this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n }\n\n if (this.appliedLineWidth !== this.currentLineWidth) {\n this.appliedLineWidth = this.currentLineWidth;\n this.nativeContext.lineWidth = this.appliedLineWidth;\n }\n\n if (this.appliedLineCap !== this.currentLineCap) {\n this.appliedLineCap = this.currentLineCap;\n this.nativeContext.lineCap = this.appliedLineCap;\n }\n\n if (this.appliedLineJoin !== this.currentLineJoin) {\n this.appliedLineJoin = this.currentLineJoin;\n this.nativeContext.lineJoin = this.appliedLineJoin;\n }\n\n if (this.appliedMiterLimit !== this.currentMiterLimit) {\n this.appliedMiterLimit = this.currentMiterLimit;\n this.nativeContext.miterLimit = this.appliedMiterLimit;\n }\n\n this.nativeContext.stroke();\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.layers = null;\n this.elements = null;\n };\n\n CVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || '',\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n\n if (this.renderConfig.clearCanvas) {\n this.ctxTransform = this.contextData.transform.bind(this.contextData);\n this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n this.ctxFill = this.contextData.fill.bind(this.contextData);\n this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n this.save = this.contextData.save.bind(this.contextData);\n }\n }\n\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\n }\n\n if (this.finalTransform._opMdf) {\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n HSolidElement.prototype.createContent = function () {\n var rect;\n\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n\n this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n\n return point;\n };\n\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i;\n var len = shape._length;\n var vPoint;\n var oPoint;\n var nextIPoint;\n var nextVPoint;\n\n if (len <= 1) {\n return;\n }\n\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n };\n\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n // eslint-disable-line no-plusplus\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b |= 0; // eslint-disable-line no-bitwise\n\n a |= 0; // eslint-disable-line no-bitwise\n\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {//\n } else if (a === 0) {\n t = -c / b;\n\n if (t > 0 && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n } else {\n b2ac = b * b - 4 * c * a;\n\n if (b2ac >= 0) {\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n }\n }\n\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n }\n }\n };\n\n HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n var width = 0;\n\n if (widthProperty.keyframes) {\n for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n var kfw = widthProperty.keyframes[i].s;\n\n if (kfw > width) {\n width = kfw;\n }\n }\n\n width *= widthProperty.mult;\n } else {\n width = widthProperty.v * widthProperty.mult;\n }\n\n boundingBox.x -= width;\n boundingBox.xMax += width;\n boundingBox.y -= width;\n boundingBox.yMax += width;\n };\n\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n\n var changed = false;\n\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n var shapeStyle = this.shapeCont.style;\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n shapeStyle.transform = shapeTransform;\n shapeStyle.webkitTransform = shapeTransform;\n }\n }\n };\n\n function HTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n\n this.checkParenting();\n };\n\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n innerElemStyle.fill = textColor;\n innerElemStyle.color = textColor;\n\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i;\n var len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan;\n var tParent;\n var tCont;\n var matrixHelper = this.mHelper;\n var shapes;\n var shapeStr = '';\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('path');\n tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n } // tSpan.setAttribute('visibility', 'hidden');\n\n\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n\n matrixHelper.reset();\n\n if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n\n if (shapeData && shapeData.shapes) {\n // document.body.appendChild is needed to get exact measure of shape\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n var tContStyle = tCont.style;\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n tContStyle.transform = tContTranslation;\n tContStyle.webkitTransform = tContTranslation;\n letters[i].yOffset = boundingBox.y - 1;\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n\n tParent.appendChild(tCont);\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent); //\n\n var tStyle = tSpan.style;\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n tStyle.transform = tSpanTranslation;\n tStyle.webkitTransform = tSpanTranslation;\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } //\n\n\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n\n HTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var svgStyle;\n\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n }\n\n if (this.isMasked && this.finalTransform._matMdf) {\n // Todo Benchmark if using this is better than getBBox\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n svgStyle = this.svgElement.style;\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n svgStyle.transform = translation;\n svgStyle.webkitTransform = translation;\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i;\n var len;\n var count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n } else {\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.webkitTransform = renderedLetter.m;\n textSpan.style.transform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n svgStyle = this.svgElement.style;\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n svgStyle.transform = svgTransform;\n svgStyle.webkitTransform = svgTransform;\n }\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i;\n var len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n this.finalTransform = {\n mProp: this\n };\n }\n\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i;\n var len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n perspectiveStyle = comp.perspectiveElem.style;\n containerStyle = comp.container.style;\n var perspective = this.pe.v + 'px';\n var origin = '0px 0px 0px';\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveStyle.perspective = perspective;\n perspectiveStyle.webkitPerspective = perspective;\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n perspectiveStyle.transform = matrix;\n perspectiveStyle.webkitTransform = matrix;\n }\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n\n if (this.hierarchy) {\n len = this.hierarchy.length - 1;\n\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector;\n\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n var matValue = this.mat.toCSS();\n containerStyle = comp.container.style;\n containerStyle.transform = matValue;\n containerStyle.webkitTransform = matValue;\n }\n\n if (this.pe._mdf) {\n perspectiveStyle = comp.perspectiveElem.style;\n perspectiveStyle.perspective = this.pe.v + 'px';\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n\n this.mat.clone(this._prevMat);\n }\n }\n\n this._isFirstFrame = false;\n };\n\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HybridRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement;\n var nextLayer;\n var tmpDOMElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n\n return new HShapeElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n\n return new HImageElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n\n return new HSolidElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n\n return null;\n };\n\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n var style;\n var containerStyle;\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n style = perspectiveElem.style;\n style.width = this.globalData.compSize.w + 'px';\n style.height = this.globalData.compSize.h + 'px';\n var center = '50% 50%';\n style.webkitTransformOrigin = center;\n style.mozTransformOrigin = center;\n style.transformOrigin = center;\n containerStyle = container.style;\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n containerStyle.transform = matrix;\n containerStyle.webkitTransform = matrix;\n }\n\n perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n\n len = this.threeDElements.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRendererBase.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n var style = resizerElem.style;\n style.width = animData.w + 'px';\n style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n style.transformStyle = 'flat';\n style.mozTransformStyle = 'flat';\n style.webkitTransformStyle = 'flat';\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData; // Mask animation\n\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRendererBase.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx;\n var sy;\n var tx;\n var ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n var style = this.resizerElem.style;\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n style.transform = style.webkitTransform;\n };\n\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i;\n var len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n var style = this.threeDElements[i].perspectiveElem.style;\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n style.perspective = style.webkitPerspective;\n }\n }\n };\n\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n },\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([HybridRendererBase], HybridRenderer);\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return null; // return {active:false};\n }\n\n Object.defineProperty(_thisLayerFunction, '_name', {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n /* eslint-disable */\n\n /*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\n function seedRandom(pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$2(obj),\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n }\n\n ;\n\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n var _lottieGlobal = {};\n initialize$2(BMMath);\n\n function resetFrame() {\n _lottieGlobal = {};\n }\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n }\n\n function $bm_neg(a) {\n var tOfA = _typeof$1(a);\n\n if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n\n if (a.propType) {\n return a.v;\n }\n\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n\n return a % b;\n }\n\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n\n default:\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n\n b = l; // achromatic\n\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n\n if (t <= tMin) {\n return value1;\n }\n\n if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i;\n var len = max.length;\n\n if (!min) {\n min = createTypedArray('float32', len);\n }\n\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n // Bail out if we don't want expressions\n function noOp(_value) {\n return _value;\n }\n\n if (!elem.globalData.renderConfig.runExpressions) {\n return noOp;\n }\n\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n }\n\n iWiggle += 1;\n } // var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n }\n\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n\n return arr;\n }\n\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n lenKey = arr.length;\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n\n return value.substring(init, end);\n }\n\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n\n return value.substr(init, end);\n }\n\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n expression_function();\n this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n } // Bundlers will see these as dead code and unless we reference them\n\n\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n ob.resetFrame = resetFrame;\n return ob;\n }();\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n ob.resetFrame = ExpressionManager.resetFrame;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n\n return ob;\n }();\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n\n return this._mask.op.v * 100;\n }\n });\n\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i;\n var len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n\n var value = '';\n\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n val = property.v * mult;\n\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n\n return expressionValue;\n };\n } // TODO: try to avoid using this getter\n\n\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n\n return MultidimensionalPropertyInterface(property);\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s)\n });\n\n var _px;\n\n var _py;\n\n var _pz;\n\n var _transformFactory;\n\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n }\n\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n\n default:\n return null;\n }\n }\n\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n\n return effectElements[i]();\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n _name: {\n value: shape.nm\n },\n ix: {\n value: shape.ix\n },\n propertyIndex: {\n value: shape.ix\n },\n mn: {\n value: shape.mn\n },\n propertyGroup: {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); // interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function get() {\n return 'a';\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function get() {\n return dashOb;\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n\n if (value === 0) {\n return propertyGroup;\n }\n\n return interfaces[value - 1];\n }\n\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function parentGroupWrapper() {\n return propertyGroup;\n }\n\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n\n if (!_sourceText || stringValue !== _sourceText.value) {\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n Object.defineProperty(_sourceText, 'style', {\n get: function get() {\n return {\n fillColor: elem.textProperty.currentData.fc\n };\n }\n });\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n var propertyNameIndex = value.indexOf(currentPropertyName);\n\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n return '';\n }\n\n return init;\n };\n\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n\n var interfaces = {\n layer: LayerExpressionInterface,\n effects: EffectsExpressionInterface,\n comp: CompExpressionInterface,\n shape: ShapeExpressionInterface,\n text: TextExpressionInterface,\n footage: FootageInterface\n };\n\n function getInterface(type) {\n return interfaces[type] || null;\n }\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n\n if (v1.length) {\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.001; // frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n\n if (samples <= 1) {\n return this.pv;\n }\n\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n\n var sampleValue;\n\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n\n i += 1;\n }\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n } /// /\n\n\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n\n return matrix; /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) {\n // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) {\n // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n if (magnitude === 0) {\n return [0, 0];\n }\n\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n };\n }\n\n function initialize$1() {\n addPropertyDecorator();\n }\n\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\n\n SVGComposableEffect.prototype = {\n createMergeNode: function createMergeNode(resultId, ins) {\n var feMerge = createNS('feMerge');\n feMerge.setAttribute('result', resultId);\n var feMergeNode;\n var i;\n\n for (i = 0; i < ins.length; i += 1) {\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', ins[i]);\n feMerge.appendChild(feMergeNode);\n feMerge.appendChild(feMergeNode);\n }\n\n return feMerge;\n }\n };\n\n var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n\n function SVGTintFilter(filter, filterManager, elem, id, source) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n this.linearFilter = feColorMatrix;\n feColorMatrix.setAttribute('result', id + '_tint_1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n filter.appendChild(feMerge);\n }\n\n extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id);\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(fil, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n filter.appendChild(feComponentTransfer);\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB);\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n } // Green\n\n\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n } // Blue\n\n\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n } // Alpha\n\n\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n } // RGB\n\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n }\n\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n var filterSize = filterManager.data.fs || globalFilterSize;\n filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = createNS('feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', id + '_drop_shadow_1');\n feOffset.setAttribute('result', id + '_drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = createNS('feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', id + '_drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', id + '_drop_shadow_3');\n feComposite.setAttribute('in2', id + '_drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', id + '_drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n filter.appendChild(feMerge); //\n }\n\n extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n }\n };\n\n var _svgMatteSymbols = [];\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n\n i += 1;\n }\n\n var nextChild;\n\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n\n _svgMatteSymbols.push(mask);\n\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n\n elem.setMatte(mask.layerId);\n };\n\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('result', id);\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function TransformEffect() {}\n\n TransformEffect.prototype.init = function (effectsManager) {\n this.effectsManager = effectsManager;\n this.type = effectTypes.TRANSFORM_EFFECT;\n this.matrix = new Matrix();\n this.opacity = -1;\n this._mdf = false;\n this._opMdf = false;\n };\n\n TransformEffect.prototype.renderFrame = function (forceFrame) {\n this._opMdf = false;\n this._mdf = false;\n\n if (forceFrame || this.effectsManager._mdf) {\n var effectElements = this.effectsManager.effectElements;\n var anchor = effectElements[0].p.v;\n var position = effectElements[1].p.v;\n var isUniformScale = effectElements[2].p.v === 1;\n var scaleHeight = effectElements[3].p.v;\n var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n var skew = effectElements[5].p.v;\n var skewAxis = effectElements[6].p.v;\n var rotation = effectElements[7].p.v;\n this.matrix.reset();\n this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n this.matrix.rotate(-rotation * degToRads);\n this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n this.matrix.translate(position[0], position[1], 0);\n this._mdf = true;\n\n if (this.opacity !== effectElements[8].p.v) {\n this.opacity = effectElements[8].p.v;\n this._opMdf = true;\n }\n }\n };\n\n function SVGTransformEffect(_, filterManager) {\n this.init(filterManager);\n }\n\n extendPrototype([TransformEffect], SVGTransformEffect);\n\n function CVTransformEffect(effectsManager) {\n this.init(effectsManager);\n }\n\n extendPrototype([TransformEffect], CVTransformEffect);\n\n registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n ShapeModifiers.registerModifier('zz', ZigZagModifier);\n ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n setExpressionsPlugin(Expressions);\n setExpressionInterfaces(getInterface);\n initialize$1();\n initialize(); // Registering svg effects\n\n registerEffect$1(20, SVGTintFilter, true);\n registerEffect$1(21, SVGFillFilter, true);\n registerEffect$1(22, SVGStrokeEffect, false);\n registerEffect$1(23, SVGTritoneFilter, true);\n registerEffect$1(24, SVGProLevelsFilter, true);\n registerEffect$1(25, SVGDropShadowEffect, true);\n registerEffect$1(28, SVGMatte3Effect, false);\n registerEffect$1(29, SVGGaussianBlurEffect, true);\n registerEffect$1(35, SVGTransformEffect, false);\n registerEffect(35, CVTransformEffect);\n\n return lottie;\n\n}));\n"],"names":["HASH_UNDEFINED","MAX_SAFE_INTEGER","argsTag","boolTag","dateTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reFlags","reIsHostCtor","reIsUint","cloneableTags","freeGlobal","g","Object","freeSelf","self","root","Function","freeExports","exports","nodeType","freeModule","module","moduleExports","addMapEntry","map","pair","set","addSetEntry","value","add","arrayReduce","array","iteratee","accumulator","initAccum","index","length","isHostObject","result","toString","e","mapToArray","Array","size","forEach","key","overArg","func","transform","arg","setToArray","uid","arrayProto","prototype","funcProto","objectProto","coreJsData","maskSrcKey","exec","keys","IE_PROTO","funcToString","hasOwnProperty","objectToString","reIsNative","RegExp","call","replace","Buffer","undefined","Symbol","Uint8Array","getPrototype","getPrototypeOf","objectCreate","create","propertyIsEnumerable","splice","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","Hash","entries","this","clear","entry","ListCache","MapCache","Stack","__data__","arrayLikeKeys","inherited","isArray","isObjectLike","isArrayLike","isArrayLikeObject","isArguments","n","baseTimes","String","skipIndexes","isIndex","push","assignValue","object","objValue","eq","assocIndexOf","baseClone","isDeep","isFull","customizer","stack","isObject","isArr","constructor","input","initCloneArray","source","copyArray","tag","getTag","isFunc","buffer","slice","copy","cloneBuffer","isPrototype","proto","initCloneObject","copyObject","getSymbols","copySymbols","baseAssign","cloneFunc","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","typedArray","cloneTypedArray","cloneMap","regexp","lastIndex","cloneRegExp","cloneSet","symbol","initCloneByTag","stacked","get","props","keysFunc","symbolsFunc","values","offset","arrayPush","baseGetAllKeys","getAllKeys","arrayEach","subValue","baseIsNative","isFunction","test","arrayBuffer","newValue","getMapData","type","data","getValue","has","pop","cache","pairs","LARGE_ARRAY_SIZE","other","ArrayBuffer","resolve","ctorString","isLength","baseKeys","__spreadArrays","s","i","il","arguments","r","k","a","j","jl","__importDefault","mod","__esModule","defineProperty","getColors","flatten","replaceColor","colorify","lodash_clonedeep_1","destColors","lottie","modifiedColors","_i","destColors_1","color","convertColorToLottieColor","modifyColors","default","match","Error","Math","round","parseInt","every","item","sourceColor","targetColor","lottieObj","genSourceLottieColor","genTargetLottieColor","doReplace","sourceLottieColor","targetLottieColor","obj","c","doFlatten","colorsArray","doModify","colors","res","doGet","lottieColor","convertLottieColorToRgb","factory","navigator","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","document","createElement","extendPrototype","sources","destination","sourcePrototype","len","attr","getDescriptor","prop","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","window","Howl","src","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","Uint8ClampedArray","Float32Array","Int16Array","createSizedArray","apply","_typeof$6","iterator","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","userAgent","_shouldRoundValues","bmPow","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","max","bmMin","min","BMMath","ProjectInterface$1","propertyNames","random","abs","val","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","v","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","_workerSelf","setupWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","createWorker","completeLayers","layers","comps","layerData","jLen","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","id","comp","findComp","__used","JSON","parse","stringify","ks","it","o","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","chars","charData","ip","op","st","sr","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","checkShapes","completeClosingShapes","closed","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","indexOf","response","responseText","load","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","join","error","send","completeData","payload","animation","event","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","width","height","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","bind","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","destroy","getAsset","createImgData","crossOrigin","addEventListener","createImageData","setAttributeNS","_elementHelper","append","appendChild","setCacheType","elementHelper","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","removeEventListener","markerParser","parsePayloadLines","line","lines","keysCount","trim","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","name","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","loop","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","container","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","setTimeout","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","Number","isNaN","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","hide","show","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","concat","getElementsByClassName","lenAnims","setAttribute","body","getElementsByTagName","innerText","div","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","str","beziers","bezEasing","BezierEasing","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","x","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","point","lastPoint","lengthData","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","y","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","out","ax","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","c1","cos","c2","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","m","translate","tx","tz","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","delta","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","t2","box","boundingBox","cx","cy","splitData","boxIntersect","intersectsImpl","depth","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","setPoint","outputBezier","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","getProjectingAngle","cur","prevIndex","nextIndex","pVector","zigZagCorner","frequency","pointType","prevPoint","nextPoint","prevDist","nextDist","zigZagSegment","dist","normalAngle","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","tangentAngle","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","right","mid","flex","inflectionPoints","OffsetPathModifier","getFontProperties","fontData","styles","fStyle","fWeight","toLowerCase","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","derivative","denom","tcusp","square","filter","p10","p11","p20","p21","bounds","bottom","shapeSegmentInverted","pointsType","count","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","emptyChar","w","combinedCharacters","BLACK_FLAG_CODE_POINT","REGIONAL_CHARACTER_A_CODE_POINT","REGIONAL_CHARACTER_Z_CODE_POINT","surrogateModifiers","setUpNode","font","family","parentNode","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","familyArray","enabledFamilies","trimFontOptions","parent","createHelper","def","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measureText","text","getComputedTextLength","getCodePoint","string","codePoint","charCodeAt","second","isRegionalCode","Font","typekitLoaded","_warned","Date","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","isVariationSelector","fontPrototype","found","ch","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","querySelectorAll","rel","sc","getCharData","_char","console","warn","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","removeChild","SlotManager","slotFactory","RenderableElement","slots","assign","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","BaseElement","FrameElement","FootageElement","imageLoader","initBaseData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","eff","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","content","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","FootageInterface","getFootageData","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","pendingElements","getElementById","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","renderLocalTransform","localTransforms","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","filterManager","createFilter","filters","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ms","ost","buildShapeString","_o","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","charAt","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","runExpressions","destroyed","ShapeTransformManager","sequences","sequenceList","transform_key_count","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","insertBefore","setElements","getElements","destroyElements","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","svg","loadLuma","_svg","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","operationsMap","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","CVTextElement","stroke","fill","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","CanvasContext","strokeStyle","lineCap","CVContextData","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","CVCompElement","CanvasRenderer","clearCanvas","context","dpr","devicePixelRatio","currentGlobalAlpha","contextData","ctxTransform","ctxOpacity","ctxFillStyle","ctxStrokeStyle","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFill","ctxFillRect","ctxStroke","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","createElements","buffers","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearRect","prepareLayer","bufferCtx","drawImage","getTransform","exitLayer","forceRealStack","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","grd","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","globalAlpha","rule","actionFlag","containerStyle","mozTransformOrigin","setContext","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","fillType","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","cWidth","cHeight","floatingContainer","_createBaseContainerElements","_thisLayerFunction","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","nodecrypto","global","rngname","startdenom","significance","ARC4","keylen","me","S","typ","mixkey","seed","smear","stringseed","tostring","options","shortseed","entropy","randomBytes","crypto","msCrypto","getRandomValues","browser","plugins","screen","autoseed","arc4","prng","int32","quick","pass","is_math_call","state","initialize$2","propTypes","SHAPE","_typeof$1","ExpressionManager","fetch","frames","_lottieGlobal","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","noOp","_value","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","_masksInterfaces","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","anchorPointDescriptor","defineProperties","anchor_point","startTime","_name","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","createGroupInterface","groupInterface","mn","_propertyGroup","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","effectsData","ShapePathInterface","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","start","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","_sourceText","sourceText","stringValue","fillColor","_typeof","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","speed","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","colorBlack","colorWhite","groupPath","elemChildren","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","TransformEffect","SVGTransformEffect","CVTransformEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth"],"sourceRoot":""}