@mhmmt/react-dotlottie-player 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-dotlottie-player.cjs.js","sources":["../node_modules/lottie-web/build/player/lottie.js","../node_modules/unzipit/dist/unzipit.module.js","../src/hooks/useDotLottie.ts","../src/components/DotLottiePlayer.tsx"],"sourcesContent":["(typeof document !== \"undefined\") && (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 var setWebWorker = function setWebWorker(flag) {\n _useWebWorker = !!flag;\n };\n var getWebWorker = function getWebWorker() {\n return _useWebWorker;\n };\n var setLocationHref = function setLocationHref(value) {\n locationHref = value;\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 for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n // import Howl from '../../3rd_party/howler';\n\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 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 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 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 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 if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\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 this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\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 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 switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n default:\n value = 1.1;\n break;\n }\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n return arr;\n }\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n if (type === 'int16') {\n return new Int16Array(len);\n }\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n return createRegularArray(type, len);\n }\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n return createRegularArray;\n }();\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function _typeof$6(o) { \"@babel/helpers - typeof\"; return _typeof$6 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$6(o); }\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 (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 for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n function ProjectInterface$1() {\n return {};\n }\n BMMath.random = Math.random;\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n return absArr;\n }\n return Math.abs(val);\n };\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n return value;\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 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 function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\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 function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\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 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 switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n default:\n break;\n }\n return [r, g, b];\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 switch (max) {\n case min:\n h = 0;\n break;\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n default:\n break;\n }\n return [h, s, v];\n }\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\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 if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n if (g < 0) {\n g = 0;\n }\n if (b < 0) {\n b = 0;\n }\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n var setExpressionInterfaces = function setExpressionInterfaces(value) {\n expressionsInterfaces = value;\n };\n var getExpressionInterfaces = function getExpressionInterfaces() {\n return expressionsInterfaces;\n };\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\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(o) { \"@babel/helpers - typeof\"; return _typeof$5 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$5(o); }\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 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 });\n // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n workerFn = fn;\n return workerProxy;\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 for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\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 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 if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\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 function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\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);\n // 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 completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n i += 1;\n }\n return null;\n }\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n return JSON.parse(JSON.stringify(comp.layers));\n }\n return null;\n }\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\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 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 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 function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\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 function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n return null;\n }\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\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 function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\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 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 for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\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 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 var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\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 var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\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 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 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 function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\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 var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\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 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 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 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 for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\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 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 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 if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\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 function completeData(animationData) {\n if (animationData.__complete) {\n return;\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 function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n // data.singleShape = true;\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 if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\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 if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n return null;\n }\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n // set responseType after calling open or IE will break.\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\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 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 xhr.send();\n }\n return {\n load: loadAsset\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 _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 _workerSelf.dataManager.completeData(animation);\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 workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\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 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 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 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 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 function imageLoaded() {\n this.loadedAssets += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n }\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n if (box.width || _count > 500) {\n this._imageLoaded();\n clearInterval(intervalId);\n }\n _count += 1;\n }.bind(this), 50);\n }\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\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 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 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 this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\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 function setPath(path) {\n this.path = path || '';\n }\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n i += 1;\n }\n return null;\n }\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\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 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 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 BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\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 this._cbs[eventName].push(callback);\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 while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n i -= 1;\n len -= 1;\n }\n i += 1;\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 for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n if (keysCount === 0) {\n throw new Error();\n }\n return keys;\n }\n return function (_markers) {\n var markers = [];\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 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 markers.push(markerData);\n }\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\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 return this.compositions[i].compInterface;\n }\n i += 1;\n }\n return null;\n }\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n function getRenderer(key) {\n return renderers[key];\n }\n function getRegisteredRenderer() {\n // Returns canvas by default for compatibility\n if (renderers.canvas) {\n return 'canvas';\n }\n // Returns any renderer that is registered\n for (var key in renderers) {\n if (renderers[key]) {\n return key;\n }\n }\n return '';\n }\n\n function _typeof$4(o) { \"@babel/helpers - typeof\"; return _typeof$4 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$4(o); }\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 extendPrototype([BaseEvent], AnimationItem);\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n var animType = 'svg';\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\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 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 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 if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\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 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 AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\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 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 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 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 if (prerender === 'false') {\n params.prerender = false;\n }\n if (!params.path) {\n this.trigger('destroy');\n } else {\n this.setParams(params);\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 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 for (j = 0; j < jLen; j += 1) {\n i = 0;\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n i += 1;\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 if (data.assets) {\n len = data.assets.length;\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.loadNextSegment();\n };\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\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 AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n this.loadNextSegment();\n };\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\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 AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n try {\n this.animationData = animData;\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 this.renderer.configAnimation(animData);\n if (!animData.assets) {\n animData.assets = [];\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 if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\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 if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n if (this.autoplay) {\n this.play();\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 var _height = typeof height === 'number' ? height : undefined;\n this.renderer.updateContainerSize(_width, _height);\n };\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\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 this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n try {\n if (this.expressionsPlugin) {\n this.expressionsPlugin.resetFrame();\n }\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_play');\n this.audioController.resume();\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\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 AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n return null;\n };\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\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 this.pause();\n };\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\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 this.play();\n };\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false;\n // 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 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 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 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 if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\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 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 this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n this.trigger('segmentStart');\n };\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\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 this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n if (this.isPaused) {\n this.play();\n }\n };\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n if (forceFlag) {\n this.checkSegments(0);\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 return false;\n };\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\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 AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n AnimationItem.prototype.setLoop = function (isLooping) {\n this.loop = isLooping;\n };\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.setVolume(val);\n };\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.mute();\n };\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.unmute();\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 AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n };\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n i += 1;\n }\n return null;\n };\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\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) {\n // TODO: decide how to handle catch case\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 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 case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n default:\n this.triggerEvent(name);\n }\n }\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\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 function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n i += 1;\n }\n }\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n var i = 0;\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n i += 1;\n }\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n return animations;\n }\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\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 function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n function setSpeed(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n function setDirection(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n function play(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n initTime = nowTime;\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n function pause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n function goToAndStop(value, isFrame, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n function stop(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n function togglePause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n function destroy(animation) {\n var i;\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\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 for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n registerAnimation(animElements[i], animationData);\n }\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\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 function resize() {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n function freeze() {\n _isFrozen = true;\n }\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n function setVolume(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n function mute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n function unmute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\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;\n // moduleOb.start = start;\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 /**\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n *\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\n * Usage:\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\n *\n */\n\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n if (beziers[str]) {\n return beziers[str];\n }\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n }\n\n // These values are established by empiricism with tests (tradeoff: performance VS precision)\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 function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n function C(aA1) {\n return 3.0 * aA1;\n }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\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 function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\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 return currentT;\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 return aGuessT;\n }\n\n /**\n * points is an array of [ mX1, mY1, mX2, mY2 ]\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 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 if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n\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 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 for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n /**\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\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 for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\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 if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n if (initialSlope === 0.0) {\n return guessForT;\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 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 function newElement() {\n var element;\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n return element;\n }\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n if (_release) {\n _release(element);\n }\n pool[_length] = element;\n _length += 1;\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 return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n function release(element) {\n var i;\n var len = element.lengths.length;\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n element.lengths.length = 0;\n }\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\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 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 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 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 return diffDist > -0.0001 && diffDist < 0.0001;\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 for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\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 if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n lastPoint[i] = point[i];\n }\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n lengthData.addedLength = addedLength;\n return lengthData;\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 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 if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\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 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 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 var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\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 if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n return storedData[bezierName];\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 if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\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 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 flag = false;\n }\n }\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\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 var bezierSegmentPoints = createTypedArray('float32', 8);\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 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 var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\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 var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\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 var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\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 var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n var t1t1t1 = t1 * t1 * t1;\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 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 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 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 return bezierSegmentPoints;\n }\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n var bez = bezFunction();\n\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\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 while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n iterationIndex = 0;\n break;\n }\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\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 if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n var bezierData = keyframeMetadata.bezierData;\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n }\n // caching._lastKeyframeIndex = -1;\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 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 while (flag) {\n addedLength += bezierData.points[j].partialLength;\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\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 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 break;\n }\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\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 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 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 perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\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 if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n caching.lastIndex = iterationIndex;\n return newValue;\n }\n\n // based on @Toji's https://github.com/toji/gl-matrix/\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 if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\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 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 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 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 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 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 var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n function setVValue(val) {\n var multipliedValue;\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\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 while (i < len) {\n multipliedValue = val[i] * this.mult;\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n i += 1;\n }\n }\n }\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\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 for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\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 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 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 this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\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 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 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 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 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 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 for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\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 var p;\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 case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n default:\n break;\n }\n }\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n return p;\n }\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\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 for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\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 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 ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\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 ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n this._length = len;\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 ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n case 'i':\n arr = this.i;\n break;\n case 'o':\n arr = this.o;\n break;\n default:\n arr = [];\n break;\n }\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n arr[pos][0] = x;\n arr[pos][1] = y;\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 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 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 var cnt = this._length - 1;\n var len = this._length;\n var i;\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 return newPath;\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 function release(shapePath) {\n var len = shapePath._length;\n var i;\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 shapePath._length = 0;\n shapePath.c = false;\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 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 return cloned;\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 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 this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\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 function newShapeCollection() {\n var shapeCollection;\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n return shapeCollection;\n }\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n shapeCollection._length = 0;\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n pool[_length] = shapeCollection;\n _length += 1;\n }\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\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 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){\n keyPropS = kf[kf.length - 1].s[0];\n }else{\n keyPropS = kf[kf.length - 2].e[0];\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 while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\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 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 perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n keyPropS = keyData.s[0];\n }\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\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 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 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 function resetShape() {\n this.paths = this.localShapeCollection;\n }\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n var i;\n var len = shape1._length;\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 return true;\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 function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var finalValue;\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 var i;\n var len = this.effectsSequence.length;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\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 function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\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 KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\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 if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\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 var _cw = this.d !== 3;\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 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 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 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 if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\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;\n this.v.i.length = numPts;\n this.v.o.length = numPts; */\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 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\n /* this.v.v[i] = [x,y];\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\n this.v._length = numPts; */\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 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 this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\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 if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\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 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 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 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 this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n function getShapeProp(elem, data, type) {\n var prop;\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\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 if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n }\n function getConstructorFunction() {\n return ShapeProperty;\n }\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\n Transformation Matrix v2.0\n (c) Epistemex 2014-2015\n www.epistemex.com\n By Ken Fyrstenberg\n Contributions by leeoniya.\n License: MIT, header required.\n */\n\n /**\n * 2D transformation matrix object initialized with identity matrix.\n *\n * The matrix can synchronize a canvas context by supplying the context\n * as an argument, or later apply current absolute transform to an\n * existing context.\n *\n * All values are handled as floating point values.\n *\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\n * @prop {number} a - scale x\n * @prop {number} b - shear y\n * @prop {number} c - shear x\n * @prop {number} d - scale y\n * @prop {number} e - translate x\n * @prop {number} f - translate y\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\n * @constructor\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 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 function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n var mSin = _sin(angle);\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);\n // 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 function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\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 function translate(tx, ty, tz) {\n tz = tz || 0;\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 return this;\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 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 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\n /* matrix order (canvas compatible):\n * ace\n * bdf\n * 001\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 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 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 return this._identity;\n }\n function equals(matr) {\n var i = 0;\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n i += 1;\n }\n return true;\n }\n function clone(matr) {\n var i;\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n return matr;\n }\n function cloneFromProps(props) {\n var i;\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\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 {\n x: x * me.a + y * me.c + me.e,\n y: x * me.b + y * me.d + me.f\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 function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\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 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 function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n return retPts;\n }\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\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 return arr;\n }\n function applyToPointArray(x, y, z) {\n var arr;\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 return arr;\n }\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\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 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 /* if(this.isIdentity()) {\n return '';\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n return cssValue;\n }\n function roundMatrixProperty(val) {\n var v = 10000;\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n return val;\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 /* if(this.isIdentity()) {\n return '';\n } */\n var props = this.props;\n var _a = roundMatrixProperty(props[0]);\n var _b = roundMatrixProperty(props[1]);\n var _c = roundMatrixProperty(props[4]);\n var _d = roundMatrixProperty(props[5]);\n var _e = roundMatrixProperty(props[12]);\n var _f = roundMatrixProperty(props[13]);\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\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(o) { \"@babel/helpers - typeof\"; return _typeof$3 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$3(o); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n function setLocation(href) {\n setLocationHref(href);\n }\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n return animationManager.loadAnimation(params);\n }\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n case 'matrix':\n return Matrix;\n default:\n return null;\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;\n // lottie.start = start;\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.13.0';\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n return null;\n }\n var queryString = '';\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 renderer = getQueryVariable('renderer');\n }\n var readyStateCheckInterval = setInterval(checkReady, 100);\n\n // this adds bodymovin to the window object for backwards compatibility\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\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n return ob;\n }();\n function ShapeModifier() {}\n ShapeModifier.prototype.initModifierProperties = function () {};\n ShapeModifier.prototype.addShapeToModifier = function () {};\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 if (this._isAnimated) {\n data.setAsAnimated();\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 if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n extendPrototype([ShapeModifier], TrimModifier);\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 TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\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 var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n return shapeSegments;\n };\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n pathsData.length = 0;\n return pathsData;\n };\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n if (o < 0) {\n o += 1;\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 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 if (s > e) {\n var _s = s;\n s = e;\n e = _s;\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 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 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 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 for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\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 if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\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 shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes();\n // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\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 jLen = edges.length;\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\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 var newShapesData = this.addShapes(shapeData, segments[0]);\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 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 this.addPaths(newShapesData, localShapeCollection);\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 TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\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 if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\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 if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\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 if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n shapes.push(shapePath);\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 for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\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);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\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);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\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 if (addedLength > shapeSegment.e) {\n break;\n }\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\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 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 for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\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 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 return clonedPath;\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 if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\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 for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\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 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 function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n this.iterateDynamicProperties();\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\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 if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\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 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 this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\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 this.frameId = this.elem.globalData.frameId;\n }\n function precalculateMatrix() {\n this.appliedTransformations = 0;\n this.pre.reset();\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 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 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 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 function autoOrient() {\n //\n // var prevP = this.getValueAtTime();\n }\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\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();\n // Precalculated matrix with non animated properties\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\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 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 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 if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\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 this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\n // sh Indicates it needs to be capped between -180 and 180\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\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 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);\n // 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 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 this._isDirty = true;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\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 function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n extendPrototype([ShapeModifier], RepeaterModifier);\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 if (!this.dynamicProperties.length) {\n this.getValue(true);\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 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 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 while (pos > 0) {\n pos -= 1;\n // this._elements.unshift(arr.splice(pos,1)[0]);\n this._elements.unshift(arr[pos]);\n }\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\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 RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\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 if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\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 this._groups.splice(0, 0, group);\n this._currentCopies += 1;\n }\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n cont = 0;\n var renderFlag;\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 if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\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 cont += 1;\n }\n this._currentCopies = copies;\n /// /\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 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 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 if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\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 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 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 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 for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n this.matrix.reset();\n } else {\n this.matrix.reset();\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\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 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 return hasReloaded;\n };\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n extendPrototype([ShapeModifier], RoundCornersModifier);\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 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 for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\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;\n clonedPath.o[index] = currentO;\n clonedPath.i[index] = currentI; */\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 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 if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\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 return clonedPath;\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 if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\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 for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\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 function floatZero(f) {\n return Math.abs(f) <= 0.00001;\n }\n function lerp(p0, p1, amount) {\n return p0 * (1 - amount) + p1 * amount;\n }\n function lerpPoint(p0, p1, amount) {\n return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n }\n function quadRoots(a, b, c) {\n // no root\n if (a === 0) return [];\n var s = b * b - 4 * a * c;\n // Complex roots\n if (s < 0) return [];\n var singleRoot = -b / (2 * a);\n // 1 root\n if (s === 0) return [singleRoot];\n var delta = Math.sqrt(s) / (2 * a);\n // 2 roots\n return [singleRoot - delta, singleRoot + delta];\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 function singlePoint(p) {\n return new PolynomialBezier(p, p, p, p, false);\n }\n function PolynomialBezier(p0, p1, p2, p3, linearize) {\n if (linearize && pointEqual(p0, p1)) {\n p1 = lerpPoint(p0, p3, 1 / 3);\n }\n if (linearize && pointEqual(p2, p3)) {\n p2 = lerpPoint(p0, p3, 2 / 3);\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 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 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 PolynomialBezier.prototype.tangentAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[1], p[0]);\n };\n PolynomialBezier.prototype.normalAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[0], p[1]);\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 if (floatZero(root)) {\n if (root > 0 && root < 1) return [tcusp];\n return [];\n }\n return [tcusp - root, tcusp + root].filter(function (r) {\n return r > 0 && r < 1;\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 function extrema(bez, comp) {\n var min = bez.points[0][comp];\n var max = bez.points[bez.points.length - 1][comp];\n if (min > max) {\n var e = max;\n max = min;\n min = e;\n }\n // Derivative roots to find min/max\n var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\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 return {\n min: min,\n max: max\n };\n }\n PolynomialBezier.prototype.bounds = function () {\n return {\n x: extrema(this, 0),\n y: extrema(this, 1)\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 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 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 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 function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n if (!boxIntersect(d1, d2)) return;\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 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 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 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 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 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 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 function polarOffset(p, angle, length) {\n return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n }\n function pointDistance(p1, p2) {\n return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n }\n function pointEqual(p1, p2) {\n return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n }\n\n function ZigZagModifier() {}\n extendPrototype([ShapeModifier], ZigZagModifier);\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 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 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 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 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 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 return direction;\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 if (!path.c) {\n count -= 1;\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 for (var i = 0; i < count; i += 1) {\n direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n if (i === count - 1 && !path.c) {\n segment = null;\n } else {\n segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n }\n zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n }\n return clonedPath;\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 if (amplitude !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\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 for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\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 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 function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n var p0 = seg1.points[3];\n var p1 = seg2.points[0];\n\n // Bevel\n if (lineJoin === 3) return p0;\n\n // Connected, they don't need a joint\n if (pointEqual(p0, p1)) return p0;\n\n // Round\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 }\n\n // Miter\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 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 return p0;\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 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 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 if (a.length > 1 && b.length > 1) {\n intersect = getIntersection(a[0], b[b.length - 1]);\n if (intersect) {\n return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n }\n }\n return [outa, outb];\n }\n function pruneIntersections(segments) {\n var e;\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 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 return segments;\n }\n function offsetSegmentSplit(segment, amount) {\n /*\n We split each bezier segment into smaller pieces based\n on inflection points, this ensures the control point\n polygon is convex.\n (A cubic bezier can have none, one, or two inflection points)\n */\n var flex = segment.inflectionPoints();\n var left;\n var right;\n var split;\n var mid;\n if (flex.length === 0) {\n return [offsetSegment(segment, amount)];\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 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 function OffsetPathModifier() {}\n extendPrototype([ShapeModifier], OffsetPathModifier);\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 OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n var outputBezier = shapePool.newElement();\n outputBezier.c = inputBezier.c;\n var count = inputBezier.length();\n if (!inputBezier.c) {\n count -= 1;\n }\n var i;\n var j;\n var segment;\n var multiSegments = [];\n for (i = 0; i < count; i += 1) {\n segment = PolynomialBezier.shapeSegment(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\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 multiSegments = pruneIntersections(multiSegments);\n\n // Add bezier segments to the output and apply line joints\n var lastPoint = null;\n var lastSeg = null;\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 for (j = 0; j < multiSegment.length; j += 1) {\n segment = multiSegment[j];\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 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 if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n return outputBezier;\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 if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\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 for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\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 for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n case 'bold':\n fWeight = '700';\n break;\n case 'black':\n fWeight = '900';\n break;\n case 'medium':\n fWeight = '500';\n break;\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n default:\n break;\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 = [];\n // Hindi characters\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 function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\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 return enabledFamilies.join(',');\n }\n function setUpNode(font, family) {\n var parentNode = createTag('span');\n // Node is invisible to screen readers.\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span');\n // Characters that vary significantly among different fonts\n node.innerText = 'giItT1WQy@!-/#';\n // Visible - so we can measure it - but not on the screen\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px';\n // Large font size makes even subtle changes obvious\n parentNode.style.fontSize = '300px';\n // Reset any font properties\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);\n\n // Remember width with no applied web font\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 function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\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 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 if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\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 if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px';\n // tHelper.style.fontFamily = fontData.fFamily;\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 if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\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 function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n return helper.measureText(text).width;\n }\n return {\n measureText: measure\n };\n }\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\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 var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\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 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 if (loadedSelector.length > 0) {\n shouldLoadFont = false;\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 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 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 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 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 fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\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 function addChars(chars) {\n if (!chars) {\n return;\n }\n if (!this.chars) {\n this.chars = [];\n }\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\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 j += 1;\n }\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\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 i += 1;\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 return emptyChar;\n }\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName);\n // Using the char instead of char.charCodeAt(0)\n // to avoid collisions between equal chars\n var index = _char2;\n if (!fontData.cache[index]) {\n var tHelper = fontData.helper;\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 return fontData.cache[index] * size;\n }\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n i += 1;\n }\n return this.fonts[0];\n }\n function getCodePoint(string) {\n var codePoint = 0;\n var first = string.charCodeAt(0);\n if (first >= 0xD800 && first <= 0xDBFF) {\n var second = string.charCodeAt(1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return codePoint;\n }\n\n // Skin tone modifiers\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n function isZeroWidthJoiner(charCode) {\n return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n }\n\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 function isVariationSelector(charCode) {\n return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n }\n\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 function isRegionalCode(string) {\n var codePoint = getCodePoint(string);\n if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n return true;\n }\n return false;\n }\n\n // Some Emoji implementations represent combinations of\n // two “regional indicator” letters as a single flag symbol.\n function isFlagEmoji(string) {\n return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n }\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n }\n\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 function isRegionalFlag(text, index) {\n var codePoint = getCodePoint(text.substr(index, 2));\n if (codePoint !== BLACK_FLAG_CODE_POINT) {\n return false;\n }\n var count = 0;\n index += 2;\n while (count < 5) {\n codePoint = getCodePoint(text.substr(index, 2));\n if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n return false;\n }\n count += 1;\n index += 2;\n }\n return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n }\n function setIsLoaded() {\n this.isLoaded = true;\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 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 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 return data;\n };\n function slotFactory(animationData) {\n return new SlotManager(animationData);\n }\n\n function RenderableElement() {}\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false;\n // layer's display state\n this.hidden = false;\n // If layer's transparency equals 0, it can be hidden\n this.isTransparent = false;\n // list of animated components\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 * @function\n * Initializes frame related properties.\n *\n * @param {number} num\n * current frame number in Layer's time\n *\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 for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\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 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 function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\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 for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\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 for (i = 0; i < len; i += 1) {\n eff = null;\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n var i = 0;\n var len = this.data.masksProperties.length;\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n i += 1;\n }\n return false;\n },\n initExpressions: function initExpressions() {\n var expressionsInterfaces = getExpressionInterfaces();\n if (!expressionsInterfaces) {\n return;\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 if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\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();\n\n // Stretch factor for old animations missing this property.\n if (!this.data.sr) {\n this.data.sr = 1;\n }\n // effects manager\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 /**\n * @file\n * Handles element's layer frame update.\n * Checks layer in point and out point\n *\n */\n\n function FrameElement() {}\n FrameElement.prototype = {\n /**\n * @function\n * Initializes frame related properties.\n *\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false;\n // list of animated properties\n this.dynamicProperties = [];\n // If layer has been modified in current tick this will be true\n this._mdf = false;\n },\n /**\n * @function\n * Calculates all dynamic values\n *\n * @param {number} num\n * current frame number in Layer's time\n * @param {boolean} isVisible\n * if layers is currently in range\n *\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\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 FootageElement.prototype.prepareFrame = function () {};\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n FootageElement.prototype.renderFrame = function () {};\n FootageElement.prototype.destroy = function () {};\n FootageElement.prototype.initExpressions = function () {\n var expressionsInterfaces = getExpressionInterfaces();\n if (!expressionsInterfaces) {\n return;\n }\n var FootageInterface = expressionsInterfaces('footage');\n this.layerInterface = FootageInterface(this);\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 AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\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 this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\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 AudioElement.prototype.show = function () {\n // this.audio.play()\n };\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\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 AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n AudioElement.prototype.destroy = function () {};\n AudioElement.prototype.sourceRectAtTime = function () {};\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\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 this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n this.checkPendingElements();\n };\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n case 0:\n return this.createComp(layer);\n case 1:\n return this.createSolid(layer);\n case 3:\n return this.createNull(layer);\n case 4:\n return this.createShape(layer);\n case 5:\n return this.createText(layer);\n case 6:\n return this.createAudio(layer);\n case 13:\n return this.createCamera(layer);\n case 15:\n return this.createFootage(layer);\n default:\n return this.createNull(layer);\n }\n };\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n this.checkPendingElements();\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 for (i = 0; i < len; i += 1) {\n j = 0;\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n j += 1;\n }\n }\n };\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\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 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 if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n i += 1;\n }\n };\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\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 BaseRenderer.prototype.getElementById = function (ind) {\n var i;\n var len = this.elements.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.ind === ind) {\n return this.elements[i];\n }\n }\n return null;\n };\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\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 if (path.length === 0) {\n return element;\n }\n return element.getElementByPath(path);\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 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 if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n }\n\n // TODO: check TYPE 11: Guided elements\n if (this.data.ty !== 11) {\n // 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 if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length;\n // Checking if any of the transformation matrices in the hierarchy chain has changed.\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 i += 1;\n }\n }\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n for (i = 0; i < len; i += 1) {\n finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n }\n }\n }\n if (!this.localTransforms || this.finalTransform._matMdf) {\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\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 if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n while (i < len) {\n if (this.localTransforms[i]._mdf) {\n this.finalTransform._localMatMdf = true;\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 i += 1;\n }\n }\n if (this.finalTransform._localMatMdf) {\n var localMat = this.finalTransform.localMat;\n this.localTransforms[0].matrix.clone(localMat);\n for (i = 1; i < len; i += 1) {\n var lmat = this.localTransforms[i].matrix;\n localMat.multiply(lmat);\n }\n localMat.multiply(this.finalTransform.mat);\n }\n if (this.finalTransform._opMdf) {\n var localOp = this.finalTransform.localOpacity;\n for (i = 0; i < len; i += 1) {\n localOp *= this.localTransforms[i].opacity * 0.01;\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 if (transformEffects.length) {\n this.localTransforms = [];\n this.finalTransform.localMat = new Matrix();\n var i = 0;\n var len = transformEffects.length;\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 while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n var i;\n var len = transforms.length;\n var ptNew;\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\n // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\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 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 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 path = createNS('path');\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 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 }\n\n // TODO move this to a factory or to a constructor\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 if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\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 if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n }\n // TODO move this to a factory or to a constructor\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 if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\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 if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\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 if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\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 if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\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 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 this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\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 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 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 }\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 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 }\n // pathNodes.__renderedString = pathString;\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n viewData.lastPath = pathString;\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 function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\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 return fil;\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 return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true,\n svgLumaHidden: true,\n offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\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 if (/firefox/i.test(navigator.userAgent)) {\n ob.svgLumaHidden = false;\n }\n return ob;\n }();\n\n var registeredEffects$1 = {};\n var idPrefix = 'filter_result_';\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 for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\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 if (registeredEffects$1[type].countsAsEffect) {\n count += 1;\n }\n }\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n SVGEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n return effects;\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 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;\n // If this layer acts as a mask for the following layer\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 if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\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 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 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 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 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 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 if (!this.matteMasks[matteType]) {\n var id = this.layerId + '_' + matteType;\n var filId;\n var fil;\n var useElement;\n var gg;\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 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 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 this.globalData.defs.appendChild(maskGroup);\n }\n this.matteMasks[matteType] = id;\n }\n return this.matteMasks[matteType];\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\n * @file\n * Handles AE's layer parenting property.\n *\n */\n\n function HierarchyElement() {}\n HierarchyElement.prototype = {\n /**\n * @function\n * Initializes hierarchy properties\n *\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = [];\n // if element is parent of another layer _isParent will be true\n this._isParent = false;\n this.checkParenting();\n },\n /**\n * @function\n * Sets layer's hierarchy.\n * @param {array} hierarch\n * layer's parent list\n *\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n /**\n * @function\n * Sets layer as parent.\n *\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n /**\n * @function\n * Searches layer's parenting chain\n *\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 (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 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 this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.renderElement();\n this.renderInnerContent();\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 if (this.assetData && this.assetData.sid) {\n this.assetData = globalData.slotManager.getProp(this.assetData);\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 extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\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 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 IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\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 while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n var i;\n var len = this.shapes.length;\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\n // 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 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 while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n i += 1;\n }\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n while (i) {\n i -= 1;\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\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;\n // 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 this._isAnimated = !!shape.k;\n // TODO: commenting this for now since all shapes are animated\n var i = 0;\n var len = transformers.length;\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n i += 1;\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 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 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 if (!this.k) {\n this.getValue(true);\n }\n this._isAnimated = this.k;\n }\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n if (this.renderer === 'svg') {\n this.dashStr = '';\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 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 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 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 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 GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n if (diff > 0.01) {\n return false;\n }\n i += 1;\n }\n return true;\n };\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n return true;\n };\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\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 if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n if (this.o.length) {\n len = this.prop.v.length;\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 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 this._mdf = !forceRender;\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 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 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 for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\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 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 maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\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 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 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 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 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 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 return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n var _matrixHelper = new Matrix();\n var ob = {\n createRenderFunction: createRenderFunction\n };\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n case 'gf':\n return renderGradient;\n case 'gs':\n return renderGradientStroke;\n case 'st':\n return renderStroke;\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n case 'tr':\n return renderContentTransform;\n case 'no':\n return renderNoop;\n default:\n return null;\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 if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n function renderNoop() {}\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 for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\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 while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\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 paths = itemData.sh.paths;\n jLen = paths._length;\n if (redraw) {\n pathStringTransformed = '';\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\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 if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\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 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 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 if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n var stops;\n var i;\n var len;\n var stop;\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\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 if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\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 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 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 if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n if (itemData.s._mdf || 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 var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\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 if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n }\n // gfill.setAttribute('fy','200');\n }\n }\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\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 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 if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = [];\n // Full shape data\n this.shapesData = data.shapes;\n // List of styles that will be applied to shapes\n this.stylesList = [];\n // List of modifiers that will be applied to shapes\n this.shapeModifiers = [];\n // List of items in shape tree\n this.itemsData = [];\n // List of items in previous shape tree\n this.processedElements = [];\n // List of animated components\n this.animatedContents = [];\n this.initElement(data, globalData, comp);\n // 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 this.prevViewData = [];\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n\n /*\n This method searches for multiple shapes that affect a single element and one of them is animated\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 for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\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 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 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 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 if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n return elementData;\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 SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\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 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 SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n i += 1;\n }\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr.indexOf(this.stylesList[j]) === -1 && !this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\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 for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\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 = arr[i].hd;\n }\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\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 for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\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 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 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 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 ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n len = ownStyles.length;\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n this.renderShape();\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);\n // Adding M0 0 fixes same mask bug on all browsers\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\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 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 if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\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 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 if (data.d && data.d.sid) {\n data.d = elem.globalData.slotManager.getProp(data.d);\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 if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n TextProperty.prototype.defaultBoxWidth = [0, 0];\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 return obj;\n };\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n return this.kf;\n };\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\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 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 if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\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 while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n i += 1;\n }\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n return this.data.d.k[this.keysIndex].s;\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 while (i < len) {\n shouldCombine = shouldCombineNext;\n shouldCombineNext = false;\n charCode = text.charCodeAt(i);\n currentChars = text.charAt(i);\n if (FontManager.isCombinedCharacter(charCode)) {\n shouldCombine = true;\n // 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);\n // It's a surrogate pair (this is the Low surrogate)\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 if (FontManager.isVariationSelector(charCode)) {\n shouldCombine = true;\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n shouldCombine = true;\n shouldCombineNext = true;\n }\n if (shouldCombine) {\n charactersArray[charactersArray.length - 1] += currentChars;\n shouldCombine = false;\n } else {\n charactersArray.push(currentChars);\n }\n i += currentChars.length;\n }\n return charactersArray;\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 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 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 for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\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 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 if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r');\n // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n currentHeight += fontData.ascent * documentData.finalSize / 100;\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 lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\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 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 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 if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\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 index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\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 currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n default:\n documentData.justifyOffset = 0;\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 for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n ind = 0;\n based = animatorData.s.b;\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\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 ind += 1;\n }\n }\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\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 letterData.anIndexes[j] = newInd;\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 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 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 TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\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 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 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 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 if (!this.dynamicProperties.length) {\n this.getValue();\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 var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\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 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 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 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 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 if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\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;\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\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 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 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 mult = easer(mult);\n }\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 if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n var threshold = 0.5 - smoothness * 0.5;\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n if (mult > 1) {\n mult = 1;\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 if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\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 if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\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 TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\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 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 this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\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 if (this._hasMaskedPath) {\n mask = this._pathData.m;\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n if (this._pathData.r.v) {\n paths = paths.reverse();\n }\n // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\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 i = len;\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 this._pathData.pi = pathInfo;\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 if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\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 //\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 for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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 isNewLine = false;\n }\n }\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\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 if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\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 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 case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n default:\n break;\n }\n currentLine = letters[i].line;\n }\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\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 if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n flag = true;\n // Force alignment only works with a single line for now\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 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 if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\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 if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\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);\n\n // Grouping alignment\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\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 if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\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 if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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 for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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 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 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 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 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 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 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 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 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 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 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 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 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 for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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 if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\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 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 if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\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 if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\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 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 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 case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n default:\n break;\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 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 letterO = elemOpacity;\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 TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\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 ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n };\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\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 return shapeStr;\n };\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\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 matrixHelper.translate(0, -documentData.ls, 0);\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n default:\n break;\n }\n matrixHelper.translate(xPos, yPos, 0);\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 ITextElement.prototype.emptyProp = new LetterProps();\n ITextElement.prototype.destroy = function () {};\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 function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\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 i += 1;\n }\n textContents.push(currentTextContent);\n return textContents;\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 if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n return data;\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 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 if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\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 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 if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n case 2:\n justify = 'middle';\n break;\n default:\n justify = 'start';\n break;\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 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 if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\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 if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\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 if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n tSpan.style.display = 'inherit';\n }\n matrixHelper.reset();\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 this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0;\n // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n xPos += trackingOffset;\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;\n // t === 1 means the character has been replaced with an animated shaped\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n glyphElement = new SVGShapeElement(data, this.globalData, this);\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 this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);\n // 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 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 tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n }\n //\n }\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n this._sizeChanged = true;\n };\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\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 return this.bbox;\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 for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n this.validateText();\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\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 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 if (glyphElement) {\n glyphElement.renderFrame();\n }\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\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 extendPrototype([IImageElement], ISolidElement);\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect');\n /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\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 NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n NullElement.prototype.renderFrame = function () {};\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n NullElement.prototype.destroy = function () {};\n NullElement.prototype.sourceRectAtTime = function () {};\n NullElement.prototype.hide = function () {};\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n extendPrototype([BaseRenderer], SVGRendererBase);\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\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 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 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 if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\n // 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 this.animationItem.wrapper.appendChild(this.svgElement);\n // Mask animation\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 SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\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 this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n SVGRendererBase.prototype.updateContainerSize = function () {};\n SVGRendererBase.prototype.findIndexByInd = function (ind) {\n var i = 0;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ind === ind) {\n return i;\n }\n }\n return -1;\n };\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n element.initExpressions();\n }\n this.appendElementInPos(element, pos);\n if (this.layers[pos].tt) {\n var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n if (elementIndex === -1) {\n return;\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 SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\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 i += 1;\n }\n }\n }\n };\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n }\n // console.log('-------');\n // console.log('FRAME ',num);\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 if (!this.completeLayers) {\n this.checkLayers(num);\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 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 SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n if (!newElement) {\n return;\n }\n var i = 0;\n var nextElement;\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 i += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\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 if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n this.hide();\n };\n\n /* ICompElement.prototype.hide = function(){\n if(!this.hidden){\n this.hideElement();\n var i,len = this.elements.length;\n for( i = 0; i < len; i+=1 ){\n if(this.elements[i]){\n this.elements[i].hide();\n }\n }\n }\n }; */\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n var i;\n var len = this.elements.length;\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n }\n // This iteration needs to be backwards because of how expressions connect between each other\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 if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\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 extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\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 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 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 if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\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 extendPrototype([SVGRendererBase], SVGRenderer);\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 ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n var sequence = this.sequences[key];\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 return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n i += 1;\n }\n if (_mdf) {\n sequence.finalTransform.reset();\n for (i = len - 1; i >= 0; i -= 1) {\n sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n }\n }\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\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;\n\n // 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 var svgString = [\n '<svg xmlns=\"http://www.w3.org/2000/svg\">',\n '<filter id=\"' + id + '\">',\n '<feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"',\n '0.3, 0.3, 0.3, 0, 0, ',\n '0.3, 0.3, 0.3, 0, 0, ',\n '0.3, 0.3, 0.3, 0, 0, ',\n '0.3, 0.3, 0.3, 0, 0',\n '\"/>',\n '</filter>',\n '</svg>',\n ].join('');\n var blob = new Blob([svgString], { type: 'image/svg+xml' });\n var url = URL.createObjectURL(blob);\n */\n\n function createLumaSvgFilter() {\n var _svg = createNS('svg');\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 _svg.appendChild(fil);\n _svg.setAttribute('id', id + '_svg');\n if (featureSupport.svgLumaHidden) {\n _svg.style.display = 'none';\n }\n return _svg;\n }\n function loadLuma() {\n if (!lumaBuffer) {\n svg = createLumaSvgFilter();\n document.body.appendChild(svg);\n lumaBuffer = createTag('canvas');\n lumaBufferCtx = lumaBuffer.getContext('2d');\n // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n lumaBufferCtx.filter = 'url(#' + id + ')';\n lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n lumaBufferCtx.fillRect(0, 0, 1, 1);\n }\n }\n function getLuma(canvas) {\n if (!lumaBuffer) {\n loadLuma();\n }\n lumaBuffer.width = canvas.width;\n lumaBuffer.height = canvas.height;\n // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n lumaBufferCtx.filter = 'url(#' + id + ')';\n return lumaBuffer;\n }\n return {\n load: loadLuma,\n get: getLuma\n };\n };\n function createCanvas(width, height) {\n if (featureSupport.offscreenCanvas) {\n return new OffscreenCanvas(width, height);\n }\n var canvas = createTag('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\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 function CVEffects(elem) {\n var i;\n var len = elem.data.ef ? elem.data.ef.length : 0;\n this.filters = [];\n var filterManager;\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n }\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n CVEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n return effects;\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 for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n this.hasMasks = hasMasks;\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\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 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 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 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 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 this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\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 if (this.data.tt >= 3 && !document._isProxy) {\n assetLoader.loadLumaCanvas();\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 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);\n // on the first buffer we store the current state of the global drawing\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n // 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 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];\n // 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 var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx);\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n // We clear the canvas again\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform);\n // We draw the mask\n var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n mask.renderFrame(true);\n // We draw the second buffer (that contains the content of this layer)\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n\n // 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 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);\n // we repaint the context with the mask applied to it\n this.canvasContext.drawImage(lumaBuffer, 0, 0);\n }\n this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n this.canvasContext.drawImage(buffer, 0, 0);\n // 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 this.canvasContext.globalCompositeOperation = 'destination-over';\n this.canvasContext.drawImage(this.buffers[0], 0, 0);\n this.canvasContext.setTransform(this.currentTransform);\n // We reset the globalCompositeOperation to source-over, the standard type of operation\n this.canvasContext.globalCompositeOperation = 'source-over';\n }\n },\n renderFrame: function renderFrame(forceRender) {\n if (this.hidden || this.data.hd) {\n return;\n }\n if (this.data.td === 1 && !forceRender) {\n return;\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 if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\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 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 this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\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 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 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 CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\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 if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\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 elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\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 this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\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 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 CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\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 CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\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 for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\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 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 for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\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 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 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 ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\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 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 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 for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type;\n\n // 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 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 if (type === 'st' || type === 'gs') {\n renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd);\n // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n renderer.ctxLineWidth(currentStyle.wi);\n // ctx.lineWidth = currentStyle.wi;\n renderer.ctxLineCap(currentStyle.lc);\n // ctx.lineCap = currentStyle.lc;\n renderer.ctxLineJoin(currentStyle.lj);\n // ctx.lineJoin = currentStyle.lj;\n renderer.ctxMiterLimit(currentStyle.ml || 0);\n // ctx.miterLimit = currentStyle.ml || 0;\n } else {\n renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd);\n // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n renderer.ctxOpacity(currentStyle.coOp);\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n nodes = elems[j].trNodes;\n kLen = nodes.length;\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 if (type === 'st' || type === 'gs') {\n // ctx.stroke();\n renderer.ctxStroke();\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n if (type !== 'st' && type !== 'gs') {\n // ctx.fill(currentStyle.r);\n this.globalData.renderer.ctxFill(currentStyle.r);\n }\n renderer.restore();\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 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 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 for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\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 shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\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 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 styledShape.trNodes = shapeNodes;\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 for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\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 if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\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 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 if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\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 var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\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 grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n styleElem.grd = grd;\n }\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\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 if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\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 extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\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 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 this.fill = hasFill;\n var hasStroke = false;\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\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;\n // this.tHelper.font = this.values.fValue;\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 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 if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\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 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 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 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 if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n cnt += 1;\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');\n // ctx.lineCap = 'butt';\n this.globalData.renderer.ctxLineJoin('miter');\n // ctx.lineJoin = 'miter';\n this.globalData.renderer.ctxMiterLimit(4);\n // ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\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 for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n if (renderedLetter) {\n renderer.save();\n renderer.ctxTransform(renderedLetter.p);\n renderer.ctxOpacity(renderedLetter.o);\n }\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n renderer.ctxFillStyle(renderedLetter.fc);\n lastFill = renderedLetter.fc;\n // ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n renderer.ctxFillStyle(this.values.fill);\n // ctx.fillStyle = this.values.fill;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\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 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 this.globalData.canvasContext.closePath();\n renderer.ctxFill();\n // this.globalData.canvasContext.fill();\n /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n renderer.ctxLineWidth(renderedLetter.sw);\n // ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n renderer.ctxLineWidth(this.values.sWidth);\n // ctx.lineWidth = this.values.sWidth;\n }\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n renderer.ctxStrokeStyle(renderedLetter.sc);\n // ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n renderer.ctxStrokeStyle(this.values.stroke);\n // ctx.strokeStyle = this.values.stroke;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\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 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 this.globalData.canvasContext.closePath();\n renderer.ctxStroke();\n // this.globalData.canvasContext.stroke();\n /// ctx.strokeText(letters[i].val,0,0);\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 extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\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 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 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 CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\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 extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n CVSolidElement.prototype.renderInnerContent = function () {\n // var ctx = this.canvasContext;\n this.globalData.renderer.ctxFillStyle(this.data.sc);\n // ctx.fillStyle = this.data.sc;\n this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh);\n // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n };\n\n function CanvasRendererBase() {}\n extendPrototype([BaseRenderer], CanvasRendererBase);\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\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 this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n };\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n };\n CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n this.canvasContext.fillStyle = value;\n };\n CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n this.canvasContext.strokeStyle = value;\n };\n CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n this.canvasContext.lineWidth = value;\n };\n CanvasRendererBase.prototype.ctxLineCap = function (value) {\n this.canvasContext.lineCap = value;\n };\n CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n this.canvasContext.lineJoin = value;\n };\n CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n this.canvasContext.miterLimit = value;\n };\n CanvasRendererBase.prototype.ctxFill = function (rule) {\n this.canvasContext.fill(rule);\n };\n CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n this.canvasContext.fillRect(x, y, w, h);\n };\n CanvasRendererBase.prototype.ctxStroke = function () {\n this.canvasContext.stroke();\n };\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n this.contextData.reset();\n };\n CanvasRendererBase.prototype.save = function () {\n this.canvasContext.save();\n };\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n if (actionFlag) {\n this.globalData.blendMode = 'source-over';\n }\n this.contextData.restore(actionFlag);\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 if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\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 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 CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n this.reset();\n var elementWidth;\n var elementHeight;\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 this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n }\n var elementRel;\n var animationRel;\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 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 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 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 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;\n for(i=0;i<len;i+=1){\n if(this.elements[i] && this.elements[i].data.ty === 0){\n this.elements[i].resize(this.globalData.transformCanvas);\n }\n } */\n this.ctxTransform(this.transformCanvas.props);\n this.canvasContext.beginPath();\n this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n this.canvasContext.closePath();\n this.canvasContext.clip();\n this.renderFrame(this.renderedFrame, true);\n };\n CanvasRendererBase.prototype.destroy = function () {\n if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n var i;\n var len = this.layers ? this.layers.length : 0;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\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 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;\n\n // console.log('--------');\n // console.log('NEW: ',num);\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\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 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 for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\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){\n element.resize(this.globalData.transformCanvas);\n } */\n };\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\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 function CVContextData() {\n this.stack = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n var i;\n var len = 15;\n for (i = 0; i < len; i += 1) {\n var canvasContext = new CanvasContext();\n this.stack[i] = canvasContext;\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 CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var i = 0;\n for (i = this._length; i < newLength; i += 1) {\n this.stack[i] = new CanvasContext();\n }\n this._length = newLength;\n };\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.stack[this.cArrPos].opacity = 1;\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 for (i = 0; i < 16; i += 1) {\n arr[i] = transform[i];\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 this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n this.nativeContext.globalAlpha = currentContext.opacity;\n this.currentOpacity = currentContext.opacity;\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 CVContextData.prototype.save = function (saveOnNativeFlag) {\n if (saveOnNativeFlag) {\n this.nativeContext.save();\n }\n var props = this.cTr.props;\n if (this._length <= this.cArrPos) {\n this.duplicate();\n }\n var currentStack = this.stack[this.cArrPos];\n var i;\n for (i = 0; i < 16; i += 1) {\n currentStack.transform[i] = props[i];\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 CVContextData.prototype.setOpacity = function (value) {\n this.stack[this.cArrPos].opacity = value;\n };\n CVContextData.prototype.setContext = function (value) {\n this.nativeContext = value;\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 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 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 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 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 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 CVContextData.prototype.transform = function (props) {\n this.transformMat.cloneFromProps(props);\n // Taking the last transform value from the stored stack of transforms\n var currentTransform = this.cTr;\n // Applying the last transform value after the new transform to respect the order of transformations\n this.transformMat.multiply(currentTransform);\n // Storing the new transformed value in the stored transform\n currentTransform.cloneFromProps(this.transformMat.props);\n var trProps = currentTransform.props;\n // Applying the new transform to the canvas\n this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n CVContextData.prototype.opacity = function (op) {\n var currentOpacity = this.stack[this.cArrPos].opacity;\n currentOpacity *= op < 0 ? 0 : op;\n if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n if (this.currentOpacity !== op) {\n this.nativeContext.globalAlpha = op;\n this.currentOpacity = op;\n }\n this.stack[this.cArrPos].opacity = currentOpacity;\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 this.nativeContext.fill(rule);\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 this.nativeContext.fillRect(x, y, w, h);\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 if (this.appliedLineWidth !== this.currentLineWidth) {\n this.appliedLineWidth = this.currentLineWidth;\n this.nativeContext.lineWidth = this.appliedLineWidth;\n }\n if (this.appliedLineCap !== this.currentLineCap) {\n this.appliedLineCap = this.currentLineCap;\n this.nativeContext.lineCap = this.appliedLineCap;\n }\n if (this.appliedLineJoin !== this.currentLineJoin) {\n this.appliedLineJoin = this.currentLineJoin;\n this.nativeContext.lineJoin = this.appliedLineJoin;\n }\n if (this.appliedMiterLimit !== this.currentMiterLimit) {\n this.appliedMiterLimit = this.currentMiterLimit;\n this.nativeContext.miterLimit = this.appliedMiterLimit;\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 extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\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 for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.layers = null;\n this.elements = null;\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 if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\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 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 extendPrototype([CanvasRendererBase], CanvasRenderer);\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\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 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 if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\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 if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\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 this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n if (this.matteElement) {\n this.matteElement = null;\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 extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n HSolidElement.prototype.createContent = function () {\n var rect;\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 this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = [];\n // Full shape data\n this.shapesData = data.shapes;\n // List of styles that will be applied to shapes\n this.stylesList = [];\n // List of modifiers that will be applied to shapes\n this.shapeModifiers = [];\n // List of items in shape tree\n this.itemsData = [];\n // List of items in previous shape tree\n this.processedElements = [];\n // List of animated components\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp);\n // 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 this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\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 this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n return point;\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 if (len <= 1) {\n return;\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 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 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 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 HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\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 a |= 0; // eslint-disable-line no-bitwise\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {\n //\n } else if (a === 0) {\n t = -c / b;\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 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 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 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 HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\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 HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n var width = 0;\n if (widthProperty.keyframes) {\n for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n var kfw = widthProperty.keyframes[i].s;\n if (kfw > width) {\n width = kfw;\n }\n }\n width *= widthProperty.mult;\n } else {\n width = widthProperty.v * widthProperty.mult;\n }\n boundingBox.x -= width;\n boundingBox.xMax += width;\n boundingBox.y -= width;\n boundingBox.yMax += width;\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 HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\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;\n // var tempBoundingBox = this.shapeCont.getBBox();\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n var changed = false;\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 if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\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 extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\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 this.checkParenting();\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 if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\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 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 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 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 }\n // tSpan.setAttribute('visibility', 'hidden');\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 if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n matrixHelper.reset();\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 if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\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 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 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 if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n HTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var svgStyle;\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\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 this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\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 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 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 }\n /// /textSpan.setAttribute('opacity',renderedLetter.o);\n textSpan.style.opacity = renderedLetter.o;\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n var margin = 1;\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 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 if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\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 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 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;\n\n // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n this.finalTransform = {\n mProp: this\n };\n }\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\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 for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\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 HCameraElement.prototype.createElements = function () {};\n HCameraElement.prototype.hide = function () {};\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n if (this.hierarchy) {\n len = this.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\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 if (this.hierarchy) {\n len = this.hierarchy.length - 1;\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 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 if (this.a) {\n var diffVector;\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 var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2));\n // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\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 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 if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\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 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 this.mat.clone(this._prevMat);\n }\n }\n this._isFirstFrame = false;\n };\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n HCameraElement.prototype.destroy = function () {};\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 extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\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 img.crossOrigin = 'anonymous';\n img.src = assetPath;\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 extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n if (!newDOMElement) {\n return;\n }\n var layer = this.layers[pos];\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 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 i += 1;\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 HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n return new HShapeElement(data, this.globalData, this);\n };\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n return new HTextElement(data, this.globalData, this);\n };\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n return new HImageElement(data, this.globalData, this);\n };\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n return new HSolidElement(data, this.globalData, this);\n };\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n i += 1;\n }\n return null;\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 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 perspectiveElem.appendChild(container);\n // this.resizerElem.appendChild(perspectiveElem);\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 HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\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 lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n len = this.threeDElements.length;\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n j += 1;\n }\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n break;\n }\n i += 1;\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 if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\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;\n // Mask animation\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 HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\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 this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\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 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 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 HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\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 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 HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\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 extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements();\n // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\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 HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n j += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\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 extendPrototype([HybridRendererBase], HybridRenderer);\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\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 while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n i += 1;\n }\n return null;\n // return {active:false};\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(o) { \"@babel/helpers - typeof\"; return _typeof$2 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$2(o); }\n /* eslint-disable */\n /*\n Copyright 2014 David Bau.\n\n Permission is hereby granted, free of charge, to any person obtaining\n a copy of this software and associated documentation files (the\n \"Software\"), to deal in the Software without restriction, including\n without limitation the rights to use, copy, modify, merge, publish,\n distribute, sublicense, and/or sell copies of the Software, and to\n permit persons to whom the Software is furnished to do so, subject to\n the following conditions:\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n */\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 //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {};\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // 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 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 while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n prng[\"double\"] = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\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 }\n // Only provide the .state method if requested via options.state.\n prng.state = function () {\n return copy(arc4, {});\n };\n }\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 if (is_math_call) {\n math[rngname] = prng;\n return seed;\n }\n\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 math['seed' + rngname] = seedrandom;\n\n //\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 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 = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) {\n key = [keylen++];\n }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\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 }\n\n // The \"g\" method returns the next (count) outputs as one number.\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 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 me.i = i;\n me.j = j;\n return r;\n // 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\n //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\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\n //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$2(obj),\n prop;\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 return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n }\n\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 function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n return tostring(key);\n }\n\n //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\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\n //\n // tostring()\n // Converts an array of charcodes to a string\n //\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n }\n\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 mixkey(math.random(), pool);\n\n //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n\n // End anonymous scope, and pass initial values.\n }\n ;\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof$1(o) { \"@babel/helpers - typeof\"; return _typeof$1 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$1(o); }\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 function resetFrame() {\n _lottieGlobal = {};\n }\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n }\n function $bm_neg(a) {\n var tOfA = _typeof$1(a);\n if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n return -a;\n }\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n return retArr;\n }\n if (a.propType) {\n return a.v;\n }\n return -a;\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 function sum(a, b) {\n var tOfA = _typeof$1(a);\n var tOfB = _typeof$1(b);\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\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 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 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 i += 1;\n }\n return retArr;\n }\n return 0;\n }\n var add = sum;\n function sub(a, b) {\n var tOfA = _typeof$1(a);\n var tOfB = _typeof$1(b);\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n return a - b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\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 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 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 i += 1;\n }\n return retArr;\n }\n return 0;\n }\n function mul(a, b) {\n var tOfA = _typeof$1(a);\n var tOfB = _typeof$1(b);\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n return arr;\n }\n return 0;\n }\n function div(a, b) {\n var tOfA = _typeof$1(a);\n var tOfB = _typeof$1(b);\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n return arr;\n }\n return 0;\n }\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n return a % b;\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 function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n return Math.min(Math.max(num, min), max);\n }\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n var radians_to_degrees = radiansToDegrees;\n function degreesToRadians(val) {\n return val * degToRads;\n }\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\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 if (!arr2) {\n arr2 = helperLengthArray;\n }\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n return Math.sqrt(addedLength);\n }\n function normalize(vec) {\n return div(vec, length(vec));\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 if (max === min) {\n h = 0; // achromatic\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return [h, s, l, val[3]];\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 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 if (s === 0) {\n r = l; // achromatic\n b = l; // achromatic\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 return [r, g, b, val[3]];\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 if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n if (t <= tMin) {\n return value1;\n }\n if (t >= tMax) {\n return value2;\n }\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n return arr;\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 if (max.length) {\n var i;\n var len = max.length;\n if (!min) {\n min = createTypedArray('float32', len);\n }\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n return arr;\n }\n if (min === undefined) {\n min = 0;\n }\n var rndm = BMMath.random();\n return min + rndm * (max - min);\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 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 return path;\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 if (!elem.globalData.renderConfig.runExpressions) {\n return noOp;\n }\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n var _needsRandom = val.indexOf('random') !== -1;\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._name = elem.data.nm;\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;\n // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\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 while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random();\n // addedAmps[j] += -amp + amp*2*rnd;\n }\n iWiggle += 1;\n }\n // var rnd2 = BMMath.random();\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\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;\n // 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 return arr;\n }\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\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 function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\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 if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n var mult = fn(t);\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n return arr;\n }\n return (val2 - val1) * mult + val1;\n }\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\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 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 break;\n }\n }\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\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 for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n return obKey;\n }\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return fr / fps;\n }\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return t * fps;\n }\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n return value.substring(init, end);\n }\n return '';\n }\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n return value.substr(init, end);\n }\n return '';\n }\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\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 function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\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 if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\n rotation = transform.rotation;\n scale = transform.scale; */\n }\n }\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n if (!effect) {\n effect = thisLayer(4);\n }\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n expression_function();\n this.frameExpressionId = elem.globalData.frameId;\n\n // 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 scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n }\n // Bundlers will see these as dead code and unless we reference them\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 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 function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n function pushExpression() {\n stackCount += 1;\n }\n function popExpression() {\n stackCount -= 1;\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n function releaseInstances() {\n var i;\n var len = registers.length;\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n registers.length = 0;\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 return ob;\n }();\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\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 return this._mask.op.v * 100;\n }\n });\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n var i;\n var len = maskManager.viewData.length;\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n var maskFunction = function maskFunction(name) {\n i = 0;\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n i += 1;\n }\n return null;\n };\n return maskFunction;\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 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 expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n var value = '';\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 var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\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 expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\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 expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n val = property.v * mult;\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n expressionValue.value = val;\n expressionValue[0] = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n return expressionValue;\n };\n }\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\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 for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n return expressionValue;\n };\n }\n\n // TODO: try to avoid using this getter\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\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 case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n default:\n return null;\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 var _px;\n var _py;\n var _pz;\n var _transformFactory;\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\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 if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n return toWorldMat;\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 function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\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 function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\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 for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\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 for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.inversePoint(arr);\n }\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n return toWorldMat.inversePoint(arr);\n }\n return toWorldMat.inversePoint(arr);\n }\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n return function (elem) {\n var transformInterface;\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\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 case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n default:\n return null;\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 if (val <= 0) {\n return interfaceFunction;\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 function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return propertyGroup(val - 1);\n }\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\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 for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n var effects = elem.data.ef || [];\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n i += 1;\n }\n return null;\n };\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n return null;\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 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 return effectElements[i]();\n }\n i += 1;\n }\n throw new Error();\n }\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n var effectElements = [];\n var i;\n var len = data.ef.length;\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 if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\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 function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n return expressionProperty();\n }\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n return interfaceFunction;\n }\n return ob;\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\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 return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\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 return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\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 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') {\n // 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 return arr;\n }\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\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 i += 1;\n }\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n return null;\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 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 default:\n return interfaceFunction.transform;\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 });\n // interfaceFunction.content = interfaceFunction;\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 function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n return null;\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 function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n return null;\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 function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n return interfaceFunction;\n }\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n return null;\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 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 if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\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 function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\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 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 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 function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\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 function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\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 if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\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 function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\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 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 return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\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 function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\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 return function (shapes, view, propertyGroup) {\n var interfaces;\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n if (value === 0) {\n return propertyGroup;\n }\n return interfaces[value - 1];\n }\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n i += 1;\n }\n return null;\n }\n function parentGroupWrapper() {\n return propertyGroup;\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 function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\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 _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n Object.defineProperty(_sourceText, 'style', {\n get: function get() {\n return {\n fillColor: elem.textProperty.currentData.fc\n };\n }\n });\n }\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n return currentProperty;\n }\n var propertyNameIndex = value.indexOf(currentPropertyName);\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n return currentProperty;\n }\n return '';\n }\n return init;\n };\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n return null;\n }\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n return null;\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 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 function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\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 return this._cachingAtTime.value;\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 if (v1.length) {\n var i;\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n return speed;\n }\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n var delta = -0.001;\n // frameNum += this.elem.data.st;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\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 return velocity;\n }\n function getStaticValueAtTime() {\n return this.pv;\n }\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\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 type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var firstKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\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 firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\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 var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n return ret;\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 if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\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 return ret;\n }\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var lastKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\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 lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\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 if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n return ret;\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 if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n return ret;\n }\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n if (samples <= 1) {\n return this.pv;\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 if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n var sampleValue;\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\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 i += 1;\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 return value;\n }\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n }\n /// /\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\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 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 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 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 if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\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 return matrix;\n /// /\n }\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n var propertyGetProp = PropertyFactory.getProp;\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container);\n // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\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 if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n return prop;\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 frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\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 return this._cachingAtTime.shapeValue;\n }\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n function ShapeExpressions() {}\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\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 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 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 if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\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 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 i += 1;\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 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 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 if (magnitude === 0) {\n return [0, 0];\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 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 if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\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 return null;\n }\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\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 return currentValue;\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 TextProperty.prototype.searchExpressions = searchExpressions;\n }\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\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 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 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 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 extendPrototype([SVGComposableEffect], SVGTintFilter);\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 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 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 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 groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\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 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 while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\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 while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n var i;\n var len = this.paths.length;\n var mask;\n var path;\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 if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\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 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 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 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 path.setAttribute('stroke-dasharray', dasharrayValue);\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 if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\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 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');\n\n // Red\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 }\n // Green\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 }\n // Blue\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 }\n // Alpha\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 }\n // RGB\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\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 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 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 while (cnt <= 256) {\n perc = cnt / 256;\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 table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n return table.join(' ');\n };\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\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 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 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 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 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 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 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 if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\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 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 SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n i += 1;\n }\n return null;\n };\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n if (!parentNode) {\n return;\n }\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n i += 1;\n }\n var nextChild;\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\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 _svgMatteSymbols.push(mask);\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 elem.setMatte(mask.layerId);\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 while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n i += 1;\n }\n this.initialized = true;\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 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;\n\n // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY);\n\n // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function TransformEffect() {}\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 TransformEffect.prototype.renderFrame = function (forceFrame) {\n this._opMdf = false;\n this._mdf = false;\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 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 extendPrototype([TransformEffect], SVGTransformEffect);\n\n function CVTransformEffect(effectsManager) {\n this.init(effectsManager);\n }\n extendPrototype([TransformEffect], CVTransformEffect);\n\n // Registering renderers\n registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer);\n\n // Registering shape modifiers\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);\n\n // Registering expression plugin\n setExpressionsPlugin(Expressions);\n setExpressionInterfaces(getInterface);\n initialize$1();\n initialize();\n\n // Registering svg effects\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","/* unzipit@2.0.0, license MIT */\nvar _a, _b;\nfunction readBlobAsArrayBuffer(blob) {\n if (blob.arrayBuffer) {\n return blob.arrayBuffer();\n }\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', () => {\n resolve(reader.result);\n });\n reader.addEventListener('error', reject);\n reader.readAsArrayBuffer(blob);\n });\n}\nasync function readBlobAsUint8Array(blob) {\n const arrayBuffer = await readBlobAsArrayBuffer(blob);\n return new Uint8Array(arrayBuffer);\n}\nfunction isBlob(v) {\n return typeof Blob !== 'undefined' && v instanceof Blob;\n}\nfunction isSharedArrayBuffer(b) {\n return typeof SharedArrayBuffer !== 'undefined' && b instanceof SharedArrayBuffer;\n}\nconst isNode = (typeof process !== 'undefined') &&\n !!(process === null || process === void 0 ? void 0 : process.versions) &&\n (typeof ((_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== 'undefined') &&\n (typeof ((_b = process === null || process === void 0 ? void 0 : process.versions) === null || _b === void 0 ? void 0 : _b.electron) === 'undefined');\nfunction isTypedArraySameAsArrayBuffer(typedArray) {\n return typedArray.byteOffset === 0 && typedArray.byteLength === typedArray.buffer.byteLength;\n}\n\nclass ArrayBufferReader {\n constructor(arrayBufferOrView) {\n this.typedArray = (arrayBufferOrView instanceof ArrayBuffer || isSharedArrayBuffer(arrayBufferOrView))\n ? new Uint8Array(arrayBufferOrView)\n : new Uint8Array(arrayBufferOrView.buffer, arrayBufferOrView.byteOffset, arrayBufferOrView.byteLength);\n }\n async getLength() {\n return this.typedArray.byteLength;\n }\n async read(offset, length) {\n // Cast is necessary: backing buffer may be SharedArrayBuffer (ArrayBufferLike),\n // but callers need Uint8Array<ArrayBuffer>. The data is read-only view so this is safe.\n return new Uint8Array(this.typedArray.buffer, this.typedArray.byteOffset + offset, length);\n }\n}\n\nclass BlobReader {\n constructor(blob) {\n this.blob = blob;\n }\n async getLength() {\n return this.blob.size;\n }\n async read(offset, length) {\n const blob = this.blob.slice(offset, offset + length);\n const arrayBuffer = await readBlobAsArrayBuffer(blob);\n return new Uint8Array(arrayBuffer);\n }\n async sliceAsBlob(offset, length, type = '') {\n return this.blob.slice(offset, offset + length, type);\n }\n}\n\nclass HTTPRangeReader {\n constructor(url) {\n this.url = url;\n }\n async getLength() {\n if (this.length === undefined) {\n const req = await fetch(this.url, { method: 'HEAD' });\n if (!req.ok) {\n throw new Error(`failed http request ${this.url}, status: ${req.status}: ${req.statusText}`);\n }\n this.length = parseInt(req.headers.get('content-length'));\n if (Number.isNaN(this.length)) {\n throw Error('could not get length');\n }\n }\n return this.length;\n }\n async read(offset, size) {\n if (size === 0) {\n return new Uint8Array(0);\n }\n const req = await fetch(this.url, {\n headers: {\n Range: `bytes=${offset}-${offset + size - 1}`,\n },\n });\n if (!req.ok) {\n throw new Error(`failed http request ${this.url}, status: ${req.status} offset: ${offset} size: ${size}: ${req.statusText}`);\n }\n const buffer = await req.arrayBuffer();\n return new Uint8Array(buffer);\n }\n}\n\n/* global DecompressionStream */\nconst config = {\n numWorkers: 1,\n workerURL: '',\n useWorkers: false,\n};\nlet nextId = 0;\n// Requests are put on a queue.\n// We don't send the request to the worker until the worker\n// is finished. This probably adds a small amount of latency\n// but the issue is imagine you have 2 workers. You give worker\n// A x seconds of work to do and worker B y seconds of work to\n// do. You don't know which will finish first. If you give\n// the worker with more work to do the request then you'll\n// waste time.\n// note: we can't check `workers.length` for deciding if\n// we've reached `config.numWorkers` because creation the worker\n// is async which means other requests to make workers might\n// come in before a worker gets added to `workers`\nlet numWorkers = 0;\nlet canUseWorkers = true; // gets set to false if we can't start a worker\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst workers = [];\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst availableWorkers = [];\nconst waitingForWorkerQueue = [];\nconst currentlyProcessingIdToRequestMap = new Map();\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction handleResult(e) {\n makeWorkerAvailable(e.target);\n const { id, error, data } = e.data;\n const request = currentlyProcessingIdToRequestMap.get(id);\n currentlyProcessingIdToRequestMap.delete(id);\n if (error) {\n request.reject(error);\n }\n else {\n request.resolve(data);\n }\n}\n// Because Firefox uses non-standard onerror to signal an error.\nfunction startWorker(url) {\n return new Promise((resolve, reject) => {\n const worker = new Worker(url);\n worker.onmessage = (e) => {\n if (e.data === 'start') {\n worker.onerror = null;\n worker.onmessage = null;\n resolve(worker);\n }\n else {\n reject(new Error(`unexpected message: ${e.data}`));\n }\n };\n worker.onerror = reject;\n });\n}\nconst workerHelper = (function () {\n if (isNode) {\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async createWorker(url) {\n const { Worker } = await import('worker_threads');\n return new Worker(url);\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n addEventListener(worker, fn) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n worker.on('message', (data) => {\n fn({ target: worker, data });\n });\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async terminate(worker) {\n await worker.terminate();\n },\n };\n }\n else {\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async createWorker(url) {\n // I don't understand this security issue\n // Apparently there is some iframe setting or http header\n // that prevents cross domain workers. But, I can manually\n // download the text and do it. I reported this to Chrome\n // and they said it was fine so ¯\\_(ツ)_/¯\n try {\n const worker = await startWorker(url);\n return worker;\n }\n catch (_e) {\n console.warn('could not load worker:', url);\n }\n let text;\n try {\n const req = await fetch(url, { mode: 'cors' });\n if (!req.ok) {\n throw new Error(`could not load: ${url}`);\n }\n text = await req.text();\n url = URL.createObjectURL(new Blob([text], { type: 'application/javascript' }));\n const worker = await startWorker(url);\n config.workerURL = url; // this is a hack. What's a better way to structure this code?\n return worker;\n }\n catch (_e) {\n console.warn('could not load worker via fetch:', url);\n }\n if (text !== undefined) {\n try {\n url = `data:application/javascript;base64,${btoa(text)}`;\n const worker = await startWorker(url);\n config.workerURL = url;\n return worker;\n }\n catch (_e) {\n console.warn('could not load worker via dataURI');\n }\n }\n console.warn('workers will not be used');\n throw new Error('can not start workers');\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n addEventListener(worker, fn) {\n worker.addEventListener('message', fn);\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async terminate(worker) {\n worker.terminate();\n },\n };\n }\n}());\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction makeWorkerAvailable(worker) {\n availableWorkers.push(worker);\n processWaitingForWorkerQueue();\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function getAvailableWorker() {\n if (availableWorkers.length === 0 && numWorkers < config.numWorkers) {\n ++numWorkers; // see comment at numWorkers declaration\n try {\n const worker = await workerHelper.createWorker(config.workerURL);\n workers.push(worker);\n availableWorkers.push(worker);\n workerHelper.addEventListener(worker, handleResult);\n }\n catch (_e) {\n // set this global out-of-band (needs refactor)\n canUseWorkers = false;\n }\n }\n return availableWorkers.pop();\n}\nasync function decompressRaw(src) {\n const ds = new DecompressionStream('deflate-raw');\n const writer = ds.writable.getWriter();\n // Do not await the write — doing so before reading causes a deadlock when\n // the internal buffer fills due to backpressure.\n writer.write(src).then(() => writer.close()).catch(() => { });\n const chunks = [];\n const reader = ds.readable.getReader();\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n chunks.push(value);\n }\n const size = chunks.reduce((s, c) => s + c.byteLength, 0);\n const result = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return result;\n}\n// @param {Uint8Array} src\n// @param {string} [type] mime-type\n// @returns {ArrayBuffer|Blob} ArrayBuffer if type is falsy or Blob otherwise.\nasync function inflateRawLocal(src, type, resolve, reject) {\n try {\n const dst = await decompressRaw(src);\n resolve(type ? new Blob([dst], { type }) : dst.buffer);\n }\n catch (e) {\n reject(e);\n }\n}\nasync function processWaitingForWorkerQueue() {\n if (waitingForWorkerQueue.length === 0) {\n return;\n }\n if (config.useWorkers && canUseWorkers) {\n const worker = await getAvailableWorker();\n // canUseWorkers might have been set out-of-band (need refactor)\n if (canUseWorkers) {\n if (worker) {\n if (waitingForWorkerQueue.length === 0) {\n // the queue might be empty while we awaited for a worker.\n makeWorkerAvailable(worker);\n return;\n }\n const { id, src, uncompressedSize, type, resolve, reject } = waitingForWorkerQueue.shift();\n currentlyProcessingIdToRequestMap.set(id, { id, src, uncompressedSize, type, resolve, reject });\n const transferables = [];\n // NOTE: Originally I thought you could transfer an ArrayBuffer.\n // The code on this side is often using views into the entire file\n // which means if we transferred we'd lose the entire file. That sucks\n // because it means there's an expensive copy to send the uncompressed\n // data to the worker.\n //\n // Also originally I thought we could send a Blob but we'd need to refactor\n // the code in unzipit/readEntryData as currently it reads the uncompressed\n // bytes.\n //\n //if (!isBlob(src) && !isSharedArrayBuffer(src)) {\n // transferables.push(src);\n //}\n worker.postMessage({\n type: 'inflate',\n data: {\n id,\n type,\n src,\n uncompressedSize,\n },\n }, transferables);\n }\n return;\n }\n }\n // inflate locally\n // We loop here because what happens if many requests happen at once\n // the first N requests will try to async make a worker. Other requests\n // will then be on the queue. But if we fail to make workers then there\n // are pending requests.\n while (waitingForWorkerQueue.length) {\n const { src, type, resolve, reject } = waitingForWorkerQueue.shift();\n const data = isBlob(src) ? await readBlobAsUint8Array(src) : src;\n inflateRawLocal(data, type, resolve, reject);\n }\n}\nfunction setOptions$1(options) {\n config.workerURL = options.workerURL || config.workerURL;\n // there's no reason to set the workerURL if you're not going to use workers\n if (options.workerURL) {\n config.useWorkers = true;\n }\n config.useWorkers = options.useWorkers !== undefined ? options.useWorkers : config.useWorkers;\n config.numWorkers = options.numWorkers || config.numWorkers;\n}\n// It has to take non-zero time to put a large typed array in a Blob since the very\n// next instruction you could change the contents of the array. So, if you're reading\n// the zip file for images/video/audio then all you want is a Blob on which to get a URL.\n// so that operation of putting the data in a Blob should happen in the worker.\n//\n// Conversely if you want the data itself then you want an ArrayBuffer immediately\n// since the worker can transfer its ArrayBuffer zero copy.\n//\n// @param {Uint8Array|Blob} src\n// @param {number} uncompressedSize\n// @param {string} [type] falsy or mimeType string (eg: 'image/png')\n// @returns {ArrayBuffer|Blob} ArrayBuffer if type is falsy or Blob otherwise.\nfunction inflateRawAsync(src, uncompressedSize, type) {\n return new Promise((resolve, reject) => {\n // note: there is potential an expensive copy here. In order for the data\n // to make it into the worker we need to copy the data to the worker unless\n // it's a Blob or a SharedArrayBuffer.\n //\n // Solutions:\n //\n // 1. A minor enhancement, if `uncompressedSize` is small don't call the worker.\n //\n // might be a win period as their is overhead calling the worker\n //\n // 2. Move the entire library to the worker\n //\n // Good, Maybe faster if you pass a URL, Blob, or SharedArrayBuffer? Not sure about that\n // as those are also easy to transfer. Still slow if you pass an ArrayBuffer\n // as the ArrayBuffer has to be copied to the worker.\n //\n // I guess benchmarking is really the only thing to try.\n waitingForWorkerQueue.push({ src, uncompressedSize, type, resolve, reject, id: nextId++ });\n processWaitingForWorkerQueue();\n });\n}\nfunction clearArray(arr) {\n arr.splice(0, arr.length);\n}\nasync function cleanup$1() {\n for (const worker of workers) {\n await workerHelper.terminate(worker);\n }\n clearArray(workers);\n clearArray(availableWorkers);\n clearArray(waitingForWorkerQueue);\n currentlyProcessingIdToRequestMap.clear();\n numWorkers = 0;\n canUseWorkers = true;\n}\n\nfunction dosDateTimeToDate(date, time) {\n const day = date & 0x1f; // 1-31\n const month = (date >> 5 & 0xf) - 1; // 1-12, 0-11\n const year = (date >> 9 & 0x7f) + 1980; // 0-128, 1980-2108\n const millisecond = 0;\n const second = (time & 0x1f) * 2; // 0-29, 0-58 (even numbers)\n const minute = time >> 5 & 0x3f; // 0-59\n const hour = time >> 11 & 0x1f; // 0-23\n return new Date(year, month, day, hour, minute, second, millisecond);\n}\nclass ZipEntry {\n constructor(reader, rawEntry) {\n this._reader = reader;\n this._rawEntry = rawEntry;\n this.name = rawEntry.name;\n this.nameBytes = rawEntry.nameBytes;\n this.size = rawEntry.uncompressedSize;\n this.compressedSize = rawEntry.compressedSize;\n this.comment = rawEntry.comment;\n this.commentBytes = rawEntry.commentBytes;\n this.compressionMethod = rawEntry.compressionMethod;\n this.lastModDate = dosDateTimeToDate(rawEntry.lastModFileDate, rawEntry.lastModFileTime);\n this.isDirectory = rawEntry.uncompressedSize === 0 && rawEntry.name.endsWith('/');\n this.encrypted = !!(rawEntry.generalPurposeBitFlag & 0x1);\n this.externalFileAttributes = rawEntry.externalFileAttributes;\n this.versionMadeBy = rawEntry.versionMadeBy;\n }\n // returns a promise that returns a Blob for this entry\n async blob(type = 'application/octet-stream') {\n return await readEntryDataAsBlob(this._reader, this._rawEntry, type);\n }\n // returns a promise that returns an ArrayBuffer for this entry\n async arrayBuffer() {\n return await readEntryDataAsArrayBuffer(this._reader, this._rawEntry);\n }\n // returns text, assumes the text is valid utf8. If you want more options decode arrayBuffer yourself\n async text() {\n const buffer = await this.arrayBuffer();\n return decodeBuffer(new Uint8Array(buffer));\n }\n // returns text with JSON.parse called on it. If you want more options decode arrayBuffer yourself\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async json() {\n const text = await this.text();\n return JSON.parse(text);\n }\n}\nconst EOCDR_WITHOUT_COMMENT_SIZE = 22;\nconst MAX_COMMENT_SIZE = 0xffff; // 2-byte size\nconst EOCDR_SIGNATURE = 0x06054b50;\nconst ZIP64_EOCDR_SIGNATURE = 0x06064b50;\nasync function readAs(reader, offset, length) {\n return await reader.read(offset, length);\n}\n// The point of this function is we want to be able to pass the data\n// to a worker as fast as possible so when decompressing if the data\n// is already a blob and we can get a blob then get a blob.\n//\n// I'm not sure what a better way to refactor this is. We've got examples\n// of multiple readers. Ideally, for every type of reader we could ask\n// it, \"give me a type that is zero copy both locally and when sent to a worker\".\n//\n// The problem is the worker would also have to know the how to handle this\n// opaque type. I suppose the correct solution is to register different\n// reader handlers in the worker so BlobReader would register some\n// `handleZeroCopyType<BlobReader>`. At the moment I don't feel like\n// refactoring. As it is you just pass in an instance of the reader\n// but instead you'd have to register the reader and some how get the\n// source for the `handleZeroCopyType` handler function into the worker.\n// That sounds like a huge PITA, requiring you to put the implementation\n// in a separate file so the worker can load it or some other workaround\n// hack.\n//\n// For now this hack works even if it's not generic.\nasync function readAsBlobOrTypedArray(reader, offset, length, type) {\n if (reader.sliceAsBlob) {\n return await reader.sliceAsBlob(offset, length, type);\n }\n return await reader.read(offset, length);\n}\nconst crc = {\n unsigned() {\n return 0;\n },\n};\nfunction getUint16LE(uint8View, offset) {\n return uint8View[offset] +\n uint8View[offset + 1] * 0x100;\n}\nfunction getUint32LE(uint8View, offset) {\n return uint8View[offset] +\n uint8View[offset + 1] * 0x100 +\n uint8View[offset + 2] * 0x10000 +\n uint8View[offset + 3] * 0x1000000;\n}\nfunction getUint64LE(uint8View, offset) {\n return getUint32LE(uint8View, offset) +\n getUint32LE(uint8View, offset + 4) * 0x100000000;\n}\n// const decodeCP437 = (function() {\n// const cp437 = '\\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ';\n//\n// return function(uint8view) {\n// return Array.from(uint8view).map(v => cp437[v]).join('');\n// };\n// }());\nconst utf8Decoder = new TextDecoder();\nfunction decodeBuffer(uint8View, _isUTF8) {\n if (isSharedArrayBuffer(uint8View.buffer)) {\n uint8View = new Uint8Array(uint8View);\n }\n return utf8Decoder.decode(uint8View);\n /*\n AFAICT the UTF8 flat is not set so it's 100% up to the user\n to self decode if their file is not utf8 filenames\n return isUTF8\n ? utf8Decoder.decode(uint8View)\n : decodeCP437(uint8View);\n */\n}\nasync function findEndOfCentralDirector(reader, totalLength) {\n const size = Math.min(EOCDR_WITHOUT_COMMENT_SIZE + MAX_COMMENT_SIZE, totalLength);\n const readStart = totalLength - size;\n const data = await readAs(reader, readStart, size);\n for (let i = size - EOCDR_WITHOUT_COMMENT_SIZE; i >= 0; --i) {\n if (getUint32LE(data, i) !== EOCDR_SIGNATURE) {\n continue;\n }\n // 0 - End of central directory signature\n const eocdr = new Uint8Array(data.buffer, data.byteOffset + i, data.byteLength - i);\n // 4 - Number of this disk\n const diskNumber = getUint16LE(eocdr, 4);\n if (diskNumber !== 0) {\n throw new Error(`multi-volume zip files are not supported. This is volume: ${diskNumber}`);\n }\n // 6 - Disk where central directory starts\n // 8 - Number of central directory records on this disk\n // 10 - Total number of central directory records\n const entryCount = getUint16LE(eocdr, 10);\n // 12 - Size of central directory (bytes)\n const centralDirectorySize = getUint32LE(eocdr, 12);\n // 16 - Offset of start of central directory, relative to start of archive\n const centralDirectoryOffset = getUint32LE(eocdr, 16);\n // 20 - Comment length\n const commentLength = getUint16LE(eocdr, 20);\n const expectedCommentLength = eocdr.length - EOCDR_WITHOUT_COMMENT_SIZE;\n if (commentLength !== expectedCommentLength) {\n throw new Error(`invalid comment length. expected: ${expectedCommentLength}, actual: ${commentLength}`);\n }\n // 22 - Comment\n // the encoding is always cp437.\n const commentBytes = new Uint8Array(eocdr.buffer, eocdr.byteOffset + 22, commentLength);\n const comment = decodeBuffer(commentBytes);\n if (entryCount === 0xffff || centralDirectoryOffset === 0xffffffff) {\n return await readZip64CentralDirectory(reader, readStart + i, comment, commentBytes);\n }\n else {\n return await readEntries(reader, centralDirectoryOffset, centralDirectorySize, entryCount, comment, commentBytes);\n }\n }\n throw new Error('could not find end of central directory. maybe not zip file');\n}\nconst END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE = 0x07064b50;\nasync function readZip64CentralDirectory(reader, offset, comment, commentBytes) {\n // ZIP64 Zip64 end of central directory locator\n const zip64EocdlOffset = offset - 20;\n const eocdl = await readAs(reader, zip64EocdlOffset, 20);\n // 0 - zip64 end of central dir locator signature\n if (getUint32LE(eocdl, 0) !== END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE) {\n throw new Error('invalid zip64 end of central directory locator signature');\n }\n // 4 - number of the disk with the start of the zip64 end of central directory\n // 8 - relative offset of the zip64 end of central directory record\n const zip64EocdrOffset = getUint64LE(eocdl, 8);\n // 16 - total number of disks\n // ZIP64 end of central directory record\n const zip64Eocdr = await readAs(reader, zip64EocdrOffset, 56);\n // 0 - zip64 end of central dir signature 4 bytes (0x06064b50)\n if (getUint32LE(zip64Eocdr, 0) !== ZIP64_EOCDR_SIGNATURE) {\n throw new Error('invalid zip64 end of central directory record signature');\n }\n // 4 - size of zip64 end of central directory record 8 bytes\n // 12 - version made by 2 bytes\n // 14 - version needed to extract 2 bytes\n // 16 - number of this disk 4 bytes\n // 20 - number of the disk with the start of the central directory 4 bytes\n // 24 - total number of entries in the central directory on this disk 8 bytes\n // 32 - total number of entries in the central directory 8 bytes\n const entryCount = getUint64LE(zip64Eocdr, 32);\n // 40 - size of the central directory 8 bytes\n const centralDirectorySize = getUint64LE(zip64Eocdr, 40);\n // 48 - offset of start of central directory with respect to the starting disk number 8 bytes\n const centralDirectoryOffset = getUint64LE(zip64Eocdr, 48);\n // 56 - zip64 extensible data sector (variable size)\n return readEntries(reader, centralDirectoryOffset, centralDirectorySize, entryCount, comment, commentBytes);\n}\nconst CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE = 0x02014b50;\nasync function readEntries(reader, centralDirectoryOffset, centralDirectorySize, rawEntryCount, comment, commentBytes) {\n let readEntryCursor = 0;\n const allEntriesBuffer = await readAs(reader, centralDirectoryOffset, centralDirectorySize);\n const rawEntries = [];\n for (let e = 0; e < rawEntryCount; ++e) {\n const buffer = allEntriesBuffer.subarray(readEntryCursor, readEntryCursor + 46);\n // 0 - Central directory file header signature\n const signature = getUint32LE(buffer, 0);\n if (signature !== CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE) {\n throw new Error(`invalid central directory file header signature: 0x${signature.toString(16)}`);\n }\n const rawEntry = {\n // 4 - Version made by\n versionMadeBy: getUint16LE(buffer, 4),\n // 6 - Version needed to extract (minimum)\n versionNeededToExtract: getUint16LE(buffer, 6),\n // 8 - General purpose bit flag\n generalPurposeBitFlag: getUint16LE(buffer, 8),\n // 10 - Compression method\n compressionMethod: getUint16LE(buffer, 10),\n // 12 - File last modification time\n lastModFileTime: getUint16LE(buffer, 12),\n // 14 - File last modification date\n lastModFileDate: getUint16LE(buffer, 14),\n // 16 - CRC-32\n crc32: getUint32LE(buffer, 16),\n // 20 - Compressed size\n compressedSize: getUint32LE(buffer, 20),\n // 24 - Uncompressed size\n uncompressedSize: getUint32LE(buffer, 24),\n // 28 - File name length (n)\n fileNameLength: getUint16LE(buffer, 28),\n // 30 - Extra field length (m)\n extraFieldLength: getUint16LE(buffer, 30),\n // 32 - File comment length (k)\n fileCommentLength: getUint16LE(buffer, 32),\n // 34 - Disk number where file starts\n // 36 - Internal file attributes\n internalFileAttributes: getUint16LE(buffer, 36),\n // 38 - External file attributes\n externalFileAttributes: getUint32LE(buffer, 38),\n // 42 - Relative offset of local file header\n relativeOffsetOfLocalHeader: getUint32LE(buffer, 42),\n };\n if (rawEntry.generalPurposeBitFlag & 0x40) {\n throw new Error('strong encryption is not supported');\n }\n readEntryCursor += 46;\n const data = allEntriesBuffer.subarray(readEntryCursor, readEntryCursor + rawEntry.fileNameLength + rawEntry.extraFieldLength + rawEntry.fileCommentLength);\n // 46 - File name\n (rawEntry.generalPurposeBitFlag & 0x800) !== 0;\n rawEntry.nameBytes = data.slice(0, rawEntry.fileNameLength);\n rawEntry.name = decodeBuffer(rawEntry.nameBytes);\n // 46+n - Extra field\n const fileCommentStart = rawEntry.fileNameLength + rawEntry.extraFieldLength;\n const extraFieldBuffer = data.slice(rawEntry.fileNameLength, fileCommentStart);\n rawEntry.extraFields = [];\n let i = 0;\n while (i < extraFieldBuffer.length - 3) {\n const headerId = getUint16LE(extraFieldBuffer, i + 0);\n const dataSize = getUint16LE(extraFieldBuffer, i + 2);\n const dataStart = i + 4;\n const dataEnd = dataStart + dataSize;\n if (dataEnd > extraFieldBuffer.length) {\n throw new Error('extra field length exceeds extra field buffer size');\n }\n rawEntry.extraFields.push({\n id: headerId,\n data: extraFieldBuffer.slice(dataStart, dataEnd),\n });\n i = dataEnd;\n }\n // 46+n+m - File comment\n rawEntry.commentBytes = data.slice(fileCommentStart, fileCommentStart + rawEntry.fileCommentLength);\n rawEntry.comment = decodeBuffer(rawEntry.commentBytes);\n readEntryCursor += data.length;\n if (rawEntry.uncompressedSize === 0xffffffff ||\n rawEntry.compressedSize === 0xffffffff ||\n rawEntry.relativeOffsetOfLocalHeader === 0xffffffff) {\n // ZIP64 format\n // find the Zip64 Extended Information Extra Field\n const zip64ExtraField = rawEntry.extraFields.find(e => e.id === 0x0001);\n if (!zip64ExtraField) {\n throw new Error('expected zip64 extended information extra field');\n }\n const zip64EiefBuffer = zip64ExtraField.data;\n let index = 0;\n // 0 - Original Size 8 bytes\n if (rawEntry.uncompressedSize === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n throw new Error('zip64 extended information extra field does not include uncompressed size');\n }\n rawEntry.uncompressedSize = getUint64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 8 - Compressed Size 8 bytes\n if (rawEntry.compressedSize === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n throw new Error('zip64 extended information extra field does not include compressed size');\n }\n rawEntry.compressedSize = getUint64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 16 - Relative Header Offset 8 bytes\n if (rawEntry.relativeOffsetOfLocalHeader === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n throw new Error('zip64 extended information extra field does not include relative header offset');\n }\n rawEntry.relativeOffsetOfLocalHeader = getUint64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 24 - Disk Start Number 4 bytes\n }\n // check for Info-ZIP Unicode Path Extra Field (0x7075)\n // see https://github.com/thejoshwolfe/yauzl/issues/33\n const nameField = rawEntry.extraFields.find(e => e.id === 0x7075 &&\n e.data.length >= 6 && // too short to be meaningful\n e.data[0] === 1 && // Version 1 byte version of this extra field, currently 1\n getUint32LE(e.data, 1), crc.unsigned()); // NameCRC32 4 bytes File Name Field CRC32 Checksum\n // > If the CRC check fails, this UTF-8 Path Extra Field should be\n // > ignored and the File Name field in the header should be used instead.\n if (nameField) {\n // UnicodeName Variable UTF-8 version of the entry File Name\n rawEntry.fileName = decodeBuffer(nameField.data.slice(5));\n }\n // validate file size\n if (rawEntry.compressionMethod === 0) {\n let expectedCompressedSize = rawEntry.uncompressedSize;\n if ((rawEntry.generalPurposeBitFlag & 0x1) !== 0) {\n // traditional encryption prefixes the file data with a header\n expectedCompressedSize += 12;\n }\n if (rawEntry.compressedSize !== expectedCompressedSize) {\n throw new Error(`compressed size mismatch for stored file: ${rawEntry.compressedSize} != ${expectedCompressedSize}`);\n }\n }\n rawEntries.push(rawEntry);\n }\n const zip = {\n comment,\n commentBytes,\n };\n return {\n zip,\n entries: rawEntries.map(e => new ZipEntry(reader, e)),\n };\n}\nasync function readEntryDataHeader(reader, rawEntry) {\n if (rawEntry.generalPurposeBitFlag & 0x1) {\n throw new Error('encrypted entries not supported');\n }\n const buffer = await readAs(reader, rawEntry.relativeOffsetOfLocalHeader, 30);\n // note: maybe this should be passed in or cached on entry\n // as it's async so there will be at least one tick (not sure about that)\n const totalLength = await reader.getLength();\n // 0 - Local file header signature = 0x04034b50\n const signature = getUint32LE(buffer, 0);\n if (signature !== 0x04034b50) {\n throw new Error(`invalid local file header signature: 0x${signature.toString(16)}`);\n }\n // all this should be redundant\n // 4 - Version needed to extract (minimum)\n // 6 - General purpose bit flag\n // 8 - Compression method\n // 10 - File last modification time\n // 12 - File last modification date\n // 14 - CRC-32\n // 18 - Compressed size\n // 22 - Uncompressed size\n // 26 - File name length (n)\n const fileNameLength = getUint16LE(buffer, 26);\n // 28 - Extra field length (m)\n const extraFieldLength = getUint16LE(buffer, 28);\n // 30 - File name\n // 30+n - Extra field\n const localFileHeaderEnd = rawEntry.relativeOffsetOfLocalHeader + buffer.length + fileNameLength + extraFieldLength;\n let decompress;\n if (rawEntry.compressionMethod === 0) {\n // 0 - The file is stored (no compression)\n decompress = false;\n }\n else if (rawEntry.compressionMethod === 8) {\n // 8 - The file is Deflated\n decompress = true;\n }\n else {\n throw new Error(`unsupported compression method: ${rawEntry.compressionMethod}`);\n }\n const fileDataStart = localFileHeaderEnd;\n const fileDataEnd = fileDataStart + rawEntry.compressedSize;\n if (rawEntry.compressedSize !== 0) {\n // bounds check now, because the read streams will probably not complain loud enough.\n // since we're dealing with an unsigned offset plus an unsigned size,\n // we only have 1 thing to check for.\n if (fileDataEnd > totalLength) {\n throw new Error(`file data overflows file bounds: ${fileDataStart} + ${rawEntry.compressedSize} > ${totalLength}`);\n }\n }\n return {\n decompress,\n fileDataStart,\n };\n}\nasync function readEntryDataAsArrayBuffer(reader, rawEntry) {\n const { decompress, fileDataStart } = await readEntryDataHeader(reader, rawEntry);\n if (!decompress) {\n const dataView = await readAs(reader, fileDataStart, rawEntry.compressedSize);\n // make copy?\n //\n // 1. The source is a Blob/file. In this case we'll get back TypedArray we can just hand to the user\n // 2. The source is a TypedArray. In this case we'll get back TypedArray that is a view into a larger buffer\n // but because ultimately this is used to return an ArrayBuffer to `someEntry.arrayBuffer()`\n // we need to return copy since we need the `ArrayBuffer`, not the TypedArray to exactly match the data.\n // Note: We could add another API function `bytes()` or something that returned a `Uint8Array`\n // instead of an `ArrayBuffer`. This would let us skip a copy here. But this case only happens for uncompressed\n // data. That seems like a rare enough case that adding a new API is not worth it? Or is it? A zip of jpegs or mp3s\n // might not be compressed. For now that's a TBD.\n return isTypedArraySameAsArrayBuffer(dataView) ? dataView.buffer : dataView.slice().buffer;\n }\n // see comment in readEntryDateAsBlob\n const typedArrayOrBlob = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize);\n const result = await inflateRawAsync(typedArrayOrBlob instanceof Uint8Array ? typedArrayOrBlob : typedArrayOrBlob, rawEntry.uncompressedSize);\n return result;\n}\nasync function readEntryDataAsBlob(reader, rawEntry, type) {\n const { decompress, fileDataStart } = await readEntryDataHeader(reader, rawEntry);\n if (!decompress) {\n const typedArrayOrBlob = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize, type);\n if (isBlob(typedArrayOrBlob)) {\n return typedArrayOrBlob;\n }\n return new Blob([typedArrayOrBlob], { type });\n }\n // Here's the issue with this mess (should refactor?)\n // if the source is a blob then we really want to pass a blob to inflateRawAsync to avoid a large\n // copy if we're going to a worker.\n const typedArrayOrBlob = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize);\n const result = await inflateRawAsync(typedArrayOrBlob instanceof Uint8Array ? typedArrayOrBlob : typedArrayOrBlob, rawEntry.uncompressedSize, type);\n return result;\n}\nfunction setOptions(options) {\n setOptions$1(options);\n}\nasync function unzipRaw(source) {\n let reader;\n if (typeof Blob !== 'undefined' && source instanceof Blob) {\n reader = new BlobReader(source);\n }\n else if (source instanceof ArrayBuffer || (source && source.buffer && source.buffer instanceof ArrayBuffer)) {\n reader = new ArrayBufferReader(source);\n }\n else if (isSharedArrayBuffer(source) || isSharedArrayBuffer(source.buffer)) {\n reader = new ArrayBufferReader(source);\n }\n else if (typeof source === 'string') {\n const req = await fetch(source);\n if (!req.ok) {\n throw new Error(`failed http request ${source}, status: ${req.status}: ${req.statusText}`);\n }\n const blob = await req.blob();\n reader = new BlobReader(blob);\n }\n else if (typeof source.getLength === 'function' && typeof source.read === 'function') {\n reader = source;\n }\n else {\n throw new Error('unsupported source type');\n }\n const totalLength = await reader.getLength();\n if (totalLength > Number.MAX_SAFE_INTEGER) {\n throw new Error(`file too large. size: ${totalLength}. Only file sizes up 4503599627370496 bytes are supported`);\n }\n return await findEndOfCentralDirector(reader, totalLength);\n}\n// If the names are not utf8 you should use unzipitRaw\nasync function unzip(source) {\n const { zip, entries } = await unzipRaw(source);\n return {\n zip,\n entries: Object.fromEntries(entries.map(v => [v.name, v])),\n };\n}\nfunction cleanup() {\n cleanup$1();\n}\n\nexport { ArrayBufferReader, BlobReader, HTTPRangeReader, ZipEntry, cleanup, setOptions, unzip, unzipRaw };\n","import { useEffect, useRef, useState, useCallback } from 'react';\nimport lottie from 'lottie-web';\nimport type { AnimationItem } from 'lottie-web';\nimport { unzip } from 'unzipit';\n\ninterface UseDotLottieOptions {\n src: string;\n loop?: boolean;\n autoplay?: boolean;\n speed?: number;\n direction?: 1 | -1;\n backgroundColor?: string;\n onLoad?: () => void;\n onError?: (error: Error) => void;\n onComplete?: () => void;\n onLoopComplete?: () => void;\n onFrame?: (frame: number) => void;\n onEnterFrame?: (frame: number) => void;\n}\n\ninterface UseDotLottieReturn {\n play: () => void;\n pause: () => void;\n stop: () => void;\n goToFrame: (frame: number, isFrame?: boolean) => void;\n setSpeed: (speed: number) => void;\n setDirection: (direction: 1 | -1) => void;\n setSubframe: (useSubFrame: boolean) => void;\n getDuration: (inFrames?: boolean) => number;\n destroy: () => void;\n isLoaded: boolean;\n isPlaying: boolean;\n currentFrame: number;\n containerRef: React.RefObject<HTMLDivElement>;\n animationData: AnimationItem | null;\n}\n\nconst isLottieFile = (src: string): boolean => {\n const extension = src.split('.').pop()?.toLowerCase();\n return extension === 'lottie';\n};\n\nconst fetchAnimationData = async (src: string): Promise<object | string> => {\n if (isLottieFile(src)) {\n const { entries } = await unzip(src);\n \n let manifest = null;\n let animationData = null;\n \n for (const entry of Object.values(entries)) {\n const name = entry.name.toLowerCase();\n if (name === 'manifest.json') {\n manifest = await entry.json();\n } else if (name.endsWith('.json')) {\n animationData = await entry.json();\n }\n }\n \n if (manifest && animationData) {\n const animationUrl = (manifest as { animations?: Array<{ id: string; file: string }> }).animations?.[0]?.file;\n if (animationUrl) {\n for (const entry of Object.values(entries)) {\n if (entry.name === animationUrl) {\n return await entry.json();\n }\n }\n }\n }\n \n if (animationData) {\n return animationData;\n }\n \n throw new Error('Invalid .lottie file: no animation data found');\n }\n \n const response = await fetch(src);\n if (!response.ok) {\n throw new Error(`Failed to fetch animation: ${response.statusText}`);\n }\n \n const contentType = response.headers.get('content-type') || '';\n if (contentType.includes('application/json') || src.endsWith('.json')) {\n return await response.json();\n }\n \n return src;\n};\n\nexport function useDotLottie({\n src,\n loop = false,\n autoplay = true,\n speed = 1,\n direction = 1,\n backgroundColor = 'transparent',\n onLoad,\n onError,\n onComplete,\n onLoopComplete,\n onFrame,\n onEnterFrame,\n}: UseDotLottieOptions): UseDotLottieReturn {\n const containerRef = useRef<HTMLDivElement>(null);\n const animationRef = useRef<AnimationItem | null>(null);\n const [isLoaded, setIsLoaded] = useState(false);\n const [isPlaying, setIsPlaying] = useState(false);\n const [currentFrame, setCurrentFrame] = useState(0);\n const srcRef = useRef(src);\n const callbacksRef = useRef({ onLoad, onError, onComplete, onLoopComplete, onFrame, onEnterFrame });\n\n useEffect(() => {\n srcRef.current = src;\n }, [src]);\n\n useEffect(() => {\n callbacksRef.current = { onLoad, onError, onComplete, onLoopComplete, onFrame, onEnterFrame };\n }, [onLoad, onError, onComplete, onLoopComplete, onFrame, onEnterFrame]);\n\n useEffect(() => {\n if (!src || !containerRef.current) return;\n\n let animation: AnimationItem | null = null;\n let destroyed = false;\n\n const loadAnimation = async () => {\n try {\n if (destroyed) return;\n\n const animationData = await fetchAnimationData(srcRef.current);\n\n if (destroyed || !containerRef.current) return;\n\n if (animationRef.current) {\n animationRef.current.destroy();\n animationRef.current = null;\n }\n\n const config = {\n container: containerRef.current!,\n renderer: 'svg' as const,\n loop,\n autoplay: false,\n animationData,\n rendererSettings: {\n clearCanvas: true,\n contextCare: true,\n progressiveDraw: true,\n },\n };\n\n animation = lottie.loadAnimation(config as Parameters<typeof lottie.loadAnimation>[0]);\n animationRef.current = animation;\n\n animation.setSpeed(speed);\n animation.setDirection(direction);\n\n if (backgroundColor !== 'transparent') {\n const container = containerRef.current;\n if (container) {\n container.style.backgroundColor = backgroundColor;\n }\n }\n\n animation.addEventListener('DOMLoaded', () => {\n setIsLoaded(true);\n callbacksRef.current.onLoad?.();\n \n if (autoplay) {\n animation?.play();\n }\n });\n\n animation.addEventListener('complete', () => {\n setIsPlaying(false);\n callbacksRef.current.onComplete?.();\n });\n\n animation.addEventListener('loopComplete', () => {\n callbacksRef.current.onLoopComplete?.();\n });\n\n animation.addEventListener('enterFrame', (e) => {\n const frame = (e as { currentTime: number }).currentTime;\n setCurrentFrame(frame);\n callbacksRef.current.onFrame?.(frame);\n callbacksRef.current.onEnterFrame?.(frame);\n });\n\n animation.addEventListener('play' as any, () => {\n setIsPlaying(true);\n });\n\n animation.addEventListener('pause' as any, () => {\n setIsPlaying(false);\n });\n\n animation.addEventListener('stop' as any, () => {\n setIsPlaying(false);\n setCurrentFrame(0);\n });\n\n } catch (error) {\n callbacksRef.current.onError?.(error as Error);\n }\n };\n\n loadAnimation();\n\n return () => {\n destroyed = true;\n animation?.destroy();\n animationRef.current = null;\n setIsLoaded(false);\n setIsPlaying(false);\n };\n }, [src, loop, speed, direction, backgroundColor, autoplay]);\n\n const play = useCallback(() => {\n animationRef.current?.play();\n }, []);\n\n const pause = useCallback(() => {\n animationRef.current?.pause();\n }, []);\n\n const stop = useCallback(() => {\n animationRef.current?.stop();\n }, []);\n\n const goToFrame = useCallback((frame: number, isFrame = true) => {\n animationRef.current?.goToAndStop(frame, isFrame);\n }, []);\n\n const setSpeed = useCallback((newSpeed: number) => {\n animationRef.current?.setSpeed(newSpeed);\n }, []);\n\n const setDirection = useCallback((newDirection: 1 | -1) => {\n animationRef.current?.setDirection(newDirection);\n }, []);\n\n const setSubframe = useCallback((useSubFrame: boolean) => {\n animationRef.current?.setSubframe(useSubFrame);\n }, []);\n\n const getDuration = useCallback((inFrames = false) => {\n const anim = animationRef.current;\n if (!anim) return 0;\n return anim.getDuration(inFrames);\n }, []);\n\n const destroy = useCallback(() => {\n animationRef.current?.destroy();\n animationRef.current = null;\n setIsLoaded(false);\n setIsPlaying(false);\n setCurrentFrame(0);\n }, []);\n\n return {\n play,\n pause,\n stop,\n goToFrame,\n setSpeed,\n setDirection,\n setSubframe,\n getDuration,\n destroy,\n isLoaded,\n isPlaying,\n currentFrame,\n containerRef,\n animationData: animationRef.current,\n };\n}\n","import React, { forwardRef } from 'react';\nimport { useDotLottie } from '../hooks/useDotLottie';\nimport type { DotLottiePlayerProps } from '../types';\n\nexport const DotLottiePlayer = forwardRef<HTMLDivElement, DotLottiePlayerProps>(\n (\n {\n src,\n loop = false,\n autoplay = true,\n speed = 1,\n direction = 1,\n backgroundColor = 'transparent',\n id,\n className,\n style,\n onLoad,\n onError,\n onComplete,\n onLoopComplete,\n onFrame,\n onEnterFrame,\n },\n ref\n ) => {\n const { containerRef } = useDotLottie({\n src,\n loop,\n autoplay,\n speed,\n direction,\n backgroundColor,\n onLoad,\n onError,\n onComplete,\n onLoopComplete,\n onFrame,\n onEnterFrame,\n });\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n id={id}\n className={className}\n style={{\n width: '100%',\n height: '100%',\n ...style,\n }}\n />\n );\n }\n);\n\nDotLottiePlayer.displayName = 'DotLottiePlayer';\n"],"names":["factory","document","navigator","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","value","getLocationHref","createTag","type","createElement","extendPrototype","sources","destination","i","sourcePrototype","len","length","attr","prototype","Object","hasOwnProperty","call","getDescriptor","object","prop","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","this","audios","_volume","_isMuted","addAudio","audio","push","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","Array","apply","_typeof$6","o","Symbol","iterator","constructor","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","test","userAgent","bmPow","Math","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","max","bmMin","min","BMMath","propertyNames","random","abs","val","absArr","defaultCurveSegments","degToRads","PI","roundCorner","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","createElementID","_count","HSVtoRGB","h","s","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","toString","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","data","_workerSelf","setupWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","createWorker","e","completeLayers","layers","comps","layerData","j","jLen","k","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","id","comp","findComp","__used","JSON","parse","stringify","ks","it","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","updateTextLayer","textLayer","documentData","iterateLayers","animationData","assets","checkChars","chars","charData","ip","op","st","sr","a","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","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","splice","markerParser","parsePayloadLines","line","lines","keys","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","name","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","key","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","undefined","parseInt","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","round","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","index","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","concat","slice","getElementsByClassName","lenAnims","setAttribute","body","getElementsByTagName","innerText","div","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","str","replace","beziers","bezEasing","BezierEasing","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","get","x","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","double","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","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","y","n","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","values","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","getValue","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","props","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","m","translate","tx","tz","transform","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","lottie","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","exports","bodymovin","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","pop","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","root","filter","p10","p11","p20","p21","bounds","bottom","other","shapeSegmentInverted","pointsType","count","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","emptyChar","w","size","combinedCharacters","BLACK_FLAG_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","forEach","cache","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","localTransforms","renderLocalTransform","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","source","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","_i","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","obj","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","add","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","String","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","stack","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","buffer","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","item","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","defineProperty","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","global","rngname","startdenom","significance","ARC4","keylen","me","S","copy","flatten","result","typ","mixkey","seed","smear","stringseed","tostring","options","shortseed","entropy","Uint8Array","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","mod","$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","_name","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","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","defaultInterfaceFactory","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","symbol","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","module","_a","_b","readBlobAsArrayBuffer","arrayBuffer","Promise","resolve","reject","reader","FileReader","readAsArrayBuffer","async","readBlobAsUint8Array","isBlob","isSharedArrayBuffer","SharedArrayBuffer","isTypedArraySameAsArrayBuffer","typedArray","byteOffset","byteLength","versions","electron","ArrayBufferReader","arrayBufferOrView","ArrayBuffer","getLength","read","BlobReader","sliceAsBlob","nextId","waitingForWorkerQueue","decompressRaw","ds","DecompressionStream","writer","writable","getWriter","write","then","close","catch","chunks","readable","getReader","done","reduce","chunk","set","inflateRawLocal","dst","processWaitingForWorkerQueue","inflateRawAsync","uncompressedSize","dosDateTimeToDate","date","ZipEntry","rawEntry","_reader","_rawEntry","nameBytes","compressedSize","comment","commentBytes","compressionMethod","lastModDate","lastModFileDate","lastModFileTime","isDirectory","endsWith","encrypted","generalPurposeBitFlag","externalFileAttributes","versionMadeBy","readEntryDataAsBlob","readEntryDataAsArrayBuffer","decodeBuffer","json","EOCDR_WITHOUT_COMMENT_SIZE","MAX_COMMENT_SIZE","EOCDR_SIGNATURE","ZIP64_EOCDR_SIGNATURE","readAs","readAsBlobOrTypedArray","crc","unsigned","getUint16LE","uint8View","getUint32LE","getUint64LE","utf8Decoder","TextDecoder","_isUTF8","decode","findEndOfCentralDirector","readStart","eocdr","diskNumber","entryCount","centralDirectorySize","centralDirectoryOffset","commentLength","expectedCommentLength","readZip64CentralDirectory","readEntries","END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE","zip64EocdlOffset","eocdl","zip64EocdrOffset","zip64Eocdr","CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE","rawEntryCount","readEntryCursor","allEntriesBuffer","rawEntries","subarray","signature","versionNeededToExtract","crc32","fileNameLength","extraFieldLength","fileCommentLength","internalFileAttributes","relativeOffsetOfLocalHeader","fileCommentStart","extraFieldBuffer","extraFields","headerId","dataStart","dataEnd","zip64ExtraField","find","zip64EiefBuffer","nameField","expectedCompressedSize","zip","entries","map","readEntryDataHeader","localFileHeaderEnd","decompress","fileDataStart","fileDataEnd","dataView","typedArrayOrBlob","unzipRaw","req","ok","statusText","MAX_SAFE_INTEGER","unzip","fromEntries","isLottieFile","extension","fetchAnimationData","manifest","entry","animationUrl","file","headers","includes","useDotLottie","onLoad","onFrame","containerRef","useRef","animationRef","useState","setIsPlaying","setCurrentFrame","srcRef","callbacksRef","useEffect","contextCare","progressiveDraw","frame","useCallback","goToFrame","newSpeed","newDirection","useSubFrame","inFrames","DotLottiePlayer","forwardRef","ref","_jsx","displayName"],"mappings":"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","x_google_ignoreList":[0,1]}