{"version":3,"sources":["jsdelivr-header.js","/npm/@evanhahn/lottie-web-light@5.8.1/index.js"],"names":[],"mappings":"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","file":"/npm/@evanhahn/lottie-web-light@5.8.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@evanhahn/lottie-web-light@5.8.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(typeof navigator !== \"undefined\") && (function(root, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define(function() {\n            return factory(root);\n        });\n    } else if (typeof module === \"object\" && module.exports) {\n        module.exports = factory(root);\n    } else {\n        root.lottie = factory(root);\n        root.bodymovin = root.lottie;\n    }\n}((window || {}), function(window) {\n\t/* global locationHref:writable, animationManager, subframeEnabled:writable, defaultCurveSegments:writable, roundValues,\r\nexpressionsPlugin:writable, PropertyFactory, ShapePropertyFactory, Matrix, idPrefix:writable, _useWebWorker:writable */\r\n/* exported locationHref, subframeEnabled, expressionsPlugin, idPrefix, _useWebWorker */\r\n\r\n'use strict';\r\n\r\n/* exported svgNS, locationHref, initialDefaultFrame, _useWebWorker */\r\n\r\nvar svgNS = 'http://www.w3.org/2000/svg';\r\n\r\nvar locationHref = '';\r\n\r\nvar initialDefaultFrame = -999999;\r\n\r\nvar _useWebWorker = false;\r\n\r\n/* global createSizedArray */\r\n/* exported subframeEnabled, expressionsPlugin, isSafari, cachedColors, bmPow, bmSqrt, bmFloor, bmMax, bmMin, ProjectInterface,\r\ndefaultCurveSegments, degToRads, roundCorner, bmRnd, styleDiv, BMEnterFrameEvent, BMCompleteEvent, BMCompleteLoopEvent,\r\nBMSegmentStartEvent, BMDestroyEvent, BMRenderFrameErrorEvent, BMConfigErrorEvent, BMAnimationConfigErrorEvent, createElementID,\r\naddSaturationToRGB, addBrightnessToRGB, addHueToRGB, rgbToHex */\r\n\r\nvar subframeEnabled = true;\r\nvar idPrefix = '';\r\nvar expressionsPlugin;\r\nvar isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\nvar cachedColors = {};\r\nvar bmRnd;\r\nvar bmPow = Math.pow;\r\nvar bmSqrt = Math.sqrt;\r\nvar bmFloor = Math.floor;\r\nvar bmMax = Math.max;\r\nvar bmMin = Math.min;\r\n\r\nvar BMMath = {};\r\n(function () {\r\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'];\r\n  var i;\r\n  var len = propertyNames.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    BMMath[propertyNames[i]] = Math[propertyNames[i]];\r\n  }\r\n}());\r\n\r\nfunction ProjectInterface() { return {}; }\r\n\r\nBMMath.random = Math.random;\r\nBMMath.abs = function (val) {\r\n  var tOfVal = typeof val;\r\n  if (tOfVal === 'object' && val.length) {\r\n    var absArr = createSizedArray(val.length);\r\n    var i;\r\n    var len = val.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      absArr[i] = Math.abs(val[i]);\r\n    }\r\n    return absArr;\r\n  }\r\n  return Math.abs(val);\r\n};\r\nvar defaultCurveSegments = 150;\r\nvar degToRads = Math.PI / 180;\r\nvar roundCorner = 0.5519;\r\n\r\nfunction roundValues(flag) {\r\n  if (flag) {\r\n    bmRnd = Math.round;\r\n  } else {\r\n    bmRnd = function (val) {\r\n      return val;\r\n    };\r\n  }\r\n}\r\nroundValues(false);\r\n\r\nfunction styleDiv(element) {\r\n  element.style.position = 'absolute';\r\n  element.style.top = 0;\r\n  element.style.left = 0;\r\n  element.style.display = 'block';\r\n  element.style.transformOrigin = '0 0';\r\n  element.style.webkitTransformOrigin = '0 0';\r\n  element.style.backfaceVisibility = 'visible';\r\n  element.style.webkitBackfaceVisibility = 'visible';\r\n  element.style.transformStyle = 'preserve-3d';\r\n  element.style.webkitTransformStyle = 'preserve-3d';\r\n  element.style.mozTransformStyle = 'preserve-3d';\r\n}\r\n\r\nfunction BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\r\n  this.type = type;\r\n  this.currentTime = currentTime;\r\n  this.totalTime = totalTime;\r\n  this.direction = frameMultiplier < 0 ? -1 : 1;\r\n}\r\n\r\nfunction BMCompleteEvent(type, frameMultiplier) {\r\n  this.type = type;\r\n  this.direction = frameMultiplier < 0 ? -1 : 1;\r\n}\r\n\r\nfunction BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\r\n  this.type = type;\r\n  this.currentLoop = currentLoop;\r\n  this.totalLoops = totalLoops;\r\n  this.direction = frameMultiplier < 0 ? -1 : 1;\r\n}\r\n\r\nfunction BMSegmentStartEvent(type, firstFrame, totalFrames) {\r\n  this.type = type;\r\n  this.firstFrame = firstFrame;\r\n  this.totalFrames = totalFrames;\r\n}\r\n\r\nfunction BMDestroyEvent(type, target) {\r\n  this.type = type;\r\n  this.target = target;\r\n}\r\n\r\nfunction BMRenderFrameErrorEvent(nativeError, currentTime) {\r\n  this.type = 'renderFrameError';\r\n  this.nativeError = nativeError;\r\n  this.currentTime = currentTime;\r\n}\r\n\r\nfunction BMConfigErrorEvent(nativeError) {\r\n  this.type = 'configError';\r\n  this.nativeError = nativeError;\r\n}\r\n\r\nfunction BMAnimationConfigErrorEvent(type, nativeError) {\r\n  this.type = type;\r\n  this.nativeError = nativeError;\r\n}\r\n\r\nvar createElementID = (function () {\r\n  var _count = 0;\r\n  return function createID() {\r\n    _count += 1;\r\n    return idPrefix + '__lottie_element_' + _count;\r\n  };\r\n}());\r\n\r\nfunction HSVtoRGB(h, s, v) {\r\n  var r;\r\n  var g;\r\n  var b;\r\n  var i;\r\n  var f;\r\n  var p;\r\n  var q;\r\n  var t;\r\n  i = Math.floor(h * 6);\r\n  f = h * 6 - i;\r\n  p = v * (1 - s);\r\n  q = v * (1 - f * s);\r\n  t = v * (1 - (1 - f) * s);\r\n  switch (i % 6) {\r\n    case 0: r = v; g = t; b = p; break;\r\n    case 1: r = q; g = v; b = p; break;\r\n    case 2: r = p; g = v; b = t; break;\r\n    case 3: r = p; g = q; b = v; break;\r\n    case 4: r = t; g = p; b = v; break;\r\n    case 5: r = v; g = p; b = q; break;\r\n    default: break;\r\n  }\r\n  return [r,\r\n    g,\r\n    b];\r\n}\r\n\r\nfunction RGBtoHSV(r, g, b) {\r\n  var max = Math.max(r, g, b);\r\n  var min = Math.min(r, g, b);\r\n  var d = max - min;\r\n  var h;\r\n  var s = (max === 0 ? 0 : d / max);\r\n  var v = max / 255;\r\n\r\n  switch (max) {\r\n    case min: h = 0; break;\r\n    case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break;\r\n    case g: h = (b - r) + d * 2; h /= 6 * d; break;\r\n    case b: h = (r - g) + d * 4; h /= 6 * d; break;\r\n    default: break;\r\n  }\r\n\r\n  return [\r\n    h,\r\n    s,\r\n    v,\r\n  ];\r\n}\r\n\r\nfunction addSaturationToRGB(color, offset) {\r\n  var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n  hsv[1] += offset;\r\n  if (hsv[1] > 1) {\r\n    hsv[1] = 1;\r\n  } else if (hsv[1] <= 0) {\r\n    hsv[1] = 0;\r\n  }\r\n  return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n}\r\n\r\nfunction addBrightnessToRGB(color, offset) {\r\n  var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n  hsv[2] += offset;\r\n  if (hsv[2] > 1) {\r\n    hsv[2] = 1;\r\n  } else if (hsv[2] < 0) {\r\n    hsv[2] = 0;\r\n  }\r\n  return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n}\r\n\r\nfunction addHueToRGB(color, offset) {\r\n  var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n  hsv[0] += offset / 360;\r\n  if (hsv[0] > 1) {\r\n    hsv[0] -= 1;\r\n  } else if (hsv[0] < 0) {\r\n    hsv[0] += 1;\r\n  }\r\n  return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n}\r\n\r\nvar rgbToHex = (function () {\r\n  var colorMap = [];\r\n  var i;\r\n  var hex;\r\n  for (i = 0; i < 256; i += 1) {\r\n    hex = i.toString(16);\r\n    colorMap[i] = hex.length === 1 ? '0' + hex : hex;\r\n  }\r\n\r\n  return function (r, g, b) {\r\n    if (r < 0) {\r\n      r = 0;\r\n    }\r\n    if (g < 0) {\r\n      g = 0;\r\n    }\r\n    if (b < 0) {\r\n      b = 0;\r\n    }\r\n    return '#' + colorMap[r] + colorMap[g] + colorMap[b];\r\n  };\r\n}());\r\n\r\nfunction BaseEvent() {}\r\nBaseEvent.prototype = {\r\n  triggerEvent: function (eventName, args) {\r\n    if (this._cbs[eventName]) {\r\n      var callbacks = this._cbs[eventName];\r\n      for (var i = 0; i < callbacks.length; i += 1) {\r\n        callbacks[i](args);\r\n      }\r\n    }\r\n  },\r\n  addEventListener: function (eventName, callback) {\r\n    if (!this._cbs[eventName]) {\r\n      this._cbs[eventName] = [];\r\n    }\r\n    this._cbs[eventName].push(callback);\r\n\r\n    return function () {\r\n      this.removeEventListener(eventName, callback);\r\n    }.bind(this);\r\n  },\r\n  removeEventListener: function (eventName, callback) {\r\n    if (!callback) {\r\n      this._cbs[eventName] = null;\r\n    } else if (this._cbs[eventName]) {\r\n      var i = 0;\r\n      var len = this._cbs[eventName].length;\r\n      while (i < len) {\r\n        if (this._cbs[eventName][i] === callback) {\r\n          this._cbs[eventName].splice(i, 1);\r\n          i -= 1;\r\n          len -= 1;\r\n        }\r\n        i += 1;\r\n      }\r\n      if (!this._cbs[eventName].length) {\r\n        this._cbs[eventName] = null;\r\n      }\r\n    }\r\n  },\r\n};\r\n\r\n/* exported createTypedArray, createSizedArray */\r\n\r\nvar createTypedArray = (function () {\r\n  function createRegularArray(type, len) {\r\n    var i = 0;\r\n    var arr = [];\r\n    var value;\r\n    switch (type) {\r\n      case 'int16':\r\n      case 'uint8c':\r\n        value = 1;\r\n        break;\r\n      default:\r\n        value = 1.1;\r\n        break;\r\n    }\r\n    for (i = 0; i < len; i += 1) {\r\n      arr.push(value);\r\n    }\r\n    return arr;\r\n  }\r\n  function createTypedArrayFactory(type, len) {\r\n    if (type === 'float32') {\r\n      return new Float32Array(len);\r\n    } if (type === 'int16') {\r\n      return new Int16Array(len);\r\n    } if (type === 'uint8c') {\r\n      return new Uint8ClampedArray(len);\r\n    }\r\n    return createRegularArray(type, len);\r\n  }\r\n  if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\r\n    return createTypedArrayFactory;\r\n  }\r\n  return createRegularArray;\r\n}());\r\n\r\nfunction createSizedArray(len) {\r\n  return Array.apply(null, { length: len });\r\n}\r\n\r\n/* global svgNS */\r\n/* exported createNS */\r\n\r\nfunction createNS(type) {\r\n  // return {appendChild:function(){},setAttribute:function(){},style:{}}\r\n  return document.createElementNS(svgNS, type);\r\n}\r\n\r\n/* exported createTag */\r\n\r\nfunction createTag(type) {\r\n  // return {appendChild:function(){},setAttribute:function(){},style:{}}\r\n  return document.createElement(type);\r\n}\r\n\r\nfunction DynamicPropertyContainer() {}\r\nDynamicPropertyContainer.prototype = {\r\n  addDynamicProperty: function (prop) {\r\n    if (this.dynamicProperties.indexOf(prop) === -1) {\r\n      this.dynamicProperties.push(prop);\r\n      this.container.addDynamicProperty(this);\r\n      this._isAnimated = true;\r\n    }\r\n  },\r\n  iterateDynamicProperties: function () {\r\n    this._mdf = false;\r\n    var i;\r\n    var len = this.dynamicProperties.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      this.dynamicProperties[i].getValue();\r\n      if (this.dynamicProperties[i]._mdf) {\r\n        this._mdf = true;\r\n      }\r\n    }\r\n  },\r\n  initDynamicPropertyContainer: function (container) {\r\n    this.container = container;\r\n    this.dynamicProperties = [];\r\n    this._mdf = false;\r\n    this._isAnimated = false;\r\n  },\r\n};\r\n\r\n/* exported getBlendMode */\r\n\r\nvar getBlendMode = (function () {\r\n  var blendModeEnums = {\r\n    0: 'source-over',\r\n    1: 'multiply',\r\n    2: 'screen',\r\n    3: 'overlay',\r\n    4: 'darken',\r\n    5: 'lighten',\r\n    6: 'color-dodge',\r\n    7: 'color-burn',\r\n    8: 'hard-light',\r\n    9: 'soft-light',\r\n    10: 'difference',\r\n    11: 'exclusion',\r\n    12: 'hue',\r\n    13: 'saturation',\r\n    14: 'color',\r\n    15: 'luminosity',\r\n  };\r\n\r\n  return function (mode) {\r\n    return blendModeEnums[mode] || '';\r\n  };\r\n}());\r\n\r\n/* exported lineCapEnum, lineJoinEnum */\r\n\r\nvar lineCapEnum = {\r\n  1: 'butt',\r\n  2: 'round',\r\n  3: 'square',\r\n};\r\n\r\nvar lineJoinEnum = {\r\n  1: 'miter',\r\n  2: 'round',\r\n  3: 'bevel',\r\n};\r\n\r\n/* global createTypedArray */\r\n\r\n/*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\r\n\r\n/**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\r\n\r\nvar Matrix = (function () {\r\n  var _cos = Math.cos;\r\n  var _sin = Math.sin;\r\n  var _tan = Math.tan;\r\n  var _rnd = Math.round;\r\n\r\n  function reset() {\r\n    this.props[0] = 1;\r\n    this.props[1] = 0;\r\n    this.props[2] = 0;\r\n    this.props[3] = 0;\r\n    this.props[4] = 0;\r\n    this.props[5] = 1;\r\n    this.props[6] = 0;\r\n    this.props[7] = 0;\r\n    this.props[8] = 0;\r\n    this.props[9] = 0;\r\n    this.props[10] = 1;\r\n    this.props[11] = 0;\r\n    this.props[12] = 0;\r\n    this.props[13] = 0;\r\n    this.props[14] = 0;\r\n    this.props[15] = 1;\r\n    return this;\r\n  }\r\n\r\n  function rotate(angle) {\r\n    if (angle === 0) {\r\n      return this;\r\n    }\r\n    var mCos = _cos(angle);\r\n    var mSin = _sin(angle);\r\n    return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n  }\r\n\r\n  function rotateX(angle) {\r\n    if (angle === 0) {\r\n      return this;\r\n    }\r\n    var mCos = _cos(angle);\r\n    var mSin = _sin(angle);\r\n    return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\r\n  }\r\n\r\n  function rotateY(angle) {\r\n    if (angle === 0) {\r\n      return this;\r\n    }\r\n    var mCos = _cos(angle);\r\n    var mSin = _sin(angle);\r\n    return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\r\n  }\r\n\r\n  function rotateZ(angle) {\r\n    if (angle === 0) {\r\n      return this;\r\n    }\r\n    var mCos = _cos(angle);\r\n    var mSin = _sin(angle);\r\n    return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n  }\r\n\r\n  function shear(sx, sy) {\r\n    return this._t(1, sy, sx, 1, 0, 0);\r\n  }\r\n\r\n  function skew(ax, ay) {\r\n    return this.shear(_tan(ax), _tan(ay));\r\n  }\r\n\r\n  function skewFromAxis(ax, angle) {\r\n    var mCos = _cos(angle);\r\n    var mSin = _sin(angle);\r\n    return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\r\n      ._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\r\n      ._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\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);\r\n  }\r\n\r\n  function scale(sx, sy, sz) {\r\n    if (!sz && sz !== 0) {\r\n      sz = 1;\r\n    }\r\n    if (sx === 1 && sy === 1 && sz === 1) {\r\n      return this;\r\n    }\r\n    return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\r\n  }\r\n\r\n  function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\r\n    this.props[0] = a;\r\n    this.props[1] = b;\r\n    this.props[2] = c;\r\n    this.props[3] = d;\r\n    this.props[4] = e;\r\n    this.props[5] = f;\r\n    this.props[6] = g;\r\n    this.props[7] = h;\r\n    this.props[8] = i;\r\n    this.props[9] = j;\r\n    this.props[10] = k;\r\n    this.props[11] = l;\r\n    this.props[12] = m;\r\n    this.props[13] = n;\r\n    this.props[14] = o;\r\n    this.props[15] = p;\r\n    return this;\r\n  }\r\n\r\n  function translate(tx, ty, tz) {\r\n    tz = tz || 0;\r\n    if (tx !== 0 || ty !== 0 || tz !== 0) {\r\n      return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\r\n    var _p = this.props;\r\n\r\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) {\r\n      // NOTE: commenting this condition because TurboFan deoptimizes code when present\r\n      // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\r\n      _p[12] = _p[12] * a2 + _p[15] * m2;\r\n      _p[13] = _p[13] * f2 + _p[15] * n2;\r\n      _p[14] = _p[14] * k2 + _p[15] * o2;\r\n      _p[15] *= p2;\r\n      // }\r\n      this._identityCalculated = false;\r\n      return this;\r\n    }\r\n\r\n    var a1 = _p[0];\r\n    var b1 = _p[1];\r\n    var c1 = _p[2];\r\n    var d1 = _p[3];\r\n    var e1 = _p[4];\r\n    var f1 = _p[5];\r\n    var g1 = _p[6];\r\n    var h1 = _p[7];\r\n    var i1 = _p[8];\r\n    var j1 = _p[9];\r\n    var k1 = _p[10];\r\n    var l1 = _p[11];\r\n    var m1 = _p[12];\r\n    var n1 = _p[13];\r\n    var o1 = _p[14];\r\n    var p1 = _p[15];\r\n\r\n    /* matrix order (canvas compatible):\r\n         * ace\r\n         * bdf\r\n         * 001\r\n         */\r\n    _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\r\n    _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\r\n    _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\r\n    _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\r\n\r\n    _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\r\n    _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\r\n    _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\r\n    _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\r\n\r\n    _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\r\n    _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\r\n    _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\r\n    _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\r\n\r\n    _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\r\n    _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\r\n    _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\r\n    _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\r\n\r\n    this._identityCalculated = false;\r\n    return this;\r\n  }\r\n\r\n  function isIdentity() {\r\n    if (!this._identityCalculated) {\r\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);\r\n      this._identityCalculated = true;\r\n    }\r\n    return this._identity;\r\n  }\r\n\r\n  function equals(matr) {\r\n    var i = 0;\r\n    while (i < 16) {\r\n      if (matr.props[i] !== this.props[i]) {\r\n        return false;\r\n      }\r\n      i += 1;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  function clone(matr) {\r\n    var i;\r\n    for (i = 0; i < 16; i += 1) {\r\n      matr.props[i] = this.props[i];\r\n    }\r\n    return matr;\r\n  }\r\n\r\n  function cloneFromProps(props) {\r\n    var i;\r\n    for (i = 0; i < 16; i += 1) {\r\n      this.props[i] = props[i];\r\n    }\r\n  }\r\n\r\n  function applyToPoint(x, y, z) {\r\n    return {\r\n      x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\r\n      y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\r\n      z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14],\r\n    };\r\n    /* return {\r\n         x: x * me.a + y * me.c + me.e,\r\n         y: x * me.b + y * me.d + me.f\r\n         }; */\r\n  }\r\n  function applyToX(x, y, z) {\r\n    return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\r\n  }\r\n  function applyToY(x, y, z) {\r\n    return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\r\n  }\r\n  function applyToZ(x, y, z) {\r\n    return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\r\n  }\r\n\r\n  function getInverseMatrix() {\r\n    var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\r\n    var a = this.props[5] / determinant;\r\n    var b = -this.props[1] / determinant;\r\n    var c = -this.props[4] / determinant;\r\n    var d = this.props[0] / determinant;\r\n    var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\r\n    var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\r\n    var inverseMatrix = new Matrix();\r\n    inverseMatrix.props[0] = a;\r\n    inverseMatrix.props[1] = b;\r\n    inverseMatrix.props[4] = c;\r\n    inverseMatrix.props[5] = d;\r\n    inverseMatrix.props[12] = e;\r\n    inverseMatrix.props[13] = f;\r\n    return inverseMatrix;\r\n  }\r\n\r\n  function inversePoint(pt) {\r\n    var inverseMatrix = this.getInverseMatrix();\r\n    return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\r\n  }\r\n\r\n  function inversePoints(pts) {\r\n    var i;\r\n    var len = pts.length;\r\n    var retPts = [];\r\n    for (i = 0; i < len; i += 1) {\r\n      retPts[i] = inversePoint(pts[i]);\r\n    }\r\n    return retPts;\r\n  }\r\n\r\n  function applyToTriplePoints(pt1, pt2, pt3) {\r\n    var arr = createTypedArray('float32', 6);\r\n    if (this.isIdentity()) {\r\n      arr[0] = pt1[0];\r\n      arr[1] = pt1[1];\r\n      arr[2] = pt2[0];\r\n      arr[3] = pt2[1];\r\n      arr[4] = pt3[0];\r\n      arr[5] = pt3[1];\r\n    } else {\r\n      var p0 = this.props[0];\r\n      var p1 = this.props[1];\r\n      var p4 = this.props[4];\r\n      var p5 = this.props[5];\r\n      var p12 = this.props[12];\r\n      var p13 = this.props[13];\r\n      arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\r\n      arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\r\n      arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\r\n      arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\r\n      arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\r\n      arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\r\n    }\r\n    return arr;\r\n  }\r\n\r\n  function applyToPointArray(x, y, z) {\r\n    var arr;\r\n    if (this.isIdentity()) {\r\n      arr = [x, y, z];\r\n    } else {\r\n      arr = [\r\n        x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\r\n        x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\r\n        x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14],\r\n      ];\r\n    }\r\n    return arr;\r\n  }\r\n\r\n  function applyToPointStringified(x, y) {\r\n    if (this.isIdentity()) {\r\n      return x + ',' + y;\r\n    }\r\n    var _p = this.props;\r\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;\r\n  }\r\n\r\n  function toCSS() {\r\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.\r\n    /* if(this.isIdentity()) {\r\n            return '';\r\n        } */\r\n    var i = 0;\r\n    var props = this.props;\r\n    var cssValue = 'matrix3d(';\r\n    var v = 10000;\r\n    while (i < 16) {\r\n      cssValue += _rnd(props[i] * v) / v;\r\n      cssValue += i === 15 ? ')' : ',';\r\n      i += 1;\r\n    }\r\n    return cssValue;\r\n  }\r\n\r\n  function roundMatrixProperty(val) {\r\n    var v = 10000;\r\n    if ((val < 0.000001 && val > 0) || (val > -0.000001 && val < 0)) {\r\n      return _rnd(val * v) / v;\r\n    }\r\n    return val;\r\n  }\r\n\r\n  function to2dCSS() {\r\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.\r\n    /* if(this.isIdentity()) {\r\n            return '';\r\n        } */\r\n    var props = this.props;\r\n    var _a = roundMatrixProperty(props[0]);\r\n    var _b = roundMatrixProperty(props[1]);\r\n    var _c = roundMatrixProperty(props[4]);\r\n    var _d = roundMatrixProperty(props[5]);\r\n    var _e = roundMatrixProperty(props[12]);\r\n    var _f = roundMatrixProperty(props[13]);\r\n    return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\r\n  }\r\n\r\n  return function () {\r\n    this.reset = reset;\r\n    this.rotate = rotate;\r\n    this.rotateX = rotateX;\r\n    this.rotateY = rotateY;\r\n    this.rotateZ = rotateZ;\r\n    this.skew = skew;\r\n    this.skewFromAxis = skewFromAxis;\r\n    this.shear = shear;\r\n    this.scale = scale;\r\n    this.setTransform = setTransform;\r\n    this.translate = translate;\r\n    this.transform = transform;\r\n    this.applyToPoint = applyToPoint;\r\n    this.applyToX = applyToX;\r\n    this.applyToY = applyToY;\r\n    this.applyToZ = applyToZ;\r\n    this.applyToPointArray = applyToPointArray;\r\n    this.applyToTriplePoints = applyToTriplePoints;\r\n    this.applyToPointStringified = applyToPointStringified;\r\n    this.toCSS = toCSS;\r\n    this.to2dCSS = to2dCSS;\r\n    this.clone = clone;\r\n    this.cloneFromProps = cloneFromProps;\r\n    this.equals = equals;\r\n    this.inversePoints = inversePoints;\r\n    this.inversePoint = inversePoint;\r\n    this.getInverseMatrix = getInverseMatrix;\r\n    this._t = this.transform;\r\n    this.isIdentity = isIdentity;\r\n    this._identity = true;\r\n    this._identityCalculated = false;\r\n\r\n    this.props = createTypedArray('float32', 16);\r\n    this.reset();\r\n  };\r\n}());\r\n\r\n/* eslint-disable */\r\n/*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\r\n\r\n(function (pool, math) {\r\n//\r\n// The following constants are related to IEEE 754 limits.\r\n//\r\n    var global = this,\r\n        width = 256,        // each RC4 output is 0 <= x < 256\r\n        chunks = 6,         // at least six RC4 outputs for each double\r\n        digits = 52,        // there are 52 significant digits in a double\r\n        rngname = 'random', // rngname: name for Math.random and Math.seedrandom\r\n        startdenom = math.pow(width, chunks),\r\n        significance = math.pow(2, digits),\r\n        overflow = significance * 2,\r\n        mask = width - 1,\r\n        nodecrypto;         // node.js crypto module, initialized at the bottom.\r\n\r\n//\r\n// seedrandom()\r\n// This is the seedrandom function described above.\r\n//\r\n    function seedrandom(seed, options, callback) {\r\n        var key = [];\r\n        options = (options === true) ? { entropy: true } : (options || {});\r\n\r\n        // Flatten the seed string or build one from local entropy if needed.\r\n        var shortseed = mixkey(flatten(\r\n            options.entropy ? [seed, tostring(pool)] :\r\n                (seed === null) ? autoseed() : seed, 3), key);\r\n\r\n        // Use the seed to initialize an ARC4 generator.\r\n        var arc4 = new ARC4(key);\r\n\r\n        // This function returns a random double in [0, 1) that contains\r\n        // randomness in every bit of the mantissa of the IEEE 754 value.\r\n        var prng = function() {\r\n            var n = arc4.g(chunks),             // Start with a numerator n < 2 ^ 48\r\n                d = startdenom,                 //   and denominator d = 2 ^ 48.\r\n                x = 0;                          //   and no 'extra last byte'.\r\n            while (n < significance) {          // Fill up all significant digits by\r\n                n = (n + x) * width;              //   shifting numerator and\r\n                d *= width;                       //   denominator and generating a\r\n                x = arc4.g(1);                    //   new least-significant-byte.\r\n            }\r\n            while (n >= overflow) {             // To avoid rounding up, before adding\r\n                n /= 2;                           //   last byte, shift everything\r\n                d /= 2;                           //   right using integer math until\r\n                x >>>= 1;                         //   we have exactly the desired bits.\r\n            }\r\n            return (n + x) / d;                 // Form the number within [0, 1).\r\n        };\r\n\r\n        prng.int32 = function() { return arc4.g(4) | 0; };\r\n        prng.quick = function() { return arc4.g(4) / 0x100000000; };\r\n        prng.double = prng;\r\n\r\n        // Mix the randomness into accumulated entropy.\r\n        mixkey(tostring(arc4.S), pool);\r\n\r\n        // Calling convention: what to return as a function of prng, seed, is_math.\r\n        return (options.pass || callback ||\r\n        function(prng, seed, is_math_call, state) {\r\n            if (state) {\r\n                // Load the arc4 state from the given state if it has an S array.\r\n                if (state.S) { copy(state, arc4); }\r\n                // Only provide the .state method if requested via options.state.\r\n                prng.state = function() { return copy(arc4, {}); };\r\n            }\r\n\r\n            // If called as a method of Math (Math.seedrandom()), mutate\r\n            // Math.random because that is how seedrandom.js has worked since v1.0.\r\n            if (is_math_call) { math[rngname] = prng; return seed; }\r\n\r\n            // Otherwise, it is a newer calling convention, so return the\r\n            // prng directly.\r\n            else return prng;\r\n        })(\r\n            prng,\r\n            shortseed,\r\n            'global' in options ? options.global : (this == math),\r\n            options.state);\r\n    }\r\n    math['seed' + rngname] = seedrandom;\r\n\r\n//\r\n// ARC4\r\n//\r\n// An ARC4 implementation.  The constructor takes a key in the form of\r\n// an array of at most (width) integers that should be 0 <= x < (width).\r\n//\r\n// The g(count) method returns a pseudorandom integer that concatenates\r\n// the next (count) outputs from ARC4.  Its return value is a number x\r\n// that is in the range 0 <= x < (width ^ count).\r\n//\r\n    function ARC4(key) {\r\n        var t, keylen = key.length,\r\n            me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\r\n\r\n        // The empty key [] is treated as [0].\r\n        if (!keylen) { key = [keylen++]; }\r\n\r\n        // Set up S using the standard key scheduling algorithm.\r\n        while (i < width) {\r\n            s[i] = i++;\r\n        }\r\n        for (i = 0; i < width; i++) {\r\n            s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\r\n            s[j] = t;\r\n        }\r\n\r\n        // The \"g\" method returns the next (count) outputs as one number.\r\n        me.g = function(count) {\r\n            // Using instance members instead of closure state nearly doubles speed.\r\n            var t, r = 0,\r\n                i = me.i, j = me.j, s = me.S;\r\n            while (count--) {\r\n                t = s[i = mask & (i + 1)];\r\n                r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\r\n            }\r\n            me.i = i; me.j = j;\r\n            return r;\r\n            // For robust unpredictability, the function call below automatically\r\n            // discards an initial batch of values.  This is called RC4-drop[256].\r\n            // See http://google.com/search?q=rsa+fluhrer+response&btnI\r\n        };\r\n    }\r\n\r\n//\r\n// copy()\r\n// Copies internal state of ARC4 to or from a plain object.\r\n//\r\n    function copy(f, t) {\r\n        t.i = f.i;\r\n        t.j = f.j;\r\n        t.S = f.S.slice();\r\n        return t;\r\n    }\r\n\r\n//\r\n// flatten()\r\n// Converts an object tree to nested arrays of strings.\r\n//\r\n    function flatten(obj, depth) {\r\n        var result = [], typ = (typeof obj), prop;\r\n        if (depth && typ == 'object') {\r\n            for (prop in obj) {\r\n                try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\r\n            }\r\n        }\r\n        return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\r\n    }\r\n\r\n//\r\n// mixkey()\r\n// Mixes a string seed into a key that is an array of integers, and\r\n// returns a shortened string seed that is equivalent to the result key.\r\n//\r\n    function mixkey(seed, key) {\r\n        var stringseed = seed + '', smear, j = 0;\r\n        while (j < stringseed.length) {\r\n            key[mask & j] =\r\n                mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\r\n        }\r\n        return tostring(key);\r\n    }\r\n\r\n//\r\n// autoseed()\r\n// Returns an object for autoseeding, using window.crypto and Node crypto\r\n// module if available.\r\n//\r\n    function autoseed() {\r\n        try {\r\n            if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); }\r\n            var out = new Uint8Array(width);\r\n            (global.crypto || global.msCrypto).getRandomValues(out);\r\n            return tostring(out);\r\n        } catch (e) {\r\n            var browser = global.navigator,\r\n                plugins = browser && browser.plugins;\r\n            return [+new Date(), global, plugins, global.screen, tostring(pool)];\r\n        }\r\n    }\r\n\r\n//\r\n// tostring()\r\n// Converts an array of charcodes to a string\r\n//\r\n    function tostring(a) {\r\n        return String.fromCharCode.apply(0, a);\r\n    }\r\n\r\n//\r\n// When seedrandom.js is loaded, we immediately mix a few bits\r\n// from the built-in RNG into the entropy pool.  Because we do\r\n// not want to interfere with deterministic PRNG state later,\r\n// seedrandom will not call math.random on its own again after\r\n// initialization.\r\n//\r\n    mixkey(math.random(), pool);\r\n\r\n//\r\n// Nodejs and AMD support: export the implementation as a module using\r\n// either convention.\r\n//\r\n\r\n// End anonymous scope, and pass initial values.\r\n})(\r\n    [],     // pool: entropy pool starts empty\r\n    BMMath    // math: package containing random, pow, and seedrandom\r\n);\r\n/* eslint-disable */\r\nvar BezierFactory = (function () {\r\n  /**\r\n     * BezierEasing - use bezier curve for transition easing function\r\n     * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n     *\r\n     * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n     * Usage:\r\n     * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n     * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n     *\r\n     */\r\n\r\n  var ob = {};\r\n  ob.getBezierEasing = getBezierEasing;\r\n  var beziers = {};\r\n\r\n  function getBezierEasing(a, b, c, d, nm) {\r\n    var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\r\n    if (beziers[str]) {\r\n      return beziers[str];\r\n    }\r\n    var bezEasing = new BezierEasing([a, b, c, d]);\r\n    beziers[str] = bezEasing;\r\n    return bezEasing;\r\n  }\r\n\r\n  // These values are established by empiricism with tests (tradeoff: performance VS precision)\r\n  var NEWTON_ITERATIONS = 4;\r\n  var NEWTON_MIN_SLOPE = 0.001;\r\n  var SUBDIVISION_PRECISION = 0.0000001;\r\n  var SUBDIVISION_MAX_ITERATIONS = 10;\r\n\r\n  var kSplineTableSize = 11;\r\n  var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\r\n\r\n  var float32ArraySupported = typeof Float32Array === 'function';\r\n\r\n  function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\r\n  function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\r\n  function C(aA1) { return 3.0 * aA1; }\r\n\r\n  // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\r\n  function calcBezier(aT, aA1, aA2) {\r\n    return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\r\n  }\r\n\r\n  // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\r\n  function getSlope(aT, aA1, aA2) {\r\n    return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\r\n  }\r\n\r\n  function binarySubdivide(aX, aA, aB, mX1, mX2) {\r\n    var currentX,\r\n      currentT,\r\n      i = 0;\r\n    do {\r\n      currentT = aA + (aB - aA) / 2.0;\r\n      currentX = calcBezier(currentT, mX1, mX2) - aX;\r\n      if (currentX > 0.0) {\r\n        aB = currentT;\r\n      } else {\r\n        aA = currentT;\r\n      }\r\n    } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\r\n    return currentT;\r\n  }\r\n\r\n  function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\r\n    for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\r\n      var currentSlope = getSlope(aGuessT, mX1, mX2);\r\n      if (currentSlope === 0.0) return aGuessT;\r\n      var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\r\n      aGuessT -= currentX / currentSlope;\r\n    }\r\n    return aGuessT;\r\n  }\r\n\r\n  /**\r\n     * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n     */\r\n  function BezierEasing(points) {\r\n    this._p = points;\r\n    this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\r\n    this._precomputed = false;\r\n\r\n    this.get = this.get.bind(this);\r\n  }\r\n\r\n  BezierEasing.prototype = {\r\n\r\n    get: function (x) {\r\n      var mX1 = this._p[0],\r\n        mY1 = this._p[1],\r\n        mX2 = this._p[2],\r\n        mY2 = this._p[3];\r\n      if (!this._precomputed) this._precompute();\r\n      if (mX1 === mY1 && mX2 === mY2) return x; // linear\r\n      // Because JavaScript number are imprecise, we should guarantee the extremes are right.\r\n      if (x === 0) return 0;\r\n      if (x === 1) return 1;\r\n      return calcBezier(this._getTForX(x), mY1, mY2);\r\n    },\r\n\r\n    // Private part\r\n\r\n    _precompute: function () {\r\n      var mX1 = this._p[0],\r\n        mY1 = this._p[1],\r\n        mX2 = this._p[2],\r\n        mY2 = this._p[3];\r\n      this._precomputed = true;\r\n      if (mX1 !== mY1 || mX2 !== mY2) { this._calcSampleValues(); }\r\n    },\r\n\r\n    _calcSampleValues: function () {\r\n      var mX1 = this._p[0],\r\n        mX2 = this._p[2];\r\n      for (var i = 0; i < kSplineTableSize; ++i) {\r\n        this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\r\n      }\r\n    },\r\n\r\n    /**\r\n         * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n         */\r\n    _getTForX: function (aX) {\r\n      var mX1 = this._p[0],\r\n        mX2 = this._p[2],\r\n        mSampleValues = this._mSampleValues;\r\n\r\n      var intervalStart = 0.0;\r\n      var currentSample = 1;\r\n      var lastSample = kSplineTableSize - 1;\r\n\r\n      for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\r\n        intervalStart += kSampleStepSize;\r\n      }\r\n      --currentSample;\r\n\r\n      // Interpolate to provide an initial guess for t\r\n      var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\r\n      var guessForT = intervalStart + dist * kSampleStepSize;\r\n\r\n      var initialSlope = getSlope(guessForT, mX1, mX2);\r\n      if (initialSlope >= NEWTON_MIN_SLOPE) {\r\n        return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\r\n      } if (initialSlope === 0.0) {\r\n        return guessForT;\r\n      }\r\n      return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\r\n    },\r\n  };\r\n\r\n  return ob;\r\n}());\r\n\r\n(function () {\r\n  var lastTime = 0;\r\n  var vendors = ['ms', 'moz', 'webkit', 'o'];\r\n  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { // eslint-disable-line no-plusplus\r\n    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n  }\r\n  if (!window.requestAnimationFrame) {\r\n    window.requestAnimationFrame = function (callback) {\r\n      var currTime = new Date().getTime();\r\n      var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n      var id = setTimeout(function () {\r\n        callback(currTime + timeToCall);\r\n      },\r\n      timeToCall);\r\n      lastTime = currTime + timeToCall;\r\n      return id;\r\n    };\r\n  }\r\n  if (!window.cancelAnimationFrame) {\r\n    window.cancelAnimationFrame = function (id) {\r\n      clearTimeout(id);\r\n    };\r\n  }\r\n}());\r\n\r\n/* exported extendPrototype, getDescriptor, createProxyFunction */\r\n\r\nfunction extendPrototype(sources, destination) {\r\n  var i;\r\n  var len = sources.length;\r\n  var sourcePrototype;\r\n  for (i = 0; i < len; i += 1) {\r\n    sourcePrototype = sources[i].prototype;\r\n    for (var attr in sourcePrototype) {\r\n      if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\r\n    }\r\n  }\r\n}\r\n\r\nfunction getDescriptor(object, prop) {\r\n  return Object.getOwnPropertyDescriptor(object, prop);\r\n}\r\n\r\nfunction createProxyFunction(prototype) {\r\n  function ProxyFunction() {}\r\n  ProxyFunction.prototype = prototype;\r\n  return ProxyFunction;\r\n}\r\n\r\n/* global segmentsLengthPool, defaultCurveSegments, createSizedArray, bmPow, bmSqrt, bmFloor, createTypedArray, bezierLengthPool */\r\n/* exported bez */\r\n\r\nfunction bezFunction() {\r\n  var math = Math;\r\n\r\n  function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\r\n    var det1 = (x1 * y2) + (y1 * x3) + (x2 * y3) - (x3 * y2) - (y3 * x1) - (x2 * y1);\r\n    return det1 > -0.001 && det1 < 0.001;\r\n  }\r\n\r\n  function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\r\n    if (z1 === 0 && z2 === 0 && z3 === 0) {\r\n      return pointOnLine2D(x1, y1, x2, y2, x3, y3);\r\n    }\r\n    var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\r\n    var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\r\n    var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\r\n    var diffDist;\r\n    if (dist1 > dist2) {\r\n      if (dist1 > dist3) {\r\n        diffDist = dist1 - dist2 - dist3;\r\n      } else {\r\n        diffDist = dist3 - dist2 - dist1;\r\n      }\r\n    } else if (dist3 > dist2) {\r\n      diffDist = dist3 - dist2 - dist1;\r\n    } else {\r\n      diffDist = dist2 - dist1 - dist3;\r\n    }\r\n    return diffDist > -0.0001 && diffDist < 0.0001;\r\n  }\r\n\r\n  var getBezierLength = (function () {\r\n    return function (pt1, pt2, pt3, pt4) {\r\n      var curveSegments = defaultCurveSegments;\r\n      var k;\r\n      var i;\r\n      var len;\r\n      var ptCoord;\r\n      var perc;\r\n      var addedLength = 0;\r\n      var ptDistance;\r\n      var point = [];\r\n      var lastPoint = [];\r\n      var lengthData = bezierLengthPool.newElement();\r\n      len = pt3.length;\r\n      for (k = 0; k < curveSegments; k += 1) {\r\n        perc = k / (curveSegments - 1);\r\n        ptDistance = 0;\r\n        for (i = 0; i < len; i += 1) {\r\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];\r\n          point[i] = ptCoord;\r\n          if (lastPoint[i] !== null) {\r\n            ptDistance += bmPow(point[i] - lastPoint[i], 2);\r\n          }\r\n          lastPoint[i] = point[i];\r\n        }\r\n        if (ptDistance) {\r\n          ptDistance = bmSqrt(ptDistance);\r\n          addedLength += ptDistance;\r\n        }\r\n        lengthData.percents[k] = perc;\r\n        lengthData.lengths[k] = addedLength;\r\n      }\r\n      lengthData.addedLength = addedLength;\r\n      return lengthData;\r\n    };\r\n  }());\r\n\r\n  function getSegmentsLength(shapeData) {\r\n    var segmentsLength = segmentsLengthPool.newElement();\r\n    var closed = shapeData.c;\r\n    var pathV = shapeData.v;\r\n    var pathO = shapeData.o;\r\n    var pathI = shapeData.i;\r\n    var i;\r\n    var len = shapeData._length;\r\n    var lengths = segmentsLength.lengths;\r\n    var totalLength = 0;\r\n    for (i = 0; i < len - 1; i += 1) {\r\n      lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\r\n      totalLength += lengths[i].addedLength;\r\n    }\r\n    if (closed && len) {\r\n      lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\r\n      totalLength += lengths[i].addedLength;\r\n    }\r\n    segmentsLength.totalLength = totalLength;\r\n    return segmentsLength;\r\n  }\r\n\r\n  function BezierData(length) {\r\n    this.segmentLength = 0;\r\n    this.points = new Array(length);\r\n  }\r\n\r\n  function PointData(partial, point) {\r\n    this.partialLength = partial;\r\n    this.point = point;\r\n  }\r\n\r\n  var buildBezierData = (function () {\r\n    var storedData = {};\r\n\r\n    return function (pt1, pt2, pt3, pt4) {\r\n      var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\r\n      if (!storedData[bezierName]) {\r\n        var curveSegments = defaultCurveSegments;\r\n        var k;\r\n        var i;\r\n        var len;\r\n        var ptCoord;\r\n        var perc;\r\n        var addedLength = 0;\r\n        var ptDistance;\r\n        var point;\r\n        var lastPoint = null;\r\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])) {\r\n          curveSegments = 2;\r\n        }\r\n        var bezierData = new BezierData(curveSegments);\r\n        len = pt3.length;\r\n        for (k = 0; k < curveSegments; k += 1) {\r\n          point = createSizedArray(len);\r\n          perc = k / (curveSegments - 1);\r\n          ptDistance = 0;\r\n          for (i = 0; i < len; i += 1) {\r\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];\r\n            point[i] = ptCoord;\r\n            if (lastPoint !== null) {\r\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\r\n            }\r\n          }\r\n          ptDistance = bmSqrt(ptDistance);\r\n          addedLength += ptDistance;\r\n          bezierData.points[k] = new PointData(ptDistance, point);\r\n          lastPoint = point;\r\n        }\r\n        bezierData.segmentLength = addedLength;\r\n        storedData[bezierName] = bezierData;\r\n      }\r\n      return storedData[bezierName];\r\n    };\r\n  }());\r\n\r\n  function getDistancePerc(perc, bezierData) {\r\n    var percents = bezierData.percents;\r\n    var lengths = bezierData.lengths;\r\n    var len = percents.length;\r\n    var initPos = bmFloor((len - 1) * perc);\r\n    var lengthPos = perc * bezierData.addedLength;\r\n    var lPerc = 0;\r\n    if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\r\n      return percents[initPos];\r\n    }\r\n    var dir = lengths[initPos] > lengthPos ? -1 : 1;\r\n    var flag = true;\r\n    while (flag) {\r\n      if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\r\n        lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\r\n        flag = false;\r\n      } else {\r\n        initPos += dir;\r\n      }\r\n      if (initPos < 0 || initPos >= len - 1) {\r\n        // FIX for TypedArrays that don't store floating point values with enough accuracy\r\n        if (initPos === len - 1) {\r\n          return percents[initPos];\r\n        }\r\n        flag = false;\r\n      }\r\n    }\r\n    return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\r\n  }\r\n\r\n  function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\r\n    var t1 = getDistancePerc(percent, bezierData);\r\n    var u1 = 1 - t1;\r\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;\r\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;\r\n    return [ptX, ptY];\r\n  }\r\n\r\n  var bezierSegmentPoints = createTypedArray('float32', 8);\r\n\r\n  function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\r\n    if (startPerc < 0) {\r\n      startPerc = 0;\r\n    } else if (startPerc > 1) {\r\n      startPerc = 1;\r\n    }\r\n    var t0 = getDistancePerc(startPerc, bezierData);\r\n    endPerc = endPerc > 1 ? 1 : endPerc;\r\n    var t1 = getDistancePerc(endPerc, bezierData);\r\n    var i;\r\n    var len = pt1.length;\r\n    var u0 = 1 - t0;\r\n    var u1 = 1 - t1;\r\n    var u0u0u0 = u0 * u0 * u0;\r\n    var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\r\n    var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\r\n    var t0t0t0 = t0 * t0 * t0;\r\n    //\r\n    var u0u0u1 = u0 * u0 * u1;\r\n    var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\r\n    var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\r\n    var t0t0t1 = t0 * t0 * t1;\r\n    //\r\n    var u0u1u1 = u0 * u1 * u1;\r\n    var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\r\n    var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\r\n    var t0t1t1 = t0 * t1 * t1;\r\n    //\r\n    var u1u1u1 = u1 * u1 * u1;\r\n    var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\r\n    var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\r\n    var t1t1t1 = t1 * t1 * t1;\r\n    for (i = 0; i < len; i += 1) {\r\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\r\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\r\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\r\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\r\n    }\r\n\r\n    return bezierSegmentPoints;\r\n  }\r\n\r\n  return {\r\n    getSegmentsLength: getSegmentsLength,\r\n    getNewSegment: getNewSegment,\r\n    getPointInSegment: getPointInSegment,\r\n    buildBezierData: buildBezierData,\r\n    pointOnLine2D: pointOnLine2D,\r\n    pointOnLine3D: pointOnLine3D,\r\n  };\r\n}\r\n\r\nvar bez = bezFunction();\r\n\r\n/* global _useWebWorker */\r\n\r\nvar dataManager = (function () {\r\n  var _counterId = 1;\r\n  var processes = [];\r\n  var workerFn;\r\n  var workerInstance;\r\n  var workerProxy = {\r\n    onmessage: function () {\r\n\r\n    },\r\n    postMessage: function (path) {\r\n      workerFn({\r\n        data: path,\r\n      });\r\n    },\r\n  };\r\n  var _workerSelf = {\r\n    postMessage: function (data) {\r\n      workerProxy.onmessage({\r\n        data: data,\r\n      });\r\n    },\r\n  };\r\n  function createWorker(fn) {\r\n    if (window.Worker && window.Blob && _useWebWorker) {\r\n      var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], { type: 'text/javascript' });\r\n      // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\r\n      var url = URL.createObjectURL(blob);\r\n      return new Worker(url);\r\n    }\r\n    workerFn = fn;\r\n    return workerProxy;\r\n  }\r\n\r\n  function setupWorker() {\r\n    if (!workerInstance) {\r\n      workerInstance = createWorker(function workerStart(e) {\r\n        /* exported dataManager */\r\n\r\n        function dataFunctionManager() {\r\n          // var tCanvasHelper = createTag('canvas').getContext('2d');\r\n\r\n          function completeLayers(layers, comps) {\r\n            var layerData;\r\n            var i;\r\n            var len = layers.length;\r\n            var j;\r\n            var jLen;\r\n            var k;\r\n            var kLen;\r\n            for (i = 0; i < len; i += 1) {\r\n              layerData = layers[i];\r\n              if (('ks' in layerData) && !layerData.completed) {\r\n                layerData.completed = true;\r\n                if (layerData.tt) {\r\n                  layers[i - 1].td = layerData.tt;\r\n                }\r\n                if (layerData.hasMask) {\r\n                  var maskProps = layerData.masksProperties;\r\n                  jLen = maskProps.length;\r\n                  for (j = 0; j < jLen; j += 1) {\r\n                    if (maskProps[j].pt.k.i) {\r\n                      convertPathsToAbsoluteValues(maskProps[j].pt.k);\r\n                    } else {\r\n                      kLen = maskProps[j].pt.k.length;\r\n                      for (k = 0; k < kLen; k += 1) {\r\n                        if (maskProps[j].pt.k[k].s) {\r\n                          convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\r\n                        }\r\n                        if (maskProps[j].pt.k[k].e) {\r\n                          convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n                if (layerData.ty === 0) {\r\n                  layerData.layers = findCompLayers(layerData.refId, comps);\r\n                  completeLayers(layerData.layers, comps);\r\n                } else if (layerData.ty === 4) {\r\n                  completeShapes(layerData.shapes);\r\n                } else if (layerData.ty === 5) {\r\n                  completeText(layerData);\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          function findCompLayers(id, comps) {\r\n            var i = 0;\r\n            var len = comps.length;\r\n            while (i < len) {\r\n              if (comps[i].id === id) {\r\n                if (!comps[i].layers.__used) {\r\n                  comps[i].layers.__used = true;\r\n                  return comps[i].layers;\r\n                }\r\n                return JSON.parse(JSON.stringify(comps[i].layers));\r\n              }\r\n              i += 1;\r\n            }\r\n            return null;\r\n          }\r\n\r\n          function completeShapes(arr) {\r\n            var i;\r\n            var len = arr.length;\r\n            var j;\r\n            var jLen;\r\n            for (i = len - 1; i >= 0; i -= 1) {\r\n              if (arr[i].ty === 'sh') {\r\n                if (arr[i].ks.k.i) {\r\n                  convertPathsToAbsoluteValues(arr[i].ks.k);\r\n                } else {\r\n                  jLen = arr[i].ks.k.length;\r\n                  for (j = 0; j < jLen; j += 1) {\r\n                    if (arr[i].ks.k[j].s) {\r\n                      convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\r\n                    }\r\n                    if (arr[i].ks.k[j].e) {\r\n                      convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\r\n                    }\r\n                  }\r\n                }\r\n              } else if (arr[i].ty === 'gr') {\r\n                completeShapes(arr[i].it);\r\n              }\r\n            }\r\n          }\r\n\r\n          function convertPathsToAbsoluteValues(path) {\r\n            var i;\r\n            var len = path.i.length;\r\n            for (i = 0; i < len; i += 1) {\r\n              path.i[i][0] += path.v[i][0];\r\n              path.i[i][1] += path.v[i][1];\r\n              path.o[i][0] += path.v[i][0];\r\n              path.o[i][1] += path.v[i][1];\r\n            }\r\n          }\r\n\r\n          function checkVersion(minimum, animVersionString) {\r\n            var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\r\n            if (minimum[0] > animVersion[0]) {\r\n              return true;\r\n            } if (animVersion[0] > minimum[0]) {\r\n              return false;\r\n            }\r\n            if (minimum[1] > animVersion[1]) {\r\n              return true;\r\n            } if (animVersion[1] > minimum[1]) {\r\n              return false;\r\n            }\r\n            if (minimum[2] > animVersion[2]) {\r\n              return true;\r\n            } if (animVersion[2] > minimum[2]) {\r\n              return false;\r\n            }\r\n            return null;\r\n          }\r\n\r\n          var checkText = (function () {\r\n            var minimumVersion = [4, 4, 14];\r\n\r\n            function updateTextLayer(textLayer) {\r\n              var documentData = textLayer.t.d;\r\n              textLayer.t.d = {\r\n                k: [\r\n                  {\r\n                    s: documentData,\r\n                    t: 0,\r\n                  },\r\n                ],\r\n              };\r\n            }\r\n\r\n            function iterateLayers(layers) {\r\n              var i;\r\n              var len = layers.length;\r\n              for (i = 0; i < len; i += 1) {\r\n                if (layers[i].ty === 5) {\r\n                  updateTextLayer(layers[i]);\r\n                }\r\n              }\r\n            }\r\n\r\n            return function (animationData) {\r\n              if (checkVersion(minimumVersion, animationData.v)) {\r\n                iterateLayers(animationData.layers);\r\n                if (animationData.assets) {\r\n                  var i;\r\n                  var len = animationData.assets.length;\r\n                  for (i = 0; i < len; i += 1) {\r\n                    if (animationData.assets[i].layers) {\r\n                      iterateLayers(animationData.assets[i].layers);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            };\r\n          }());\r\n\r\n          var checkChars = (function () {\r\n            var minimumVersion = [4, 7, 99];\r\n            return function (animationData) {\r\n              if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\r\n                var i;\r\n                var len = animationData.chars.length;\r\n                var j;\r\n                var jLen;\r\n                var pathData;\r\n                var paths;\r\n                for (i = 0; i < len; i += 1) {\r\n                  if (animationData.chars[i].data && animationData.chars[i].data.shapes) {\r\n                    paths = animationData.chars[i].data.shapes[0].it;\r\n                    jLen = paths.length;\r\n\r\n                    for (j = 0; j < jLen; j += 1) {\r\n                      pathData = paths[j].ks.k;\r\n                      if (!pathData.__converted) {\r\n                        convertPathsToAbsoluteValues(paths[j].ks.k);\r\n                        pathData.__converted = true;\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            };\r\n          }());\r\n\r\n          var checkPathProperties = (function () {\r\n            var minimumVersion = [5, 7, 15];\r\n\r\n            function updateTextLayer(textLayer) {\r\n              var pathData = textLayer.t.p;\r\n              if (typeof pathData.a === 'number') {\r\n                pathData.a = {\r\n                  a: 0,\r\n                  k: pathData.a,\r\n                };\r\n              }\r\n              if (typeof pathData.p === 'number') {\r\n                pathData.p = {\r\n                  a: 0,\r\n                  k: pathData.p,\r\n                };\r\n              }\r\n              if (typeof pathData.r === 'number') {\r\n                pathData.r = {\r\n                  a: 0,\r\n                  k: pathData.r,\r\n                };\r\n              }\r\n            }\r\n\r\n            function iterateLayers(layers) {\r\n              var i;\r\n              var len = layers.length;\r\n              for (i = 0; i < len; i += 1) {\r\n                if (layers[i].ty === 5) {\r\n                  updateTextLayer(layers[i]);\r\n                }\r\n              }\r\n            }\r\n\r\n            return function (animationData) {\r\n              if (checkVersion(minimumVersion, animationData.v)) {\r\n                iterateLayers(animationData.layers);\r\n                if (animationData.assets) {\r\n                  var i;\r\n                  var len = animationData.assets.length;\r\n                  for (i = 0; i < len; i += 1) {\r\n                    if (animationData.assets[i].layers) {\r\n                      iterateLayers(animationData.assets[i].layers);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            };\r\n          }());\r\n\r\n          var checkColors = (function () {\r\n            var minimumVersion = [4, 1, 9];\r\n\r\n            function iterateShapes(shapes) {\r\n              var i;\r\n              var len = shapes.length;\r\n              var j;\r\n              var jLen;\r\n              for (i = 0; i < len; i += 1) {\r\n                if (shapes[i].ty === 'gr') {\r\n                  iterateShapes(shapes[i].it);\r\n                } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\r\n                  if (shapes[i].c.k && shapes[i].c.k[0].i) {\r\n                    jLen = shapes[i].c.k.length;\r\n                    for (j = 0; j < jLen; j += 1) {\r\n                      if (shapes[i].c.k[j].s) {\r\n                        shapes[i].c.k[j].s[0] /= 255;\r\n                        shapes[i].c.k[j].s[1] /= 255;\r\n                        shapes[i].c.k[j].s[2] /= 255;\r\n                        shapes[i].c.k[j].s[3] /= 255;\r\n                      }\r\n                      if (shapes[i].c.k[j].e) {\r\n                        shapes[i].c.k[j].e[0] /= 255;\r\n                        shapes[i].c.k[j].e[1] /= 255;\r\n                        shapes[i].c.k[j].e[2] /= 255;\r\n                        shapes[i].c.k[j].e[3] /= 255;\r\n                      }\r\n                    }\r\n                  } else {\r\n                    shapes[i].c.k[0] /= 255;\r\n                    shapes[i].c.k[1] /= 255;\r\n                    shapes[i].c.k[2] /= 255;\r\n                    shapes[i].c.k[3] /= 255;\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            function iterateLayers(layers) {\r\n              var i;\r\n              var len = layers.length;\r\n              for (i = 0; i < len; i += 1) {\r\n                if (layers[i].ty === 4) {\r\n                  iterateShapes(layers[i].shapes);\r\n                }\r\n              }\r\n            }\r\n\r\n            return function (animationData) {\r\n              if (checkVersion(minimumVersion, animationData.v)) {\r\n                iterateLayers(animationData.layers);\r\n                if (animationData.assets) {\r\n                  var i;\r\n                  var len = animationData.assets.length;\r\n                  for (i = 0; i < len; i += 1) {\r\n                    if (animationData.assets[i].layers) {\r\n                      iterateLayers(animationData.assets[i].layers);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            };\r\n          }());\r\n\r\n          var checkShapes = (function () {\r\n            var minimumVersion = [4, 4, 18];\r\n\r\n            function completeClosingShapes(arr) {\r\n              var i;\r\n              var len = arr.length;\r\n              var j;\r\n              var jLen;\r\n              for (i = len - 1; i >= 0; i -= 1) {\r\n                if (arr[i].ty === 'sh') {\r\n                  if (arr[i].ks.k.i) {\r\n                    arr[i].ks.k.c = arr[i].closed;\r\n                  } else {\r\n                    jLen = arr[i].ks.k.length;\r\n                    for (j = 0; j < jLen; j += 1) {\r\n                      if (arr[i].ks.k[j].s) {\r\n                        arr[i].ks.k[j].s[0].c = arr[i].closed;\r\n                      }\r\n                      if (arr[i].ks.k[j].e) {\r\n                        arr[i].ks.k[j].e[0].c = arr[i].closed;\r\n                      }\r\n                    }\r\n                  }\r\n                } else if (arr[i].ty === 'gr') {\r\n                  completeClosingShapes(arr[i].it);\r\n                }\r\n              }\r\n            }\r\n\r\n            function iterateLayers(layers) {\r\n              var layerData;\r\n              var i;\r\n              var len = layers.length;\r\n              var j;\r\n              var jLen;\r\n              var k;\r\n              var kLen;\r\n              for (i = 0; i < len; i += 1) {\r\n                layerData = layers[i];\r\n                if (layerData.hasMask) {\r\n                  var maskProps = layerData.masksProperties;\r\n                  jLen = maskProps.length;\r\n                  for (j = 0; j < jLen; j += 1) {\r\n                    if (maskProps[j].pt.k.i) {\r\n                      maskProps[j].pt.k.c = maskProps[j].cl;\r\n                    } else {\r\n                      kLen = maskProps[j].pt.k.length;\r\n                      for (k = 0; k < kLen; k += 1) {\r\n                        if (maskProps[j].pt.k[k].s) {\r\n                          maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\r\n                        }\r\n                        if (maskProps[j].pt.k[k].e) {\r\n                          maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n                if (layerData.ty === 4) {\r\n                  completeClosingShapes(layerData.shapes);\r\n                }\r\n              }\r\n            }\r\n\r\n            return function (animationData) {\r\n              if (checkVersion(minimumVersion, animationData.v)) {\r\n                iterateLayers(animationData.layers);\r\n                if (animationData.assets) {\r\n                  var i;\r\n                  var len = animationData.assets.length;\r\n                  for (i = 0; i < len; i += 1) {\r\n                    if (animationData.assets[i].layers) {\r\n                      iterateLayers(animationData.assets[i].layers);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            };\r\n          }());\r\n\r\n          function completeData(animationData) {\r\n            if (animationData.__complete) {\r\n              return;\r\n            }\r\n            checkColors(animationData);\r\n            checkText(animationData);\r\n            checkChars(animationData);\r\n            checkPathProperties(animationData);\r\n            checkShapes(animationData);\r\n            completeLayers(animationData.layers, animationData.assets);\r\n            animationData.__complete = true;\r\n          }\r\n\r\n          function completeText(data) {\r\n            if (data.t.a.length === 0 && !('m' in data.t.p)) {\r\n              data.singleShape = true;\r\n            }\r\n          }\r\n\r\n          var moduleOb = {};\r\n          moduleOb.completeData = completeData;\r\n          moduleOb.checkColors = checkColors;\r\n          moduleOb.checkChars = checkChars;\r\n          moduleOb.checkPathProperties = checkPathProperties;\r\n          moduleOb.checkShapes = checkShapes;\r\n          moduleOb.completeLayers = completeLayers;\r\n\r\n          return moduleOb;\r\n        }\r\n        if (!_workerSelf.dataManager) {\r\n          _workerSelf.dataManager = dataFunctionManager();\r\n        }\r\n\r\n        /* exported assetLoader */\r\n        if (!_workerSelf.assetLoader) {\r\n          _workerSelf.assetLoader = (function () {\r\n            function formatResponse(xhr) {\r\n              // using typeof doubles the time of execution of this method,\r\n              // so if available, it's better to use the header to validate the type\r\n              var contentTypeHeader = xhr.getResponseHeader('content-type');\r\n              if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\r\n                return xhr.response;\r\n              }\r\n              if (xhr.response && typeof xhr.response === 'object') {\r\n                return xhr.response;\r\n              } if (xhr.response && typeof xhr.response === 'string') {\r\n                return JSON.parse(xhr.response);\r\n              } if (xhr.responseText) {\r\n                return JSON.parse(xhr.responseText);\r\n              }\r\n              return null;\r\n            }\r\n\r\n            function loadAsset(path, fullPath, callback, errorCallback) {\r\n              var response;\r\n              var xhr = new XMLHttpRequest();\r\n              // set responseType after calling open or IE will break.\r\n              try {\r\n                // This crashes on Android WebView prior to KitKat\r\n                xhr.responseType = 'json';\r\n              } catch (err) {} // eslint-disable-line no-empty\r\n              xhr.onreadystatechange = function () {\r\n                if (xhr.readyState === 4) {\r\n                  if (xhr.status === 200) {\r\n                    response = formatResponse(xhr);\r\n                    callback(response);\r\n                  } else {\r\n                    try {\r\n                      response = formatResponse(xhr);\r\n                      callback(response);\r\n                    } catch (err) {\r\n                      if (errorCallback) {\r\n                        errorCallback(err);\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n              };\r\n              try {\r\n                xhr.open('GET', path, true);\r\n              } catch (error) {\r\n                xhr.open('GET', fullPath + '/' + path, true);\r\n              }\r\n              xhr.send();\r\n            }\r\n            return {\r\n              load: loadAsset,\r\n            };\r\n          }());\r\n        }\r\n\r\n        if (e.data.type === 'loadAnimation') {\r\n          _workerSelf.assetLoader.load(\r\n            e.data.path,\r\n            e.data.fullPath,\r\n            function (data) {\r\n              _workerSelf.dataManager.completeData(data);\r\n              _workerSelf.postMessage({\r\n                id: e.data.id,\r\n                payload: data,\r\n                status: 'success',\r\n              });\r\n            },\r\n            function () {\r\n              _workerSelf.postMessage({\r\n                id: e.data.id,\r\n                status: 'error',\r\n              });\r\n            }\r\n          );\r\n        } else if (e.data.type === 'complete') {\r\n          var animation = e.data.animation;\r\n          _workerSelf.dataManager.completeData(animation);\r\n          _workerSelf.postMessage({\r\n            id: e.data.id,\r\n            payload: animation,\r\n            status: 'success',\r\n          });\r\n        } else if (e.data.type === 'loadData') {\r\n          _workerSelf.assetLoader.load(\r\n            e.data.path,\r\n            e.data.fullPath,\r\n            function (data) {\r\n              _workerSelf.postMessage({\r\n                id: e.data.id,\r\n                payload: data,\r\n                status: 'success',\r\n              });\r\n            },\r\n            function () {\r\n              _workerSelf.postMessage({\r\n                id: e.data.id,\r\n                status: 'error',\r\n              });\r\n            }\r\n          );\r\n        }\r\n      });\r\n\r\n      workerInstance.onmessage = function (event) {\r\n        var data = event.data;\r\n        var id = data.id;\r\n        var process = processes[id];\r\n        processes[id] = null;\r\n        if (data.status === 'success') {\r\n          process.onComplete(data.payload);\r\n        } else if (process.onError) {\r\n          process.onError();\r\n        }\r\n      };\r\n    }\r\n  }\r\n\r\n  function createProcess(onComplete, onError) {\r\n    _counterId += 1;\r\n    var id = 'processId_' + _counterId;\r\n    processes[id] = {\r\n      onComplete: onComplete,\r\n      onError: onError,\r\n    };\r\n    return id;\r\n  }\r\n\r\n  function loadAnimation(path, onComplete, onError) {\r\n    setupWorker();\r\n    var processId = createProcess(onComplete, onError);\r\n    workerInstance.postMessage({\r\n      type: 'loadAnimation',\r\n      path: path,\r\n      fullPath: window.location.origin + window.location.pathname,\r\n      id: processId,\r\n    });\r\n  }\r\n\r\n  function loadData(path, onComplete, onError) {\r\n    setupWorker();\r\n    var processId = createProcess(onComplete, onError);\r\n    workerInstance.postMessage({\r\n      type: 'loadData',\r\n      path: path,\r\n      fullPath: window.location.origin + window.location.pathname,\r\n      id: processId,\r\n    });\r\n  }\r\n\r\n  function completeAnimation(anim, onComplete, onError) {\r\n    setupWorker();\r\n    var processId = createProcess(onComplete, onError);\r\n    workerInstance.postMessage({\r\n      type: 'complete',\r\n      animation: anim,\r\n      id: processId,\r\n    });\r\n  }\r\n\r\n  return {\r\n    loadAnimation: loadAnimation,\r\n    loadData: loadData,\r\n    completeAnimation: completeAnimation,\r\n  };\r\n}());\r\n\r\n/* exported getFontProperties */\r\n\r\nfunction getFontProperties(fontData) {\r\n  var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\r\n\r\n  var fWeight = 'normal'; var\r\n    fStyle = 'normal';\r\n  var len = styles.length;\r\n  var styleName;\r\n  for (var i = 0; i < len; i += 1) {\r\n    styleName = styles[i].toLowerCase();\r\n    switch (styleName) {\r\n      case 'italic':\r\n        fStyle = 'italic';\r\n        break;\r\n      case 'bold':\r\n        fWeight = '700';\r\n        break;\r\n      case 'black':\r\n        fWeight = '900';\r\n        break;\r\n      case 'medium':\r\n        fWeight = '500';\r\n        break;\r\n      case 'regular':\r\n      case 'normal':\r\n        fWeight = '400';\r\n        break;\r\n      case 'light':\r\n      case 'thin':\r\n        fWeight = '200';\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  return {\r\n    style: fStyle,\r\n    weight: fontData.fWeight || fWeight,\r\n  };\r\n}\r\n\r\n/* global createNS, createTag, getFontProperties */\r\n/* exported FontManager */\r\n\r\nvar FontManager = (function () {\r\n  var maxWaitingTime = 5000;\r\n  var emptyChar = {\r\n    w: 0,\r\n    size: 0,\r\n    shapes: [],\r\n  };\r\n  var combinedCharacters = [];\r\n  // Hindi characters\r\n  combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366,\r\n    2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379,\r\n    2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\r\n\r\n  var surrogateModifiers = [\r\n    'd83cdffb',\r\n    'd83cdffc',\r\n    'd83cdffd',\r\n    'd83cdffe',\r\n    'd83cdfff',\r\n  ];\r\n\r\n  var zeroWidthJoiner = [65039, 8205];\r\n\r\n  function trimFontOptions(font) {\r\n    var familyArray = font.split(',');\r\n    var i;\r\n    var len = familyArray.length;\r\n    var enabledFamilies = [];\r\n    for (i = 0; i < len; i += 1) {\r\n      if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\r\n        enabledFamilies.push(familyArray[i]);\r\n      }\r\n    }\r\n    return enabledFamilies.join(',');\r\n  }\r\n\r\n  function setUpNode(font, family) {\r\n    var parentNode = createTag('span');\r\n    // Node is invisible to screen readers.\r\n    parentNode.setAttribute('aria-hidden', true);\r\n    parentNode.style.fontFamily = family;\r\n    var node = createTag('span');\r\n    // Characters that vary significantly among different fonts\r\n    node.innerText = 'giItT1WQy@!-/#';\r\n    // Visible - so we can measure it - but not on the screen\r\n    parentNode.style.position = 'absolute';\r\n    parentNode.style.left = '-10000px';\r\n    parentNode.style.top = '-10000px';\r\n    // Large font size makes even subtle changes obvious\r\n    parentNode.style.fontSize = '300px';\r\n    // Reset any font properties\r\n    parentNode.style.fontVariant = 'normal';\r\n    parentNode.style.fontStyle = 'normal';\r\n    parentNode.style.fontWeight = 'normal';\r\n    parentNode.style.letterSpacing = '0';\r\n    parentNode.appendChild(node);\r\n    document.body.appendChild(parentNode);\r\n\r\n    // Remember width with no applied web font\r\n    var width = node.offsetWidth;\r\n    node.style.fontFamily = trimFontOptions(font) + ', ' + family;\r\n    return { node: node, w: width, parent: parentNode };\r\n  }\r\n\r\n  function checkLoadedFonts() {\r\n    var i;\r\n    var len = this.fonts.length;\r\n    var node;\r\n    var w;\r\n    var loadedCount = len;\r\n    for (i = 0; i < len; i += 1) {\r\n      if (this.fonts[i].loaded) {\r\n        loadedCount -= 1;\r\n      } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\r\n        this.fonts[i].loaded = true;\r\n      } else {\r\n        node = this.fonts[i].monoCase.node;\r\n        w = this.fonts[i].monoCase.w;\r\n        if (node.offsetWidth !== w) {\r\n          loadedCount -= 1;\r\n          this.fonts[i].loaded = true;\r\n        } else {\r\n          node = this.fonts[i].sansCase.node;\r\n          w = this.fonts[i].sansCase.w;\r\n          if (node.offsetWidth !== w) {\r\n            loadedCount -= 1;\r\n            this.fonts[i].loaded = true;\r\n          }\r\n        }\r\n        if (this.fonts[i].loaded) {\r\n          this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\r\n          this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\r\n      setTimeout(this.checkLoadedFontsBinded, 20);\r\n    } else {\r\n      setTimeout(this.setIsLoadedBinded, 10);\r\n    }\r\n  }\r\n\r\n  function createHelper(def, fontData) {\r\n    var tHelper = createNS('text');\r\n    tHelper.style.fontSize = '100px';\r\n    // tHelper.style.fontFamily = fontData.fFamily;\r\n\r\n    var fontProps = getFontProperties(fontData);\r\n    tHelper.setAttribute('font-family', fontData.fFamily);\r\n    tHelper.setAttribute('font-style', fontProps.style);\r\n    tHelper.setAttribute('font-weight', fontProps.weight);\r\n    tHelper.textContent = '1';\r\n    if (fontData.fClass) {\r\n      tHelper.style.fontFamily = 'inherit';\r\n      tHelper.setAttribute('class', fontData.fClass);\r\n    } else {\r\n      tHelper.style.fontFamily = fontData.fFamily;\r\n    }\r\n    def.appendChild(tHelper);\r\n    var tCanvasHelper = createTag('canvas').getContext('2d');\r\n    tCanvasHelper.font = fontData.fWeight + ' ' + fontData.fStyle + ' 100px ' + fontData.fFamily;\r\n    // tCanvasHelper.font = ' 100px '+ fontData.fFamily;\r\n    return tHelper;\r\n  }\r\n\r\n  function addFonts(fontData, defs) {\r\n    if (!fontData) {\r\n      this.isLoaded = true;\r\n      return;\r\n    }\r\n    if (this.chars) {\r\n      this.isLoaded = true;\r\n      this.fonts = fontData.list;\r\n      return;\r\n    }\r\n\r\n    var fontArr = fontData.list;\r\n    var i;\r\n    var len = fontArr.length;\r\n    var _pendingFonts = len;\r\n    for (i = 0; i < len; i += 1) {\r\n      var shouldLoadFont = true;\r\n      var loadedSelector;\r\n      var j;\r\n      fontArr[i].loaded = false;\r\n      fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\r\n      fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\r\n      if (!fontArr[i].fPath) {\r\n        fontArr[i].loaded = true;\r\n        _pendingFonts -= 1;\r\n      } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\r\n        loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\r\n\r\n        if (loadedSelector.length > 0) {\r\n          shouldLoadFont = false;\r\n        }\r\n\r\n        if (shouldLoadFont) {\r\n          var s = createTag('style');\r\n          s.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n          s.setAttribute('f-origin', fontArr[i].origin);\r\n          s.setAttribute('f-family', fontArr[i].fFamily);\r\n          s.type = 'text/css';\r\n          s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\r\n          defs.appendChild(s);\r\n        }\r\n      } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\r\n        loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\r\n\r\n        for (j = 0; j < loadedSelector.length; j += 1) {\r\n          if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\r\n            // Font is already loaded\r\n            shouldLoadFont = false;\r\n          }\r\n        }\r\n\r\n        if (shouldLoadFont) {\r\n          var l = createTag('link');\r\n          l.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n          l.setAttribute('f-origin', fontArr[i].origin);\r\n          l.type = 'text/css';\r\n          l.rel = 'stylesheet';\r\n          l.href = fontArr[i].fPath;\r\n          document.body.appendChild(l);\r\n        }\r\n      } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\r\n        loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\r\n\r\n        for (j = 0; j < loadedSelector.length; j += 1) {\r\n          if (fontArr[i].fPath === loadedSelector[j].src) {\r\n            // Font is already loaded\r\n            shouldLoadFont = false;\r\n          }\r\n        }\r\n\r\n        if (shouldLoadFont) {\r\n          var sc = createTag('link');\r\n          sc.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n          sc.setAttribute('f-origin', fontArr[i].origin);\r\n          sc.setAttribute('rel', 'stylesheet');\r\n          sc.setAttribute('href', fontArr[i].fPath);\r\n          defs.appendChild(sc);\r\n        }\r\n      }\r\n      fontArr[i].helper = createHelper(defs, fontArr[i]);\r\n      fontArr[i].cache = {};\r\n      this.fonts.push(fontArr[i]);\r\n    }\r\n    if (_pendingFonts === 0) {\r\n      this.isLoaded = true;\r\n    } else {\r\n      // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\r\n      // Adding this timeout seems to fix it\r\n      setTimeout(this.checkLoadedFonts.bind(this), 100);\r\n    }\r\n  }\r\n\r\n  function addChars(chars) {\r\n    if (!chars) {\r\n      return;\r\n    }\r\n    if (!this.chars) {\r\n      this.chars = [];\r\n    }\r\n    var i;\r\n    var len = chars.length;\r\n    var j;\r\n    var jLen = this.chars.length;\r\n    var found;\r\n    for (i = 0; i < len; i += 1) {\r\n      j = 0;\r\n      found = false;\r\n      while (j < jLen) {\r\n        if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\r\n          found = true;\r\n        }\r\n        j += 1;\r\n      }\r\n      if (!found) {\r\n        this.chars.push(chars[i]);\r\n        jLen += 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  function getCharData(char, style, font) {\r\n    var i = 0;\r\n    var len = this.chars.length;\r\n    while (i < len) {\r\n      if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {\r\n        return this.chars[i];\r\n      }\r\n      i += 1;\r\n    }\r\n    if (((typeof char === 'string' && char.charCodeAt(0) !== 13) || !char)\r\n            && console\r\n            && console.warn // eslint-disable-line no-console\r\n            && !this._warned\r\n    ) {\r\n      this._warned = true;\r\n      console.warn('Missing character from exported characters list: ', char, style, font); // eslint-disable-line no-console\r\n    }\r\n    return emptyChar;\r\n  }\r\n\r\n  function measureText(char, fontName, size) {\r\n    var fontData = this.getFontByName(fontName);\r\n    var index = char.charCodeAt(0);\r\n    if (!fontData.cache[index + 1]) {\r\n      var tHelper = fontData.helper;\r\n      // Canvas version\r\n      // fontData.cache[index] = tHelper.measureText(char).width / 100;\r\n      // SVG version\r\n      // console.log(tHelper.getBBox().width)\r\n      if (char === ' ') {\r\n        tHelper.textContent = '|' + char + '|';\r\n        var doubleSize = tHelper.getComputedTextLength();\r\n        tHelper.textContent = '||';\r\n        var singleSize = tHelper.getComputedTextLength();\r\n        fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\r\n      } else {\r\n        tHelper.textContent = char;\r\n        fontData.cache[index + 1] = (tHelper.getComputedTextLength()) / 100;\r\n      }\r\n    }\r\n    return fontData.cache[index + 1] * size;\r\n  }\r\n\r\n  function getFontByName(name) {\r\n    var i = 0;\r\n    var len = this.fonts.length;\r\n    while (i < len) {\r\n      if (this.fonts[i].fName === name) {\r\n        return this.fonts[i];\r\n      }\r\n      i += 1;\r\n    }\r\n    return this.fonts[0];\r\n  }\r\n\r\n  function isModifier(firstCharCode, secondCharCode) {\r\n    var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\r\n    return surrogateModifiers.indexOf(sum) !== -1;\r\n  }\r\n\r\n  function isZeroWidthJoiner(firstCharCode, secondCharCode) {\r\n    if (!secondCharCode) {\r\n      return firstCharCode === zeroWidthJoiner[1];\r\n    }\r\n    return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\r\n  }\r\n\r\n  function isCombinedCharacter(char) {\r\n    return combinedCharacters.indexOf(char) !== -1;\r\n  }\r\n\r\n  function setIsLoaded() {\r\n    this.isLoaded = true;\r\n  }\r\n\r\n  var Font = function () {\r\n    this.fonts = [];\r\n    this.chars = null;\r\n    this.typekitLoaded = 0;\r\n    this.isLoaded = false;\r\n    this._warned = false;\r\n    this.initTime = Date.now();\r\n    this.setIsLoadedBinded = this.setIsLoaded.bind(this);\r\n    this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\r\n  };\r\n  Font.isModifier = isModifier;\r\n  Font.isZeroWidthJoiner = isZeroWidthJoiner;\r\n  Font.isCombinedCharacter = isCombinedCharacter;\r\n\r\n  var fontPrototype = {\r\n    addChars: addChars,\r\n    addFonts: addFonts,\r\n    getCharData: getCharData,\r\n    getFontByName: getFontByName,\r\n    measureText: measureText,\r\n    checkLoadedFonts: checkLoadedFonts,\r\n    setIsLoaded: setIsLoaded,\r\n  };\r\n\r\n  Font.prototype = fontPrototype;\r\n\r\n  return Font;\r\n}());\r\n\r\n/* global initialDefaultFrame, BezierFactory, degToRads, bez, createTypedArray */\r\n/* exported PropertyFactory */\r\n\r\nvar PropertyFactory = (function () {\r\n  var initFrame = initialDefaultFrame;\r\n  var mathAbs = Math.abs;\r\n\r\n  function interpolateValue(frameNum, caching) {\r\n    var offsetTime = this.offsetTime;\r\n    var newValue;\r\n    if (this.propType === 'multidimensional') {\r\n      newValue = createTypedArray('float32', this.pv.length);\r\n    }\r\n    var iterationIndex = caching.lastIndex;\r\n    var i = iterationIndex;\r\n    var len = this.keyframes.length - 1;\r\n    var flag = true;\r\n    var keyData;\r\n    var nextKeyData;\r\n    var keyframeMetadata;\r\n\r\n    while (flag) {\r\n      keyData = this.keyframes[i];\r\n      nextKeyData = this.keyframes[i + 1];\r\n      if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\r\n        if (keyData.h) {\r\n          keyData = nextKeyData;\r\n        }\r\n        iterationIndex = 0;\r\n        break;\r\n      }\r\n      if ((nextKeyData.t - offsetTime) > frameNum) {\r\n        iterationIndex = i;\r\n        break;\r\n      }\r\n      if (i < len - 1) {\r\n        i += 1;\r\n      } else {\r\n        iterationIndex = 0;\r\n        flag = false;\r\n      }\r\n    }\r\n    keyframeMetadata = this.keyframesMetadata[i] || {};\r\n\r\n    var k;\r\n    var kLen;\r\n    var perc;\r\n    var jLen;\r\n    var j;\r\n    var fnc;\r\n    var nextKeyTime = nextKeyData.t - offsetTime;\r\n    var keyTime = keyData.t - offsetTime;\r\n    var endValue;\r\n    if (keyData.to) {\r\n      if (!keyframeMetadata.bezierData) {\r\n        keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\r\n      }\r\n      var bezierData = keyframeMetadata.bezierData;\r\n      if (frameNum >= nextKeyTime || frameNum < keyTime) {\r\n        var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\r\n        kLen = bezierData.points[ind].point.length;\r\n        for (k = 0; k < kLen; k += 1) {\r\n          newValue[k] = bezierData.points[ind].point[k];\r\n        }\r\n        // caching._lastKeyframeIndex = -1;\r\n      } else {\r\n        if (keyframeMetadata.__fnct) {\r\n          fnc = keyframeMetadata.__fnct;\r\n        } else {\r\n          fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\r\n          keyframeMetadata.__fnct = fnc;\r\n        }\r\n        perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\r\n        var distanceInLine = bezierData.segmentLength * perc;\r\n\r\n        var segmentPerc;\r\n        var addedLength = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastAddedLength : 0;\r\n        j = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastPoint : 0;\r\n        flag = true;\r\n        jLen = bezierData.points.length;\r\n        while (flag) {\r\n          addedLength += bezierData.points[j].partialLength;\r\n          if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\r\n            kLen = bezierData.points[j].point.length;\r\n            for (k = 0; k < kLen; k += 1) {\r\n              newValue[k] = bezierData.points[j].point[k];\r\n            }\r\n            break;\r\n          } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\r\n            segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\r\n            kLen = bezierData.points[j].point.length;\r\n            for (k = 0; k < kLen; k += 1) {\r\n              newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\r\n            }\r\n            break;\r\n          }\r\n          if (j < jLen - 1) {\r\n            j += 1;\r\n          } else {\r\n            flag = false;\r\n          }\r\n        }\r\n        caching._lastPoint = j;\r\n        caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\r\n        caching._lastKeyframeIndex = i;\r\n      }\r\n    } else {\r\n      var outX;\r\n      var outY;\r\n      var inX;\r\n      var inY;\r\n      var keyValue;\r\n      len = keyData.s.length;\r\n      endValue = nextKeyData.s || keyData.e;\r\n      if (this.sh && keyData.h !== 1) {\r\n        if (frameNum >= nextKeyTime) {\r\n          newValue[0] = endValue[0];\r\n          newValue[1] = endValue[1];\r\n          newValue[2] = endValue[2];\r\n        } else if (frameNum <= keyTime) {\r\n          newValue[0] = keyData.s[0];\r\n          newValue[1] = keyData.s[1];\r\n          newValue[2] = keyData.s[2];\r\n        } else {\r\n          var quatStart = createQuaternion(keyData.s);\r\n          var quatEnd = createQuaternion(endValue);\r\n          var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\r\n          quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\r\n        }\r\n      } else {\r\n        for (i = 0; i < len; i += 1) {\r\n          if (keyData.h !== 1) {\r\n            if (frameNum >= nextKeyTime) {\r\n              perc = 1;\r\n            } else if (frameNum < keyTime) {\r\n              perc = 0;\r\n            } else {\r\n              if (keyData.o.x.constructor === Array) {\r\n                if (!keyframeMetadata.__fnct) {\r\n                  keyframeMetadata.__fnct = [];\r\n                }\r\n                if (!keyframeMetadata.__fnct[i]) {\r\n                  outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\r\n                  outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\r\n                  inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\r\n                  inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\r\n                  fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\r\n                  keyframeMetadata.__fnct[i] = fnc;\r\n                } else {\r\n                  fnc = keyframeMetadata.__fnct[i];\r\n                }\r\n              } else if (!keyframeMetadata.__fnct) {\r\n                outX = keyData.o.x;\r\n                outY = keyData.o.y;\r\n                inX = keyData.i.x;\r\n                inY = keyData.i.y;\r\n                fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\r\n                keyData.keyframeMetadata = fnc;\r\n              } else {\r\n                fnc = keyframeMetadata.__fnct;\r\n              }\r\n              perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\r\n            }\r\n          }\r\n\r\n          endValue = nextKeyData.s || keyData.e;\r\n          keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\r\n\r\n          if (this.propType === 'multidimensional') {\r\n            newValue[i] = keyValue;\r\n          } else {\r\n            newValue = keyValue;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    caching.lastIndex = iterationIndex;\r\n    return newValue;\r\n  }\r\n\r\n  // based on @Toji's https://github.com/toji/gl-matrix/\r\n  function slerp(a, b, t) {\r\n    var out = [];\r\n    var ax = a[0];\r\n    var ay = a[1];\r\n    var az = a[2];\r\n    var aw = a[3];\r\n    var bx = b[0];\r\n    var by = b[1];\r\n    var bz = b[2];\r\n    var bw = b[3];\r\n\r\n    var omega;\r\n    var cosom;\r\n    var sinom;\r\n    var scale0;\r\n    var scale1;\r\n\r\n    cosom = ax * bx + ay * by + az * bz + aw * bw;\r\n    if (cosom < 0.0) {\r\n      cosom = -cosom;\r\n      bx = -bx;\r\n      by = -by;\r\n      bz = -bz;\r\n      bw = -bw;\r\n    }\r\n    if ((1.0 - cosom) > 0.000001) {\r\n      omega = Math.acos(cosom);\r\n      sinom = Math.sin(omega);\r\n      scale0 = Math.sin((1.0 - t) * omega) / sinom;\r\n      scale1 = Math.sin(t * omega) / sinom;\r\n    } else {\r\n      scale0 = 1.0 - t;\r\n      scale1 = t;\r\n    }\r\n    out[0] = scale0 * ax + scale1 * bx;\r\n    out[1] = scale0 * ay + scale1 * by;\r\n    out[2] = scale0 * az + scale1 * bz;\r\n    out[3] = scale0 * aw + scale1 * bw;\r\n\r\n    return out;\r\n  }\r\n\r\n  function quaternionToEuler(out, quat) {\r\n    var qx = quat[0];\r\n    var qy = quat[1];\r\n    var qz = quat[2];\r\n    var qw = quat[3];\r\n    var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\r\n    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\r\n    var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\r\n    out[0] = heading / degToRads;\r\n    out[1] = attitude / degToRads;\r\n    out[2] = bank / degToRads;\r\n  }\r\n\r\n  function createQuaternion(values) {\r\n    var heading = values[0] * degToRads;\r\n    var attitude = values[1] * degToRads;\r\n    var bank = values[2] * degToRads;\r\n    var c1 = Math.cos(heading / 2);\r\n    var c2 = Math.cos(attitude / 2);\r\n    var c3 = Math.cos(bank / 2);\r\n    var s1 = Math.sin(heading / 2);\r\n    var s2 = Math.sin(attitude / 2);\r\n    var s3 = Math.sin(bank / 2);\r\n    var w = c1 * c2 * c3 - s1 * s2 * s3;\r\n    var x = s1 * s2 * c3 + c1 * c2 * s3;\r\n    var y = s1 * c2 * c3 + c1 * s2 * s3;\r\n    var z = c1 * s2 * c3 - s1 * c2 * s3;\r\n\r\n    return [x, y, z, w];\r\n  }\r\n\r\n  function getValueAtCurrentTime() {\r\n    var frameNum = this.comp.renderedFrame - this.offsetTime;\r\n    var initTime = this.keyframes[0].t - this.offsetTime;\r\n    var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\r\n    if (!(frameNum === this._caching.lastFrame || (this._caching.lastFrame !== initFrame && ((this._caching.lastFrame >= endTime && frameNum >= endTime) || (this._caching.lastFrame < initTime && frameNum < initTime))))) {\r\n      if (this._caching.lastFrame >= frameNum) {\r\n        this._caching._lastKeyframeIndex = -1;\r\n        this._caching.lastIndex = 0;\r\n      }\r\n\r\n      var renderResult = this.interpolateValue(frameNum, this._caching);\r\n      this.pv = renderResult;\r\n    }\r\n    this._caching.lastFrame = frameNum;\r\n    return this.pv;\r\n  }\r\n\r\n  function setVValue(val) {\r\n    var multipliedValue;\r\n    if (this.propType === 'unidimensional') {\r\n      multipliedValue = val * this.mult;\r\n      if (mathAbs(this.v - multipliedValue) > 0.00001) {\r\n        this.v = multipliedValue;\r\n        this._mdf = true;\r\n      }\r\n    } else {\r\n      var i = 0;\r\n      var len = this.v.length;\r\n      while (i < len) {\r\n        multipliedValue = val[i] * this.mult;\r\n        if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\r\n          this.v[i] = multipliedValue;\r\n          this._mdf = true;\r\n        }\r\n        i += 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  function processEffectsSequence() {\r\n    if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\r\n      return;\r\n    }\r\n    if (this.lock) {\r\n      this.setVValue(this.pv);\r\n      return;\r\n    }\r\n    this.lock = true;\r\n    this._mdf = this._isFirstFrame;\r\n    var i;\r\n    var len = this.effectsSequence.length;\r\n    var finalValue = this.kf ? this.pv : this.data.k;\r\n    for (i = 0; i < len; i += 1) {\r\n      finalValue = this.effectsSequence[i](finalValue);\r\n    }\r\n    this.setVValue(finalValue);\r\n    this._isFirstFrame = false;\r\n    this.lock = false;\r\n    this.frameId = this.elem.globalData.frameId;\r\n  }\r\n\r\n  function addEffect(effectFunction) {\r\n    this.effectsSequence.push(effectFunction);\r\n    this.container.addDynamicProperty(this);\r\n  }\r\n\r\n  function ValueProperty(elem, data, mult, container) {\r\n    this.propType = 'unidimensional';\r\n    this.mult = mult || 1;\r\n    this.data = data;\r\n    this.v = mult ? data.k * mult : data.k;\r\n    this.pv = data.k;\r\n    this._mdf = false;\r\n    this.elem = elem;\r\n    this.container = container;\r\n    this.comp = elem.comp;\r\n    this.k = false;\r\n    this.kf = false;\r\n    this.vel = 0;\r\n    this.effectsSequence = [];\r\n    this._isFirstFrame = true;\r\n    this.getValue = processEffectsSequence;\r\n    this.setVValue = setVValue;\r\n    this.addEffect = addEffect;\r\n  }\r\n\r\n  function MultiDimensionalProperty(elem, data, mult, container) {\r\n    this.propType = 'multidimensional';\r\n    this.mult = mult || 1;\r\n    this.data = data;\r\n    this._mdf = false;\r\n    this.elem = elem;\r\n    this.container = container;\r\n    this.comp = elem.comp;\r\n    this.k = false;\r\n    this.kf = false;\r\n    this.frameId = -1;\r\n    var i;\r\n    var len = data.k.length;\r\n    this.v = createTypedArray('float32', len);\r\n    this.pv = createTypedArray('float32', len);\r\n    this.vel = createTypedArray('float32', len);\r\n    for (i = 0; i < len; i += 1) {\r\n      this.v[i] = data.k[i] * this.mult;\r\n      this.pv[i] = data.k[i];\r\n    }\r\n    this._isFirstFrame = true;\r\n    this.effectsSequence = [];\r\n    this.getValue = processEffectsSequence;\r\n    this.setVValue = setVValue;\r\n    this.addEffect = addEffect;\r\n  }\r\n\r\n  function KeyframedValueProperty(elem, data, mult, container) {\r\n    this.propType = 'unidimensional';\r\n    this.keyframes = data.k;\r\n    this.keyframesMetadata = [];\r\n    this.offsetTime = elem.data.st;\r\n    this.frameId = -1;\r\n    this._caching = {\r\n      lastFrame: initFrame, lastIndex: 0, value: 0, _lastKeyframeIndex: -1,\r\n    };\r\n    this.k = true;\r\n    this.kf = true;\r\n    this.data = data;\r\n    this.mult = mult || 1;\r\n    this.elem = elem;\r\n    this.container = container;\r\n    this.comp = elem.comp;\r\n    this.v = initFrame;\r\n    this.pv = initFrame;\r\n    this._isFirstFrame = true;\r\n    this.getValue = processEffectsSequence;\r\n    this.setVValue = setVValue;\r\n    this.interpolateValue = interpolateValue;\r\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\r\n    this.addEffect = addEffect;\r\n  }\r\n\r\n  function KeyframedMultidimensionalProperty(elem, data, mult, container) {\r\n    this.propType = 'multidimensional';\r\n    var i;\r\n    var len = data.k.length;\r\n    var s;\r\n    var e;\r\n    var to;\r\n    var ti;\r\n    for (i = 0; i < len - 1; i += 1) {\r\n      if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\r\n        s = data.k[i].s;\r\n        e = data.k[i + 1].s;\r\n        to = data.k[i].to;\r\n        ti = data.k[i].ti;\r\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]))) {\r\n          data.k[i].to = null;\r\n          data.k[i].ti = null;\r\n        }\r\n        if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\r\n          if (s.length === 2 || (s[2] === e[2] && to[2] === 0 && ti[2] === 0)) {\r\n            data.k[i].to = null;\r\n            data.k[i].ti = null;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\r\n    this.data = data;\r\n    this.keyframes = data.k;\r\n    this.keyframesMetadata = [];\r\n    this.offsetTime = elem.data.st;\r\n    this.k = true;\r\n    this.kf = true;\r\n    this._isFirstFrame = true;\r\n    this.mult = mult || 1;\r\n    this.elem = elem;\r\n    this.container = container;\r\n    this.comp = elem.comp;\r\n    this.getValue = processEffectsSequence;\r\n    this.setVValue = setVValue;\r\n    this.interpolateValue = interpolateValue;\r\n    this.frameId = -1;\r\n    var arrLen = data.k[0].s.length;\r\n    this.v = createTypedArray('float32', arrLen);\r\n    this.pv = createTypedArray('float32', arrLen);\r\n    for (i = 0; i < arrLen; i += 1) {\r\n      this.v[i] = initFrame;\r\n      this.pv[i] = initFrame;\r\n    }\r\n    this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray('float32', arrLen) };\r\n    this.addEffect = addEffect;\r\n  }\r\n\r\n  function getProp(elem, data, type, mult, container) {\r\n    var p;\r\n    if (!data.k.length) {\r\n      p = new ValueProperty(elem, data, mult, container);\r\n    } else if (typeof (data.k[0]) === 'number') {\r\n      p = new MultiDimensionalProperty(elem, data, mult, container);\r\n    } else {\r\n      switch (type) {\r\n        case 0:\r\n          p = new KeyframedValueProperty(elem, data, mult, container);\r\n          break;\r\n        case 1:\r\n          p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n    }\r\n    if (p.effectsSequence.length) {\r\n      container.addDynamicProperty(p);\r\n    }\r\n    return p;\r\n  }\r\n\r\n  var ob = {\r\n    getProp: getProp,\r\n  };\r\n  return ob;\r\n}());\r\n\r\n/* global Matrix, degToRads, PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\n/* exported TransformPropertyFactory */\r\n\r\nvar TransformPropertyFactory = (function () {\r\n  var defaultVector = [0, 0];\r\n\r\n  function applyToMatrix(mat) {\r\n    var _mdf = this._mdf;\r\n    this.iterateDynamicProperties();\r\n    this._mdf = this._mdf || _mdf;\r\n    if (this.a) {\r\n      mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n    }\r\n    if (this.s) {\r\n      mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n    }\r\n    if (this.sk) {\r\n      mat.skewFromAxis(-this.sk.v, this.sa.v);\r\n    }\r\n    if (this.r) {\r\n      mat.rotate(-this.r.v);\r\n    } else {\r\n      mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\r\n        .rotateY(this.or.v[1])\r\n        .rotateX(this.or.v[0]);\r\n    }\r\n    if (this.data.p.s) {\r\n      if (this.data.p.z) {\r\n        mat.translate(this.px.v, this.py.v, -this.pz.v);\r\n      } else {\r\n        mat.translate(this.px.v, this.py.v, 0);\r\n      }\r\n    } else {\r\n      mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\r\n    }\r\n  }\r\n  function processKeys(forceRender) {\r\n    if (this.elem.globalData.frameId === this.frameId) {\r\n      return;\r\n    }\r\n    if (this._isDirty) {\r\n      this.precalculateMatrix();\r\n      this._isDirty = false;\r\n    }\r\n\r\n    this.iterateDynamicProperties();\r\n\r\n    if (this._mdf || forceRender) {\r\n      var frameRate;\r\n      this.v.cloneFromProps(this.pre.props);\r\n      if (this.appliedTransformations < 1) {\r\n        this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n      }\r\n      if (this.appliedTransformations < 2) {\r\n        this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n      }\r\n      if (this.sk && this.appliedTransformations < 3) {\r\n        this.v.skewFromAxis(-this.sk.v, this.sa.v);\r\n      }\r\n      if (this.r && this.appliedTransformations < 4) {\r\n        this.v.rotate(-this.r.v);\r\n      } else if (!this.r && this.appliedTransformations < 4) {\r\n        this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\r\n          .rotateY(this.or.v[1])\r\n          .rotateX(this.or.v[0]);\r\n      }\r\n      if (this.autoOriented) {\r\n        var v1;\r\n        var v2;\r\n        frameRate = this.elem.globalData.frameRate;\r\n        if (this.p && this.p.keyframes && this.p.getValueAtTime) {\r\n          if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\r\n            v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\r\n            v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\r\n          } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\r\n            v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / frameRate), 0);\r\n            v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\r\n          } else {\r\n            v1 = this.p.pv;\r\n            v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\r\n          }\r\n        } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\r\n          v1 = [];\r\n          v2 = [];\r\n          var px = this.px;\r\n          var py = this.py;\r\n          if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\r\n            v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\r\n            v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\r\n            v2[0] = px.getValueAtTime((px.keyframes[0].t) / frameRate, 0);\r\n            v2[1] = py.getValueAtTime((py.keyframes[0].t) / frameRate, 0);\r\n          } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\r\n            v1[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t / frameRate), 0);\r\n            v1[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t / frameRate), 0);\r\n            v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\r\n            v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\r\n          } else {\r\n            v1 = [px.pv, py.pv];\r\n            v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\r\n            v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\r\n          }\r\n        } else {\r\n          v2 = defaultVector;\r\n          v1 = v2;\r\n        }\r\n        this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\r\n      }\r\n      if (this.data.p && this.data.p.s) {\r\n        if (this.data.p.z) {\r\n          this.v.translate(this.px.v, this.py.v, -this.pz.v);\r\n        } else {\r\n          this.v.translate(this.px.v, this.py.v, 0);\r\n        }\r\n      } else {\r\n        this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\r\n      }\r\n    }\r\n    this.frameId = this.elem.globalData.frameId;\r\n  }\r\n\r\n  function precalculateMatrix() {\r\n    if (!this.a.k) {\r\n      this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n      this.appliedTransformations = 1;\r\n    } else {\r\n      return;\r\n    }\r\n    if (!this.s.effectsSequence.length) {\r\n      this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n      this.appliedTransformations = 2;\r\n    } else {\r\n      return;\r\n    }\r\n    if (this.sk) {\r\n      if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\r\n        this.pre.skewFromAxis(-this.sk.v, this.sa.v);\r\n        this.appliedTransformations = 3;\r\n      } else {\r\n        return;\r\n      }\r\n    }\r\n    if (this.r) {\r\n      if (!this.r.effectsSequence.length) {\r\n        this.pre.rotate(-this.r.v);\r\n        this.appliedTransformations = 4;\r\n      }\r\n    } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\r\n      this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\r\n        .rotateY(this.or.v[1])\r\n        .rotateX(this.or.v[0]);\r\n      this.appliedTransformations = 4;\r\n    }\r\n  }\r\n\r\n  function autoOrient() {\r\n    //\r\n    // var prevP = this.getValueAtTime();\r\n  }\r\n\r\n  function addDynamicProperty(prop) {\r\n    this._addDynamicProperty(prop);\r\n    this.elem.addDynamicProperty(prop);\r\n    this._isDirty = true;\r\n  }\r\n\r\n  function TransformProperty(elem, data, container) {\r\n    this.elem = elem;\r\n    this.frameId = -1;\r\n    this.propType = 'transform';\r\n    this.data = data;\r\n    this.v = new Matrix();\r\n    // Precalculated matrix with non animated properties\r\n    this.pre = new Matrix();\r\n    this.appliedTransformations = 0;\r\n    this.initDynamicPropertyContainer(container || elem);\r\n    if (data.p && data.p.s) {\r\n      this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\r\n      this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\r\n      if (data.p.z) {\r\n        this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\r\n      }\r\n    } else {\r\n      this.p = PropertyFactory.getProp(elem, data.p || { k: [0, 0, 0] }, 1, 0, this);\r\n    }\r\n    if (data.rx) {\r\n      this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\r\n      this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\r\n      this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\r\n      if (data.or.k[0].ti) {\r\n        var i;\r\n        var len = data.or.k.length;\r\n        for (i = 0; i < len; i += 1) {\r\n          data.or.k[i].to = null;\r\n          data.or.k[i].ti = null;\r\n        }\r\n      }\r\n      this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\r\n      // sh Indicates it needs to be capped between -180 and 180\r\n      this.or.sh = true;\r\n    } else {\r\n      this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this);\r\n    }\r\n    if (data.sk) {\r\n      this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\r\n      this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\r\n    }\r\n    this.a = PropertyFactory.getProp(elem, data.a || { k: [0, 0, 0] }, 1, 0, this);\r\n    this.s = PropertyFactory.getProp(elem, data.s || { k: [100, 100, 100] }, 1, 0.01, this);\r\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.\r\n    if (data.o) {\r\n      this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\r\n    } else {\r\n      this.o = { _mdf: false, v: 1 };\r\n    }\r\n    this._isDirty = true;\r\n    if (!this.dynamicProperties.length) {\r\n      this.getValue(true);\r\n    }\r\n  }\r\n\r\n  TransformProperty.prototype = {\r\n    applyToMatrix: applyToMatrix,\r\n    getValue: processKeys,\r\n    precalculateMatrix: precalculateMatrix,\r\n    autoOrient: autoOrient,\r\n  };\r\n\r\n  extendPrototype([DynamicPropertyContainer], TransformProperty);\r\n  TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\r\n  TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\r\n\r\n  function getTransformProperty(elem, data, container) {\r\n    return new TransformProperty(elem, data, container);\r\n  }\r\n\r\n  return {\r\n    getTransformProperty: getTransformProperty,\r\n  };\r\n}());\r\n\r\n/* global createSizedArray, createSizedArray, pointPool */\r\n\r\nfunction ShapePath() {\r\n  this.c = false;\r\n  this._length = 0;\r\n  this._maxLength = 8;\r\n  this.v = createSizedArray(this._maxLength);\r\n  this.o = createSizedArray(this._maxLength);\r\n  this.i = createSizedArray(this._maxLength);\r\n}\r\n\r\nShapePath.prototype.setPathData = function (closed, len) {\r\n  this.c = closed;\r\n  this.setLength(len);\r\n  var i = 0;\r\n  while (i < len) {\r\n    this.v[i] = pointPool.newElement();\r\n    this.o[i] = pointPool.newElement();\r\n    this.i[i] = pointPool.newElement();\r\n    i += 1;\r\n  }\r\n};\r\n\r\nShapePath.prototype.setLength = function (len) {\r\n  while (this._maxLength < len) {\r\n    this.doubleArrayLength();\r\n  }\r\n  this._length = len;\r\n};\r\n\r\nShapePath.prototype.doubleArrayLength = function () {\r\n  this.v = this.v.concat(createSizedArray(this._maxLength));\r\n  this.i = this.i.concat(createSizedArray(this._maxLength));\r\n  this.o = this.o.concat(createSizedArray(this._maxLength));\r\n  this._maxLength *= 2;\r\n};\r\n\r\nShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\r\n  var arr;\r\n  this._length = Math.max(this._length, pos + 1);\r\n  if (this._length >= this._maxLength) {\r\n    this.doubleArrayLength();\r\n  }\r\n  switch (type) {\r\n    case 'v':\r\n      arr = this.v;\r\n      break;\r\n    case 'i':\r\n      arr = this.i;\r\n      break;\r\n    case 'o':\r\n      arr = this.o;\r\n      break;\r\n    default:\r\n      arr = [];\r\n      break;\r\n  }\r\n  if (!arr[pos] || (arr[pos] && !replace)) {\r\n    arr[pos] = pointPool.newElement();\r\n  }\r\n  arr[pos][0] = x;\r\n  arr[pos][1] = y;\r\n};\r\n\r\nShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\r\n  this.setXYAt(vX, vY, 'v', pos, replace);\r\n  this.setXYAt(oX, oY, 'o', pos, replace);\r\n  this.setXYAt(iX, iY, 'i', pos, replace);\r\n};\r\n\r\nShapePath.prototype.reverse = function () {\r\n  var newPath = new ShapePath();\r\n  newPath.setPathData(this.c, this._length);\r\n  var vertices = this.v;\r\n  var outPoints = this.o;\r\n  var inPoints = this.i;\r\n  var init = 0;\r\n  if (this.c) {\r\n    newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\r\n    init = 1;\r\n  }\r\n  var cnt = this._length - 1;\r\n  var len = this._length;\r\n\r\n  var i;\r\n  for (i = init; i < len; i += 1) {\r\n    newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\r\n    cnt -= 1;\r\n  }\r\n  return newPath;\r\n};\r\n\r\n/* global extendPrototype, roundCorner, BezierFactory, shapePool, degToRads,\r\n  shapeCollectionPool, PropertyFactory, bmMin, DynamicPropertyContainer */\r\n/* exported ShapePropertyFactory */\r\n\r\nvar ShapePropertyFactory = (function () {\r\n  var initFrame = -999999;\r\n\r\n  function interpolateShape(frameNum, previousValue, caching) {\r\n    var iterationIndex = caching.lastIndex;\r\n    var keyPropS;\r\n    var keyPropE;\r\n    var isHold;\r\n    var j;\r\n    var k;\r\n    var jLen;\r\n    var kLen;\r\n    var perc;\r\n    var vertexValue;\r\n    var kf = this.keyframes;\r\n    if (frameNum < kf[0].t - this.offsetTime) {\r\n      keyPropS = kf[0].s[0];\r\n      isHold = true;\r\n      iterationIndex = 0;\r\n    } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\r\n      keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\r\n      /* if(kf[kf.length - 1].s){\r\n                keyPropS = kf[kf.length - 1].s[0];\r\n            }else{\r\n                keyPropS = kf[kf.length - 2].e[0];\r\n            } */\r\n      isHold = true;\r\n    } else {\r\n      var i = iterationIndex;\r\n      var len = kf.length - 1;\r\n      var flag = true;\r\n      var keyData;\r\n      var nextKeyData;\r\n      var keyframeMetadata;\r\n      while (flag) {\r\n        keyData = kf[i];\r\n        nextKeyData = kf[i + 1];\r\n        if ((nextKeyData.t - this.offsetTime) > frameNum) {\r\n          break;\r\n        }\r\n        if (i < len - 1) {\r\n          i += 1;\r\n        } else {\r\n          flag = false;\r\n        }\r\n      }\r\n      keyframeMetadata = this.keyframesMetadata[i] || {};\r\n      isHold = keyData.h === 1;\r\n      iterationIndex = i;\r\n      if (!isHold) {\r\n        if (frameNum >= nextKeyData.t - this.offsetTime) {\r\n          perc = 1;\r\n        } else if (frameNum < keyData.t - this.offsetTime) {\r\n          perc = 0;\r\n        } else {\r\n          var fnc;\r\n          if (keyframeMetadata.__fnct) {\r\n            fnc = keyframeMetadata.__fnct;\r\n          } else {\r\n            fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\r\n            keyframeMetadata.__fnct = fnc;\r\n          }\r\n          perc = fnc((frameNum - (keyData.t - this.offsetTime)) / ((nextKeyData.t - this.offsetTime) - (keyData.t - this.offsetTime)));\r\n        }\r\n        keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\r\n      }\r\n      keyPropS = keyData.s[0];\r\n    }\r\n    jLen = previousValue._length;\r\n    kLen = keyPropS.i[0].length;\r\n    caching.lastIndex = iterationIndex;\r\n\r\n    for (j = 0; j < jLen; j += 1) {\r\n      for (k = 0; k < kLen; k += 1) {\r\n        vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\r\n        previousValue.i[j][k] = vertexValue;\r\n        vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\r\n        previousValue.o[j][k] = vertexValue;\r\n        vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\r\n        previousValue.v[j][k] = vertexValue;\r\n      }\r\n    }\r\n  }\r\n\r\n  function interpolateShapeCurrentTime() {\r\n    var frameNum = this.comp.renderedFrame - this.offsetTime;\r\n    var initTime = this.keyframes[0].t - this.offsetTime;\r\n    var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\r\n    var lastFrame = this._caching.lastFrame;\r\n    if (!(lastFrame !== initFrame && ((lastFrame < initTime && frameNum < initTime) || (lastFrame > endTime && frameNum > endTime)))) {\r\n      /// /\r\n      this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\r\n      this.interpolateShape(frameNum, this.pv, this._caching);\r\n      /// /\r\n    }\r\n    this._caching.lastFrame = frameNum;\r\n    return this.pv;\r\n  }\r\n\r\n  function resetShape() {\r\n    this.paths = this.localShapeCollection;\r\n  }\r\n\r\n  function shapesEqual(shape1, shape2) {\r\n    if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\r\n      return false;\r\n    }\r\n    var i;\r\n    var len = shape1._length;\r\n    for (i = 0; i < len; i += 1) {\r\n      if (shape1.v[i][0] !== shape2.v[i][0]\r\n            || shape1.v[i][1] !== shape2.v[i][1]\r\n            || shape1.o[i][0] !== shape2.o[i][0]\r\n            || shape1.o[i][1] !== shape2.o[i][1]\r\n            || shape1.i[i][0] !== shape2.i[i][0]\r\n            || shape1.i[i][1] !== shape2.i[i][1]) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  function setVValue(newPath) {\r\n    if (!shapesEqual(this.v, newPath)) {\r\n      this.v = shapePool.clone(newPath);\r\n      this.localShapeCollection.releaseShapes();\r\n      this.localShapeCollection.addShape(this.v);\r\n      this._mdf = true;\r\n      this.paths = this.localShapeCollection;\r\n    }\r\n  }\r\n\r\n  function processEffectsSequence() {\r\n    if (this.elem.globalData.frameId === this.frameId) {\r\n      return;\r\n    } if (!this.effectsSequence.length) {\r\n      this._mdf = false;\r\n      return;\r\n    }\r\n    if (this.lock) {\r\n      this.setVValue(this.pv);\r\n      return;\r\n    }\r\n    this.lock = true;\r\n    this._mdf = false;\r\n    var finalValue;\r\n    if (this.kf) {\r\n      finalValue = this.pv;\r\n    } else if (this.data.ks) {\r\n      finalValue = this.data.ks.k;\r\n    } else {\r\n      finalValue = this.data.pt.k;\r\n    }\r\n    var i;\r\n    var len = this.effectsSequence.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      finalValue = this.effectsSequence[i](finalValue);\r\n    }\r\n    this.setVValue(finalValue);\r\n    this.lock = false;\r\n    this.frameId = this.elem.globalData.frameId;\r\n  }\r\n\r\n  function ShapeProperty(elem, data, type) {\r\n    this.propType = 'shape';\r\n    this.comp = elem.comp;\r\n    this.container = elem;\r\n    this.elem = elem;\r\n    this.data = data;\r\n    this.k = false;\r\n    this.kf = false;\r\n    this._mdf = false;\r\n    var pathData = type === 3 ? data.pt.k : data.ks.k;\r\n    this.v = shapePool.clone(pathData);\r\n    this.pv = shapePool.clone(this.v);\r\n    this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n    this.paths = this.localShapeCollection;\r\n    this.paths.addShape(this.v);\r\n    this.reset = resetShape;\r\n    this.effectsSequence = [];\r\n  }\r\n\r\n  function addEffect(effectFunction) {\r\n    this.effectsSequence.push(effectFunction);\r\n    this.container.addDynamicProperty(this);\r\n  }\r\n\r\n  ShapeProperty.prototype.interpolateShape = interpolateShape;\r\n  ShapeProperty.prototype.getValue = processEffectsSequence;\r\n  ShapeProperty.prototype.setVValue = setVValue;\r\n  ShapeProperty.prototype.addEffect = addEffect;\r\n\r\n  function KeyframedShapeProperty(elem, data, type) {\r\n    this.propType = 'shape';\r\n    this.comp = elem.comp;\r\n    this.elem = elem;\r\n    this.container = elem;\r\n    this.offsetTime = elem.data.st;\r\n    this.keyframes = type === 3 ? data.pt.k : data.ks.k;\r\n    this.keyframesMetadata = [];\r\n    this.k = true;\r\n    this.kf = true;\r\n    var len = this.keyframes[0].s[0].i.length;\r\n    this.v = shapePool.newElement();\r\n    this.v.setPathData(this.keyframes[0].s[0].c, len);\r\n    this.pv = shapePool.clone(this.v);\r\n    this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n    this.paths = this.localShapeCollection;\r\n    this.paths.addShape(this.v);\r\n    this.lastFrame = initFrame;\r\n    this.reset = resetShape;\r\n    this._caching = { lastFrame: initFrame, lastIndex: 0 };\r\n    this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\r\n  }\r\n  KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\r\n  KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\r\n  KeyframedShapeProperty.prototype.setVValue = setVValue;\r\n  KeyframedShapeProperty.prototype.addEffect = addEffect;\r\n\r\n  var EllShapeProperty = (function () {\r\n    var cPoint = roundCorner;\r\n\r\n    function EllShapePropertyFactory(elem, data) {\r\n      /* this.v = {\r\n                v: createSizedArray(4),\r\n                i: createSizedArray(4),\r\n                o: createSizedArray(4),\r\n                c: true\r\n            }; */\r\n      this.v = shapePool.newElement();\r\n      this.v.setPathData(true, 4);\r\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n      this.paths = this.localShapeCollection;\r\n      this.localShapeCollection.addShape(this.v);\r\n      this.d = data.d;\r\n      this.elem = elem;\r\n      this.comp = elem.comp;\r\n      this.frameId = -1;\r\n      this.initDynamicPropertyContainer(elem);\r\n      this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n      this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\r\n      if (this.dynamicProperties.length) {\r\n        this.k = true;\r\n      } else {\r\n        this.k = false;\r\n        this.convertEllToPath();\r\n      }\r\n    }\r\n\r\n    EllShapePropertyFactory.prototype = {\r\n      reset: resetShape,\r\n      getValue: function () {\r\n        if (this.elem.globalData.frameId === this.frameId) {\r\n          return;\r\n        }\r\n        this.frameId = this.elem.globalData.frameId;\r\n        this.iterateDynamicProperties();\r\n\r\n        if (this._mdf) {\r\n          this.convertEllToPath();\r\n        }\r\n      },\r\n      convertEllToPath: function () {\r\n        var p0 = this.p.v[0];\r\n        var p1 = this.p.v[1];\r\n        var s0 = this.s.v[0] / 2;\r\n        var s1 = this.s.v[1] / 2;\r\n        var _cw = this.d !== 3;\r\n        var _v = this.v;\r\n        _v.v[0][0] = p0;\r\n        _v.v[0][1] = p1 - s1;\r\n        _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n        _v.v[1][1] = p1;\r\n        _v.v[2][0] = p0;\r\n        _v.v[2][1] = p1 + s1;\r\n        _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n        _v.v[3][1] = p1;\r\n        _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\r\n        _v.i[0][1] = p1 - s1;\r\n        _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n        _v.i[1][1] = p1 - s1 * cPoint;\r\n        _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\r\n        _v.i[2][1] = p1 + s1;\r\n        _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n        _v.i[3][1] = p1 + s1 * cPoint;\r\n        _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\r\n        _v.o[0][1] = p1 - s1;\r\n        _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n        _v.o[1][1] = p1 + s1 * cPoint;\r\n        _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\r\n        _v.o[2][1] = p1 + s1;\r\n        _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n        _v.o[3][1] = p1 - s1 * cPoint;\r\n      },\r\n    };\r\n\r\n    extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\r\n\r\n    return EllShapePropertyFactory;\r\n  }());\r\n\r\n  var StarShapeProperty = (function () {\r\n    function StarShapePropertyFactory(elem, data) {\r\n      this.v = shapePool.newElement();\r\n      this.v.setPathData(true, 0);\r\n      this.elem = elem;\r\n      this.comp = elem.comp;\r\n      this.data = data;\r\n      this.frameId = -1;\r\n      this.d = data.d;\r\n      this.initDynamicPropertyContainer(elem);\r\n      if (data.sy === 1) {\r\n        this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\r\n        this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\r\n        this.convertToPath = this.convertStarToPath;\r\n      } else {\r\n        this.convertToPath = this.convertPolygonToPath;\r\n      }\r\n      this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\r\n      this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n      this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\r\n      this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\r\n      this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\r\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n      this.localShapeCollection.addShape(this.v);\r\n      this.paths = this.localShapeCollection;\r\n      if (this.dynamicProperties.length) {\r\n        this.k = true;\r\n      } else {\r\n        this.k = false;\r\n        this.convertToPath();\r\n      }\r\n    }\r\n\r\n    StarShapePropertyFactory.prototype = {\r\n      reset: resetShape,\r\n      getValue: function () {\r\n        if (this.elem.globalData.frameId === this.frameId) {\r\n          return;\r\n        }\r\n        this.frameId = this.elem.globalData.frameId;\r\n        this.iterateDynamicProperties();\r\n        if (this._mdf) {\r\n          this.convertToPath();\r\n        }\r\n      },\r\n      convertStarToPath: function () {\r\n        var numPts = Math.floor(this.pt.v) * 2;\r\n        var angle = (Math.PI * 2) / numPts;\r\n        /* this.v.v.length = numPts;\r\n                this.v.i.length = numPts;\r\n                this.v.o.length = numPts; */\r\n        var longFlag = true;\r\n        var longRad = this.or.v;\r\n        var shortRad = this.ir.v;\r\n        var longRound = this.os.v;\r\n        var shortRound = this.is.v;\r\n        var longPerimSegment = (2 * Math.PI * longRad) / (numPts * 2);\r\n        var shortPerimSegment = (2 * Math.PI * shortRad) / (numPts * 2);\r\n        var i;\r\n        var rad;\r\n        var roundness;\r\n        var perimSegment;\r\n        var currentAng = -Math.PI / 2;\r\n        currentAng += this.r.v;\r\n        var dir = this.data.d === 3 ? -1 : 1;\r\n        this.v._length = 0;\r\n        for (i = 0; i < numPts; i += 1) {\r\n          rad = longFlag ? longRad : shortRad;\r\n          roundness = longFlag ? longRound : shortRound;\r\n          perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\r\n          var x = rad * Math.cos(currentAng);\r\n          var y = rad * Math.sin(currentAng);\r\n          var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\r\n          var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\r\n          x += +this.p.v[0];\r\n          y += +this.p.v[1];\r\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);\r\n\r\n          /* this.v.v[i] = [x,y];\r\n                    this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n                    this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n                    this.v._length = numPts; */\r\n          longFlag = !longFlag;\r\n          currentAng += angle * dir;\r\n        }\r\n      },\r\n      convertPolygonToPath: function () {\r\n        var numPts = Math.floor(this.pt.v);\r\n        var angle = (Math.PI * 2) / numPts;\r\n        var rad = this.or.v;\r\n        var roundness = this.os.v;\r\n        var perimSegment = (2 * Math.PI * rad) / (numPts * 4);\r\n        var i;\r\n        var currentAng = -Math.PI * 0.5;\r\n        var dir = this.data.d === 3 ? -1 : 1;\r\n        currentAng += this.r.v;\r\n        this.v._length = 0;\r\n        for (i = 0; i < numPts; i += 1) {\r\n          var x = rad * Math.cos(currentAng);\r\n          var y = rad * Math.sin(currentAng);\r\n          var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\r\n          var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\r\n          x += +this.p.v[0];\r\n          y += +this.p.v[1];\r\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);\r\n          currentAng += angle * dir;\r\n        }\r\n        this.paths.length = 0;\r\n        this.paths[0] = this.v;\r\n      },\r\n\r\n    };\r\n    extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\r\n\r\n    return StarShapePropertyFactory;\r\n  }());\r\n\r\n  var RectShapeProperty = (function () {\r\n    function RectShapePropertyFactory(elem, data) {\r\n      this.v = shapePool.newElement();\r\n      this.v.c = true;\r\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n      this.localShapeCollection.addShape(this.v);\r\n      this.paths = this.localShapeCollection;\r\n      this.elem = elem;\r\n      this.comp = elem.comp;\r\n      this.frameId = -1;\r\n      this.d = data.d;\r\n      this.initDynamicPropertyContainer(elem);\r\n      this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n      this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\r\n      this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\r\n      if (this.dynamicProperties.length) {\r\n        this.k = true;\r\n      } else {\r\n        this.k = false;\r\n        this.convertRectToPath();\r\n      }\r\n    }\r\n\r\n    RectShapePropertyFactory.prototype = {\r\n      convertRectToPath: function () {\r\n        var p0 = this.p.v[0];\r\n        var p1 = this.p.v[1];\r\n        var v0 = this.s.v[0] / 2;\r\n        var v1 = this.s.v[1] / 2;\r\n        var round = bmMin(v0, v1, this.r.v);\r\n        var cPoint = round * (1 - roundCorner);\r\n        this.v._length = 0;\r\n\r\n        if (this.d === 2 || this.d === 1) {\r\n          this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\r\n          this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\r\n          if (round !== 0) {\r\n            this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\r\n            this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\r\n            this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\r\n            this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\r\n            this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\r\n            this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\r\n          } else {\r\n            this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\r\n            this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\r\n          }\r\n        } else {\r\n          this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\r\n          if (round !== 0) {\r\n            this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\r\n            this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\r\n            this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\r\n            this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\r\n            this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\r\n            this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\r\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\r\n          } else {\r\n            this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\r\n            this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\r\n            this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\r\n          }\r\n        }\r\n      },\r\n      getValue: function () {\r\n        if (this.elem.globalData.frameId === this.frameId) {\r\n          return;\r\n        }\r\n        this.frameId = this.elem.globalData.frameId;\r\n        this.iterateDynamicProperties();\r\n        if (this._mdf) {\r\n          this.convertRectToPath();\r\n        }\r\n      },\r\n      reset: resetShape,\r\n    };\r\n    extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\r\n\r\n    return RectShapePropertyFactory;\r\n  }());\r\n\r\n  function getShapeProp(elem, data, type) {\r\n    var prop;\r\n    if (type === 3 || type === 4) {\r\n      var dataProp = type === 3 ? data.pt : data.ks;\r\n      var keys = dataProp.k;\r\n      if (keys.length) {\r\n        prop = new KeyframedShapeProperty(elem, data, type);\r\n      } else {\r\n        prop = new ShapeProperty(elem, data, type);\r\n      }\r\n    } else if (type === 5) {\r\n      prop = new RectShapeProperty(elem, data);\r\n    } else if (type === 6) {\r\n      prop = new EllShapeProperty(elem, data);\r\n    } else if (type === 7) {\r\n      prop = new StarShapeProperty(elem, data);\r\n    }\r\n    if (prop.k) {\r\n      elem.addDynamicProperty(prop);\r\n    }\r\n    return prop;\r\n  }\r\n\r\n  function getConstructorFunction() {\r\n    return ShapeProperty;\r\n  }\r\n\r\n  function getKeyframedConstructorFunction() {\r\n    return KeyframedShapeProperty;\r\n  }\r\n\r\n  var ob = {};\r\n  ob.getShapeProp = getShapeProp;\r\n  ob.getConstructorFunction = getConstructorFunction;\r\n  ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\r\n  return ob;\r\n}());\r\n\r\n/* global shapeCollectionPool, initialDefaultFrame, extendPrototype, DynamicPropertyContainer */\r\n/* exported ShapeModifiers */\r\n\r\nvar ShapeModifiers = (function () {\r\n  var ob = {};\r\n  var modifiers = {};\r\n  ob.registerModifier = registerModifier;\r\n  ob.getModifier = getModifier;\r\n\r\n  function registerModifier(nm, factory) {\r\n    if (!modifiers[nm]) {\r\n      modifiers[nm] = factory;\r\n    }\r\n  }\r\n\r\n  function getModifier(nm, elem, data) {\r\n    return new modifiers[nm](elem, data);\r\n  }\r\n\r\n  return ob;\r\n}());\r\n\r\nfunction ShapeModifier() {}\r\nShapeModifier.prototype.initModifierProperties = function () {};\r\nShapeModifier.prototype.addShapeToModifier = function () {};\r\nShapeModifier.prototype.addShape = function (data) {\r\n  if (!this.closed) {\r\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.\r\n    data.sh.container.addDynamicProperty(data.sh);\r\n    var shapeData = { shape: data.sh, data: data, localShapeCollection: shapeCollectionPool.newShapeCollection() };\r\n    this.shapes.push(shapeData);\r\n    this.addShapeToModifier(shapeData);\r\n    if (this._isAnimated) {\r\n      data.setAsAnimated();\r\n    }\r\n  }\r\n};\r\nShapeModifier.prototype.init = function (elem, data) {\r\n  this.shapes = [];\r\n  this.elem = elem;\r\n  this.initDynamicPropertyContainer(elem);\r\n  this.initModifierProperties(elem, data);\r\n  this.frameId = initialDefaultFrame;\r\n  this.closed = false;\r\n  this.k = false;\r\n  if (this.dynamicProperties.length) {\r\n    this.k = true;\r\n  } else {\r\n    this.getValue(true);\r\n  }\r\n};\r\nShapeModifier.prototype.processKeys = function () {\r\n  if (this.elem.globalData.frameId === this.frameId) {\r\n    return;\r\n  }\r\n  this.frameId = this.elem.globalData.frameId;\r\n  this.iterateDynamicProperties();\r\n};\r\n\r\nextendPrototype([DynamicPropertyContainer], ShapeModifier);\r\n\r\n/* global extendPrototype, ShapeModifier, PropertyFactory, segmentsLengthPool, bez, shapePool, ShapeModifiers */\r\n\r\nfunction TrimModifier() {\r\n}\r\nextendPrototype([ShapeModifier], TrimModifier);\r\nTrimModifier.prototype.initModifierProperties = function (elem, data) {\r\n  this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\r\n  this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\r\n  this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\r\n  this.sValue = 0;\r\n  this.eValue = 0;\r\n  this.getValue = this.processKeys;\r\n  this.m = data.m;\r\n  this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\r\n};\r\n\r\nTrimModifier.prototype.addShapeToModifier = function (shapeData) {\r\n  shapeData.pathsData = [];\r\n};\r\n\r\nTrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\r\n  var segments = [];\r\n  if (e <= 1) {\r\n    segments.push({\r\n      s: s,\r\n      e: e,\r\n    });\r\n  } else if (s >= 1) {\r\n    segments.push({\r\n      s: s - 1,\r\n      e: e - 1,\r\n    });\r\n  } else {\r\n    segments.push({\r\n      s: s,\r\n      e: 1,\r\n    });\r\n    segments.push({\r\n      s: 0,\r\n      e: e - 1,\r\n    });\r\n  }\r\n  var shapeSegments = [];\r\n  var i;\r\n  var len = segments.length;\r\n  var segmentOb;\r\n  for (i = 0; i < len; i += 1) {\r\n    segmentOb = segments[i];\r\n    if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\r\n      var shapeS;\r\n      var shapeE;\r\n      if (segmentOb.s * totalModifierLength <= addedLength) {\r\n        shapeS = 0;\r\n      } else {\r\n        shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\r\n      }\r\n      if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\r\n        shapeE = 1;\r\n      } else {\r\n        shapeE = ((segmentOb.e * totalModifierLength - addedLength) / shapeLength);\r\n      }\r\n      shapeSegments.push([shapeS, shapeE]);\r\n    }\r\n  }\r\n  if (!shapeSegments.length) {\r\n    shapeSegments.push([0, 0]);\r\n  }\r\n  return shapeSegments;\r\n};\r\n\r\nTrimModifier.prototype.releasePathsData = function (pathsData) {\r\n  var i;\r\n  var len = pathsData.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    segmentsLengthPool.release(pathsData[i]);\r\n  }\r\n  pathsData.length = 0;\r\n  return pathsData;\r\n};\r\n\r\nTrimModifier.prototype.processShapes = function (_isFirstFrame) {\r\n  var s;\r\n  var e;\r\n  if (this._mdf || _isFirstFrame) {\r\n    var o = (this.o.v % 360) / 360;\r\n    if (o < 0) {\r\n      o += 1;\r\n    }\r\n    if (this.s.v > 1) {\r\n      s = 1 + o;\r\n    } else if (this.s.v < 0) {\r\n      s = 0 + o;\r\n    } else {\r\n      s = this.s.v + o;\r\n    }\r\n    if (this.e.v > 1) {\r\n      e = 1 + o;\r\n    } else if (this.e.v < 0) {\r\n      e = 0 + o;\r\n    } else {\r\n      e = this.e.v + o;\r\n    }\r\n\r\n    if (s > e) {\r\n      var _s = s;\r\n      s = e;\r\n      e = _s;\r\n    }\r\n    s = Math.round(s * 10000) * 0.0001;\r\n    e = Math.round(e * 10000) * 0.0001;\r\n    this.sValue = s;\r\n    this.eValue = e;\r\n  } else {\r\n    s = this.sValue;\r\n    e = this.eValue;\r\n  }\r\n  var shapePaths;\r\n  var i;\r\n  var len = this.shapes.length;\r\n  var j;\r\n  var jLen;\r\n  var pathsData;\r\n  var pathData;\r\n  var totalShapeLength;\r\n  var totalModifierLength = 0;\r\n\r\n  if (e === s) {\r\n    for (i = 0; i < len; i += 1) {\r\n      this.shapes[i].localShapeCollection.releaseShapes();\r\n      this.shapes[i].shape._mdf = true;\r\n      this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\r\n      if (this._mdf) {\r\n        this.shapes[i].pathsData.length = 0;\r\n      }\r\n    }\r\n  } else if (!((e === 1 && s === 0) || (e === 0 && s === 1))) {\r\n    var segments = [];\r\n    var shapeData;\r\n    var localShapeCollection;\r\n    for (i = 0; i < len; i += 1) {\r\n      shapeData = this.shapes[i];\r\n      // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\r\n      if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\r\n        shapeData.shape.paths = shapeData.localShapeCollection;\r\n      } else {\r\n        shapePaths = shapeData.shape.paths;\r\n        jLen = shapePaths._length;\r\n        totalShapeLength = 0;\r\n        if (!shapeData.shape._mdf && shapeData.pathsData.length) {\r\n          totalShapeLength = shapeData.totalShapeLength;\r\n        } else {\r\n          pathsData = this.releasePathsData(shapeData.pathsData);\r\n          for (j = 0; j < jLen; j += 1) {\r\n            pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\r\n            pathsData.push(pathData);\r\n            totalShapeLength += pathData.totalLength;\r\n          }\r\n          shapeData.totalShapeLength = totalShapeLength;\r\n          shapeData.pathsData = pathsData;\r\n        }\r\n\r\n        totalModifierLength += totalShapeLength;\r\n        shapeData.shape._mdf = true;\r\n      }\r\n    }\r\n    var shapeS = s;\r\n    var shapeE = e;\r\n    var addedLength = 0;\r\n    var edges;\r\n    for (i = len - 1; i >= 0; i -= 1) {\r\n      shapeData = this.shapes[i];\r\n      if (shapeData.shape._mdf) {\r\n        localShapeCollection = shapeData.localShapeCollection;\r\n        localShapeCollection.releaseShapes();\r\n        // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\r\n        if (this.m === 2 && len > 1) {\r\n          edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\r\n          addedLength += shapeData.totalShapeLength;\r\n        } else {\r\n          edges = [[shapeS, shapeE]];\r\n        }\r\n        jLen = edges.length;\r\n        for (j = 0; j < jLen; j += 1) {\r\n          shapeS = edges[j][0];\r\n          shapeE = edges[j][1];\r\n          segments.length = 0;\r\n          if (shapeE <= 1) {\r\n            segments.push({\r\n              s: shapeData.totalShapeLength * shapeS,\r\n              e: shapeData.totalShapeLength * shapeE,\r\n            });\r\n          } else if (shapeS >= 1) {\r\n            segments.push({\r\n              s: shapeData.totalShapeLength * (shapeS - 1),\r\n              e: shapeData.totalShapeLength * (shapeE - 1),\r\n            });\r\n          } else {\r\n            segments.push({\r\n              s: shapeData.totalShapeLength * shapeS,\r\n              e: shapeData.totalShapeLength,\r\n            });\r\n            segments.push({\r\n              s: 0,\r\n              e: shapeData.totalShapeLength * (shapeE - 1),\r\n            });\r\n          }\r\n          var newShapesData = this.addShapes(shapeData, segments[0]);\r\n          if (segments[0].s !== segments[0].e) {\r\n            if (segments.length > 1) {\r\n              var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\r\n              if (lastShapeInCollection.c) {\r\n                var lastShape = newShapesData.pop();\r\n                this.addPaths(newShapesData, localShapeCollection);\r\n                newShapesData = this.addShapes(shapeData, segments[1], lastShape);\r\n              } else {\r\n                this.addPaths(newShapesData, localShapeCollection);\r\n                newShapesData = this.addShapes(shapeData, segments[1]);\r\n              }\r\n            }\r\n            this.addPaths(newShapesData, localShapeCollection);\r\n          }\r\n        }\r\n        shapeData.shape.paths = localShapeCollection;\r\n      }\r\n    }\r\n  } else if (this._mdf) {\r\n    for (i = 0; i < len; i += 1) {\r\n      // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\r\n      // Don't remove this even if it's losing cached info.\r\n      this.shapes[i].pathsData.length = 0;\r\n      this.shapes[i].shape._mdf = true;\r\n    }\r\n  }\r\n};\r\n\r\nTrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\r\n  var i;\r\n  var len = newPaths.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    localShapeCollection.addShape(newPaths[i]);\r\n  }\r\n};\r\n\r\nTrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\r\n  shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\r\n  shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\r\n  if (newShape) {\r\n    shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\r\n  }\r\n  shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\r\n};\r\n\r\nTrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\r\n  shapePath.setXYAt(points[1], points[5], 'o', pos);\r\n  shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\r\n  if (newShape) {\r\n    shapePath.setXYAt(points[0], points[4], 'v', pos);\r\n  }\r\n  shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\r\n};\r\n\r\nTrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\r\n  var pathsData = shapeData.pathsData;\r\n  var shapePaths = shapeData.shape.paths.shapes;\r\n  var i;\r\n  var len = shapeData.shape.paths._length;\r\n  var j;\r\n  var jLen;\r\n  var addedLength = 0;\r\n  var currentLengthData;\r\n  var segmentCount;\r\n  var lengths;\r\n  var segment;\r\n  var shapes = [];\r\n  var initPos;\r\n  var newShape = true;\r\n  if (!shapePath) {\r\n    shapePath = shapePool.newElement();\r\n    segmentCount = 0;\r\n    initPos = 0;\r\n  } else {\r\n    segmentCount = shapePath._length;\r\n    initPos = shapePath._length;\r\n  }\r\n  shapes.push(shapePath);\r\n  for (i = 0; i < len; i += 1) {\r\n    lengths = pathsData[i].lengths;\r\n    shapePath.c = shapePaths[i].c;\r\n    jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\r\n    for (j = 1; j < jLen; j += 1) {\r\n      currentLengthData = lengths[j - 1];\r\n      if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\r\n        addedLength += currentLengthData.addedLength;\r\n        shapePath.c = false;\r\n      } else if (addedLength > shapeSegment.e) {\r\n        shapePath.c = false;\r\n        break;\r\n      } else {\r\n        if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\r\n          this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\r\n          newShape = false;\r\n        } else {\r\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]);\r\n          this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\r\n          // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\r\n          newShape = false;\r\n          shapePath.c = false;\r\n        }\r\n        addedLength += currentLengthData.addedLength;\r\n        segmentCount += 1;\r\n      }\r\n    }\r\n    if (shapePaths[i].c && lengths.length) {\r\n      currentLengthData = lengths[j - 1];\r\n      if (addedLength <= shapeSegment.e) {\r\n        var segmentLength = lengths[j - 1].addedLength;\r\n        if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\r\n          this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\r\n          newShape = false;\r\n        } else {\r\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]);\r\n          this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\r\n          // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\r\n          newShape = false;\r\n          shapePath.c = false;\r\n        }\r\n      } else {\r\n        shapePath.c = false;\r\n      }\r\n      addedLength += currentLengthData.addedLength;\r\n      segmentCount += 1;\r\n    }\r\n    if (shapePath._length) {\r\n      shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\r\n      shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\r\n    }\r\n    if (addedLength > shapeSegment.e) {\r\n      break;\r\n    }\r\n    if (i < len - 1) {\r\n      shapePath = shapePool.newElement();\r\n      newShape = true;\r\n      shapes.push(shapePath);\r\n      segmentCount = 0;\r\n    }\r\n  }\r\n  return shapes;\r\n};\r\n\r\nShapeModifiers.registerModifier('tm', TrimModifier);\r\n\r\n/* global extendPrototype, ShapeModifier, PropertyFactory, shapePool, roundCorner, ShapeModifiers */\r\n\r\nfunction RoundCornersModifier() {}\r\nextendPrototype([ShapeModifier], RoundCornersModifier);\r\nRoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\r\n  this.getValue = this.processKeys;\r\n  this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\r\n  this._isAnimated = !!this.rd.effectsSequence.length;\r\n};\r\n\r\nRoundCornersModifier.prototype.processPath = function (path, round) {\r\n  var clonedPath = shapePool.newElement();\r\n  clonedPath.c = path.c;\r\n  var i;\r\n  var len = path._length;\r\n  var currentV;\r\n  var currentI;\r\n  var currentO;\r\n  var closerV;\r\n  var distance;\r\n  var newPosPerc;\r\n  var index = 0;\r\n  var vX;\r\n  var vY;\r\n  var oX;\r\n  var oY;\r\n  var iX;\r\n  var iY;\r\n  for (i = 0; i < len; i += 1) {\r\n    currentV = path.v[i];\r\n    currentO = path.o[i];\r\n    currentI = path.i[i];\r\n    if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\r\n      if ((i === 0 || i === len - 1) && !path.c) {\r\n        clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\r\n        /* clonedPath.v[index] = currentV;\r\n                clonedPath.o[index] = currentO;\r\n                clonedPath.i[index] = currentI; */\r\n        index += 1;\r\n      } else {\r\n        if (i === 0) {\r\n          closerV = path.v[len - 1];\r\n        } else {\r\n          closerV = path.v[i - 1];\r\n        }\r\n        distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\r\n        newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\r\n        iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\r\n        vX = iX;\r\n        iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\r\n        vY = iY;\r\n        oX = vX - (vX - currentV[0]) * roundCorner;\r\n        oY = vY - (vY - currentV[1]) * roundCorner;\r\n        clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\r\n        index += 1;\r\n\r\n        if (i === len - 1) {\r\n          closerV = path.v[0];\r\n        } else {\r\n          closerV = path.v[i + 1];\r\n        }\r\n        distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\r\n        newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\r\n        oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\r\n        vX = oX;\r\n        oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\r\n        vY = oY;\r\n        iX = vX - (vX - currentV[0]) * roundCorner;\r\n        iY = vY - (vY - currentV[1]) * roundCorner;\r\n        clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\r\n        index += 1;\r\n      }\r\n    } else {\r\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);\r\n      index += 1;\r\n    }\r\n  }\r\n  return clonedPath;\r\n};\r\n\r\nRoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\r\n  var shapePaths;\r\n  var i;\r\n  var len = this.shapes.length;\r\n  var j;\r\n  var jLen;\r\n  var rd = this.rd.v;\r\n\r\n  if (rd !== 0) {\r\n    var shapeData;\r\n    var localShapeCollection;\r\n    for (i = 0; i < len; i += 1) {\r\n      shapeData = this.shapes[i];\r\n      localShapeCollection = shapeData.localShapeCollection;\r\n      if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\r\n        localShapeCollection.releaseShapes();\r\n        shapeData.shape._mdf = true;\r\n        shapePaths = shapeData.shape.paths.shapes;\r\n        jLen = shapeData.shape.paths._length;\r\n        for (j = 0; j < jLen; j += 1) {\r\n          localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\r\n        }\r\n      }\r\n      shapeData.shape.paths = shapeData.localShapeCollection;\r\n    }\r\n  }\r\n  if (!this.dynamicProperties.length) {\r\n    this._mdf = false;\r\n  }\r\n};\r\n\r\nShapeModifiers.registerModifier('rd', RoundCornersModifier);\r\n\r\n/* global extendPrototype, ShapeModifier, PropertyFactory, shapePool, ShapeModifiers */\r\n\r\nfunction PuckerAndBloatModifier() {}\r\nextendPrototype([ShapeModifier], PuckerAndBloatModifier);\r\nPuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\r\n  this.getValue = this.processKeys;\r\n  this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\r\n  this._isAnimated = !!this.amount.effectsSequence.length;\r\n};\r\n\r\nPuckerAndBloatModifier.prototype.processPath = function (path, amount) {\r\n  var percent = amount / 100;\r\n  var centerPoint = [0, 0];\r\n  var pathLength = path._length;\r\n  var i = 0;\r\n  for (i = 0; i < pathLength; i += 1) {\r\n    centerPoint[0] += path.v[i][0];\r\n    centerPoint[1] += path.v[i][1];\r\n  }\r\n  centerPoint[0] /= pathLength;\r\n  centerPoint[1] /= pathLength;\r\n  var clonedPath = shapePool.newElement();\r\n  clonedPath.c = path.c;\r\n  var vX;\r\n  var vY;\r\n  var oX;\r\n  var oY;\r\n  var iX;\r\n  var iY;\r\n  for (i = 0; i < pathLength; i += 1) {\r\n    vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\r\n    vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\r\n    oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\r\n    oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\r\n    iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\r\n    iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\r\n    clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\r\n  }\r\n  return clonedPath;\r\n};\r\n\r\nPuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\r\n  var shapePaths;\r\n  var i;\r\n  var len = this.shapes.length;\r\n  var j;\r\n  var jLen;\r\n  var amount = this.amount.v;\r\n\r\n  if (amount !== 0) {\r\n    var shapeData;\r\n    var localShapeCollection;\r\n    for (i = 0; i < len; i += 1) {\r\n      shapeData = this.shapes[i];\r\n      localShapeCollection = shapeData.localShapeCollection;\r\n      if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\r\n        localShapeCollection.releaseShapes();\r\n        shapeData.shape._mdf = true;\r\n        shapePaths = shapeData.shape.paths.shapes;\r\n        jLen = shapeData.shape.paths._length;\r\n        for (j = 0; j < jLen; j += 1) {\r\n          localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\r\n        }\r\n      }\r\n      shapeData.shape.paths = shapeData.localShapeCollection;\r\n    }\r\n  }\r\n  if (!this.dynamicProperties.length) {\r\n    this._mdf = false;\r\n  }\r\n};\r\nShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\r\n\r\n/* global extendPrototype, ShapeModifier, TransformPropertyFactory, PropertyFactory, Matrix, ShapeModifiers */\r\n\r\nfunction RepeaterModifier() {}\r\nextendPrototype([ShapeModifier], RepeaterModifier);\r\n\r\nRepeaterModifier.prototype.initModifierProperties = function (elem, data) {\r\n  this.getValue = this.processKeys;\r\n  this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\r\n  this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\r\n  this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\r\n  this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\r\n  this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\r\n  this.data = data;\r\n  if (!this.dynamicProperties.length) {\r\n    this.getValue(true);\r\n  }\r\n  this._isAnimated = !!this.dynamicProperties.length;\r\n  this.pMatrix = new Matrix();\r\n  this.rMatrix = new Matrix();\r\n  this.sMatrix = new Matrix();\r\n  this.tMatrix = new Matrix();\r\n  this.matrix = new Matrix();\r\n};\r\n\r\nRepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\r\n  var dir = inv ? -1 : 1;\r\n  var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\r\n  var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\r\n  pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\r\n  rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\r\n  rMatrix.rotate(-transform.r.v * dir * perc);\r\n  rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\r\n  sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\r\n  sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\r\n  sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\r\n};\r\n\r\nRepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\r\n  this.elem = elem;\r\n  this.arr = arr;\r\n  this.pos = pos;\r\n  this.elemsData = elemsData;\r\n  this._currentCopies = 0;\r\n  this._elements = [];\r\n  this._groups = [];\r\n  this.frameId = -1;\r\n  this.initDynamicPropertyContainer(elem);\r\n  this.initModifierProperties(elem, arr[pos]);\r\n  while (pos > 0) {\r\n    pos -= 1;\r\n    // this._elements.unshift(arr.splice(pos,1)[0]);\r\n    this._elements.unshift(arr[pos]);\r\n  }\r\n  if (this.dynamicProperties.length) {\r\n    this.k = true;\r\n  } else {\r\n    this.getValue(true);\r\n  }\r\n};\r\n\r\nRepeaterModifier.prototype.resetElements = function (elements) {\r\n  var i;\r\n  var len = elements.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    elements[i]._processed = false;\r\n    if (elements[i].ty === 'gr') {\r\n      this.resetElements(elements[i].it);\r\n    }\r\n  }\r\n};\r\n\r\nRepeaterModifier.prototype.cloneElements = function (elements) {\r\n  var newElements = JSON.parse(JSON.stringify(elements));\r\n  this.resetElements(newElements);\r\n  return newElements;\r\n};\r\n\r\nRepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\r\n  var i;\r\n  var len = elements.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    elements[i]._render = renderFlag;\r\n    if (elements[i].ty === 'gr') {\r\n      this.changeGroupRender(elements[i].it, renderFlag);\r\n    }\r\n  }\r\n};\r\n\r\nRepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\r\n  var items;\r\n  var itemsTransform;\r\n  var i;\r\n  var dir;\r\n  var cont;\r\n  var hasReloaded = false;\r\n  if (this._mdf || _isFirstFrame) {\r\n    var copies = Math.ceil(this.c.v);\r\n    if (this._groups.length < copies) {\r\n      while (this._groups.length < copies) {\r\n        var group = {\r\n          it: this.cloneElements(this._elements),\r\n          ty: 'gr',\r\n        };\r\n        group.it.push({\r\n          a: { a: 0, ix: 1, k: [0, 0] }, nm: 'Transform', o: { a: 0, ix: 7, k: 100 }, p: { a: 0, ix: 2, k: [0, 0] }, r: { a: 1, ix: 6, k: [{ s: 0, e: 0, t: 0 }, { s: 0, e: 0, t: 1 }] }, s: { a: 0, ix: 3, k: [100, 100] }, sa: { a: 0, ix: 5, k: 0 }, sk: { a: 0, ix: 4, k: 0 }, ty: 'tr',\r\n        });\r\n\r\n        this.arr.splice(0, 0, group);\r\n        this._groups.splice(0, 0, group);\r\n        this._currentCopies += 1;\r\n      }\r\n      this.elem.reloadShapes();\r\n      hasReloaded = true;\r\n    }\r\n    cont = 0;\r\n    var renderFlag;\r\n    for (i = 0; i <= this._groups.length - 1; i += 1) {\r\n      renderFlag = cont < copies;\r\n      this._groups[i]._render = renderFlag;\r\n      this.changeGroupRender(this._groups[i].it, renderFlag);\r\n      if (!renderFlag) {\r\n        var elems = this.elemsData[i].it;\r\n        var transformData = elems[elems.length - 1];\r\n        if (transformData.transform.op.v !== 0) {\r\n          transformData.transform.op._mdf = true;\r\n          transformData.transform.op.v = 0;\r\n        } else {\r\n          transformData.transform.op._mdf = false;\r\n        }\r\n      }\r\n      cont += 1;\r\n    }\r\n\r\n    this._currentCopies = copies;\r\n    /// /\r\n\r\n    var offset = this.o.v;\r\n    var offsetModulo = offset % 1;\r\n    var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\r\n    var pProps = this.pMatrix.props;\r\n    var rProps = this.rMatrix.props;\r\n    var sProps = this.sMatrix.props;\r\n    this.pMatrix.reset();\r\n    this.rMatrix.reset();\r\n    this.sMatrix.reset();\r\n    this.tMatrix.reset();\r\n    this.matrix.reset();\r\n    var iteration = 0;\r\n\r\n    if (offset > 0) {\r\n      while (iteration < roundOffset) {\r\n        this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\r\n        iteration += 1;\r\n      }\r\n      if (offsetModulo) {\r\n        this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\r\n        iteration += offsetModulo;\r\n      }\r\n    } else if (offset < 0) {\r\n      while (iteration > roundOffset) {\r\n        this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\r\n        iteration -= 1;\r\n      }\r\n      if (offsetModulo) {\r\n        this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\r\n        iteration -= offsetModulo;\r\n      }\r\n    }\r\n    i = this.data.m === 1 ? 0 : this._currentCopies - 1;\r\n    dir = this.data.m === 1 ? 1 : -1;\r\n    cont = this._currentCopies;\r\n    var j;\r\n    var jLen;\r\n    while (cont) {\r\n      items = this.elemsData[i].it;\r\n      itemsTransform = items[items.length - 1].transform.mProps.v.props;\r\n      jLen = itemsTransform.length;\r\n      items[items.length - 1].transform.mProps._mdf = true;\r\n      items[items.length - 1].transform.op._mdf = true;\r\n      items[items.length - 1].transform.op.v = this._currentCopies === 1\r\n        ? this.so.v\r\n        : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\r\n\r\n      if (iteration !== 0) {\r\n        if ((i !== 0 && dir === 1) || (i !== this._currentCopies - 1 && dir === -1)) {\r\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\r\n        }\r\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]);\r\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]);\r\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]);\r\n\r\n        for (j = 0; j < jLen; j += 1) {\r\n          itemsTransform[j] = this.matrix.props[j];\r\n        }\r\n        this.matrix.reset();\r\n      } else {\r\n        this.matrix.reset();\r\n        for (j = 0; j < jLen; j += 1) {\r\n          itemsTransform[j] = this.matrix.props[j];\r\n        }\r\n      }\r\n      iteration += 1;\r\n      cont -= 1;\r\n      i += dir;\r\n    }\r\n  } else {\r\n    cont = this._currentCopies;\r\n    i = 0;\r\n    dir = 1;\r\n    while (cont) {\r\n      items = this.elemsData[i].it;\r\n      itemsTransform = items[items.length - 1].transform.mProps.v.props;\r\n      items[items.length - 1].transform.mProps._mdf = false;\r\n      items[items.length - 1].transform.op._mdf = false;\r\n      cont -= 1;\r\n      i += dir;\r\n    }\r\n  }\r\n  return hasReloaded;\r\n};\r\n\r\nRepeaterModifier.prototype.addShape = function () {};\r\n\r\nShapeModifiers.registerModifier('rp', RepeaterModifier);\r\n\r\n/* global createSizedArray, shapePool */\r\n\r\nfunction ShapeCollection() {\r\n  this._length = 0;\r\n  this._maxLength = 4;\r\n  this.shapes = createSizedArray(this._maxLength);\r\n}\r\n\r\nShapeCollection.prototype.addShape = function (shapeData) {\r\n  if (this._length === this._maxLength) {\r\n    this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\r\n    this._maxLength *= 2;\r\n  }\r\n  this.shapes[this._length] = shapeData;\r\n  this._length += 1;\r\n};\r\n\r\nShapeCollection.prototype.releaseShapes = function () {\r\n  var i;\r\n  for (i = 0; i < this._length; i += 1) {\r\n    shapePool.release(this.shapes[i]);\r\n  }\r\n  this._length = 0;\r\n};\r\n\r\n/* global createSizedArray, createTypedArray, PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\n\r\nfunction DashProperty(elem, data, renderer, container) {\r\n  this.elem = elem;\r\n  this.frameId = -1;\r\n  this.dataProps = createSizedArray(data.length);\r\n  this.renderer = renderer;\r\n  this.k = false;\r\n  this.dashStr = '';\r\n  this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\r\n  this.dashoffset = createTypedArray('float32', 1);\r\n  this.initDynamicPropertyContainer(container);\r\n  var i;\r\n  var len = data.length || 0;\r\n  var prop;\r\n  for (i = 0; i < len; i += 1) {\r\n    prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\r\n    this.k = prop.k || this.k;\r\n    this.dataProps[i] = { n: data[i].n, p: prop };\r\n  }\r\n  if (!this.k) {\r\n    this.getValue(true);\r\n  }\r\n  this._isAnimated = this.k;\r\n}\r\n\r\nDashProperty.prototype.getValue = function (forceRender) {\r\n  if (this.elem.globalData.frameId === this.frameId && !forceRender) {\r\n    return;\r\n  }\r\n  this.frameId = this.elem.globalData.frameId;\r\n  this.iterateDynamicProperties();\r\n  this._mdf = this._mdf || forceRender;\r\n  if (this._mdf) {\r\n    var i = 0;\r\n    var len = this.dataProps.length;\r\n    if (this.renderer === 'svg') {\r\n      this.dashStr = '';\r\n    }\r\n    for (i = 0; i < len; i += 1) {\r\n      if (this.dataProps[i].n !== 'o') {\r\n        if (this.renderer === 'svg') {\r\n          this.dashStr += ' ' + this.dataProps[i].p.v;\r\n        } else {\r\n          this.dashArray[i] = this.dataProps[i].p.v;\r\n        }\r\n      } else {\r\n        this.dashoffset[0] = this.dataProps[i].p.v;\r\n      }\r\n    }\r\n  }\r\n};\r\nextendPrototype([DynamicPropertyContainer], DashProperty);\r\n\r\n/* global createTypedArray, PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\nfunction GradientProperty(elem, data, container) {\r\n  this.data = data;\r\n  this.c = createTypedArray('uint8c', data.p * 4);\r\n  var cLength = data.k.k[0].s ? (data.k.k[0].s.length - data.p * 4) : data.k.k.length - data.p * 4;\r\n  this.o = createTypedArray('float32', cLength);\r\n  this._cmdf = false;\r\n  this._omdf = false;\r\n  this._collapsable = this.checkCollapsable();\r\n  this._hasOpacity = cLength;\r\n  this.initDynamicPropertyContainer(container);\r\n  this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\r\n  this.k = this.prop.k;\r\n  this.getValue(true);\r\n}\r\n\r\nGradientProperty.prototype.comparePoints = function (values, points) {\r\n  var i = 0;\r\n  var len = this.o.length / 2;\r\n  var diff;\r\n  while (i < len) {\r\n    diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\r\n    if (diff > 0.01) {\r\n      return false;\r\n    }\r\n    i += 1;\r\n  }\r\n  return true;\r\n};\r\n\r\nGradientProperty.prototype.checkCollapsable = function () {\r\n  if (this.o.length / 2 !== this.c.length / 4) {\r\n    return false;\r\n  }\r\n  if (this.data.k.k[0].s) {\r\n    var i = 0;\r\n    var len = this.data.k.k.length;\r\n    while (i < len) {\r\n      if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\r\n        return false;\r\n      }\r\n      i += 1;\r\n    }\r\n  } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\r\n    return false;\r\n  }\r\n  return true;\r\n};\r\n\r\nGradientProperty.prototype.getValue = function (forceRender) {\r\n  this.prop.getValue();\r\n  this._mdf = false;\r\n  this._cmdf = false;\r\n  this._omdf = false;\r\n  if (this.prop._mdf || forceRender) {\r\n    var i;\r\n    var len = this.data.p * 4;\r\n    var mult;\r\n    var val;\r\n    for (i = 0; i < len; i += 1) {\r\n      mult = i % 4 === 0 ? 100 : 255;\r\n      val = Math.round(this.prop.v[i] * mult);\r\n      if (this.c[i] !== val) {\r\n        this.c[i] = val;\r\n        this._cmdf = !forceRender;\r\n      }\r\n    }\r\n    if (this.o.length) {\r\n      len = this.prop.v.length;\r\n      for (i = this.data.p * 4; i < len; i += 1) {\r\n        mult = i % 2 === 0 ? 100 : 1;\r\n        val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\r\n        if (this.o[i - this.data.p * 4] !== val) {\r\n          this.o[i - this.data.p * 4] = val;\r\n          this._omdf = !forceRender;\r\n        }\r\n      }\r\n    }\r\n    this._mdf = !forceRender;\r\n  }\r\n};\r\n\r\nextendPrototype([DynamicPropertyContainer], GradientProperty);\r\n\r\n/* exported buildShapeString */\r\n\r\nvar buildShapeString = function (pathNodes, length, closed, mat) {\r\n  if (length === 0) {\r\n    return '';\r\n  }\r\n  var _o = pathNodes.o;\r\n  var _i = pathNodes.i;\r\n  var _v = pathNodes.v;\r\n  var i;\r\n  var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\r\n  for (i = 1; i < length; i += 1) {\r\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]);\r\n  }\r\n  if (closed && length) {\r\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]);\r\n    shapeString += 'z';\r\n  }\r\n  return shapeString;\r\n};\r\n\r\n/* global Howl */\r\n/* exported audioControllerFactory */\r\n\r\nvar audioControllerFactory = (function () {\r\n  function AudioController(audioFactory) {\r\n    this.audios = [];\r\n    this.audioFactory = audioFactory;\r\n    this._volume = 1;\r\n    this._isMuted = false;\r\n  }\r\n\r\n  AudioController.prototype = {\r\n    addAudio: function (audio) {\r\n      this.audios.push(audio);\r\n    },\r\n    pause: function () {\r\n      var i;\r\n      var len = this.audios.length;\r\n      for (i = 0; i < len; i += 1) {\r\n        this.audios[i].pause();\r\n      }\r\n    },\r\n    resume: function () {\r\n      var i;\r\n      var len = this.audios.length;\r\n      for (i = 0; i < len; i += 1) {\r\n        this.audios[i].resume();\r\n      }\r\n    },\r\n    setRate: function (rateValue) {\r\n      var i;\r\n      var len = this.audios.length;\r\n      for (i = 0; i < len; i += 1) {\r\n        this.audios[i].setRate(rateValue);\r\n      }\r\n    },\r\n    createAudio: function (assetPath) {\r\n      if (this.audioFactory) {\r\n        return this.audioFactory(assetPath);\r\n      } if (Howl) {\r\n        return new Howl({\r\n          src: [assetPath],\r\n        });\r\n      }\r\n      return {\r\n        isPlaying: false,\r\n        play: function () { this.isPlaying = true; },\r\n        seek: function () { this.isPlaying = false; },\r\n        playing: function () {},\r\n        rate: function () {},\r\n        setVolume: function () {},\r\n      };\r\n    },\r\n    setAudioFactory: function (audioFactory) {\r\n      this.audioFactory = audioFactory;\r\n    },\r\n    setVolume: function (value) {\r\n      this._volume = value;\r\n      this._updateVolume();\r\n    },\r\n    mute: function () {\r\n      this._isMuted = true;\r\n      this._updateVolume();\r\n    },\r\n    unmute: function () {\r\n      this._isMuted = false;\r\n      this._updateVolume();\r\n    },\r\n    getVolume: function () {\r\n      return this._volume;\r\n    },\r\n    _updateVolume: function () {\r\n      var i;\r\n      var len = this.audios.length;\r\n      for (i = 0; i < len; i += 1) {\r\n        this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\r\n      }\r\n    },\r\n  };\r\n\r\n  return function () {\r\n    return new AudioController();\r\n  };\r\n}());\r\n\r\n/* global createTag, createNS, isSafari, dataManager */\r\n/* exported ImagePreloader */\r\n\r\nvar ImagePreloader = (function () {\r\n  var proxyImage = (function () {\r\n    var canvas = createTag('canvas');\r\n    canvas.width = 1;\r\n    canvas.height = 1;\r\n    var ctx = canvas.getContext('2d');\r\n    ctx.fillStyle = 'rgba(0,0,0,0)';\r\n    ctx.fillRect(0, 0, 1, 1);\r\n    return canvas;\r\n  }());\r\n\r\n  function imageLoaded() {\r\n    this.loadedAssets += 1;\r\n    if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\r\n      if (this.imagesLoadedCb) {\r\n        this.imagesLoadedCb(null);\r\n      }\r\n    }\r\n  }\r\n  function footageLoaded() {\r\n    this.loadedFootagesCount += 1;\r\n    if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\r\n      if (this.imagesLoadedCb) {\r\n        this.imagesLoadedCb(null);\r\n      }\r\n    }\r\n  }\r\n\r\n  function getAssetsPath(assetData, assetsPath, originalPath) {\r\n    var path = '';\r\n    if (assetData.e) {\r\n      path = assetData.p;\r\n    } else if (assetsPath) {\r\n      var imagePath = assetData.p;\r\n      if (imagePath.indexOf('images/') !== -1) {\r\n        imagePath = imagePath.split('/')[1];\r\n      }\r\n      path = assetsPath + imagePath;\r\n    } else {\r\n      path = originalPath;\r\n      path += assetData.u ? assetData.u : '';\r\n      path += assetData.p;\r\n    }\r\n    return path;\r\n  }\r\n\r\n  function testImageLoaded(img) {\r\n    var _count = 0;\r\n    var intervalId = setInterval(function () {\r\n      var box = img.getBBox();\r\n      if (box.width || _count > 500) {\r\n        this._imageLoaded();\r\n        clearInterval(intervalId);\r\n      }\r\n      _count += 1;\r\n    }.bind(this), 50);\r\n  }\r\n\r\n  function createImageData(assetData) {\r\n    var path = getAssetsPath(assetData, this.assetsPath, this.path);\r\n    var img = createNS('image');\r\n    if (isSafari) {\r\n      this.testImageLoaded(img);\r\n    } else {\r\n      img.addEventListener('load', this._imageLoaded, false);\r\n    }\r\n    img.addEventListener('error', function () {\r\n      ob.img = proxyImage;\r\n      this._imageLoaded();\r\n    }.bind(this), false);\r\n    img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\r\n    if (this._elementHelper.append) {\r\n      this._elementHelper.append(img);\r\n    } else {\r\n      this._elementHelper.appendChild(img);\r\n    }\r\n    var ob = {\r\n      img: img,\r\n      assetData: assetData,\r\n    };\r\n    return ob;\r\n  }\r\n\r\n  function createImgData(assetData) {\r\n    var path = getAssetsPath(assetData, this.assetsPath, this.path);\r\n    var img = createTag('img');\r\n    img.crossOrigin = 'anonymous';\r\n    img.addEventListener('load', this._imageLoaded, false);\r\n    img.addEventListener('error', function () {\r\n      ob.img = proxyImage;\r\n      this._imageLoaded();\r\n    }.bind(this), false);\r\n    img.src = path;\r\n    var ob = {\r\n      img: img,\r\n      assetData: assetData,\r\n    };\r\n    return ob;\r\n  }\r\n\r\n  function createFootageData(data) {\r\n    var ob = {\r\n      assetData: data,\r\n    };\r\n    var path = getAssetsPath(data, this.assetsPath, this.path);\r\n    dataManager.loadData(path, function (footageData) {\r\n      ob.img = footageData;\r\n      this._footageLoaded();\r\n    }.bind(this), function () {\r\n      ob.img = {};\r\n      this._footageLoaded();\r\n    }.bind(this));\r\n    return ob;\r\n  }\r\n\r\n  function loadAssets(assets, cb) {\r\n    this.imagesLoadedCb = cb;\r\n    var i;\r\n    var len = assets.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      if (!assets[i].layers) {\r\n        if (!assets[i].t || assets[i].t === 'seq') {\r\n          this.totalImages += 1;\r\n          this.images.push(this._createImageData(assets[i]));\r\n        } else if (assets[i].t === 3) {\r\n          this.totalFootages += 1;\r\n          this.images.push(this.createFootageData(assets[i]));\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  function setPath(path) {\r\n    this.path = path || '';\r\n  }\r\n\r\n  function setAssetsPath(path) {\r\n    this.assetsPath = path || '';\r\n  }\r\n\r\n  function getAsset(assetData) {\r\n    var i = 0;\r\n    var len = this.images.length;\r\n    while (i < len) {\r\n      if (this.images[i].assetData === assetData) {\r\n        return this.images[i].img;\r\n      }\r\n      i += 1;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  function destroy() {\r\n    this.imagesLoadedCb = null;\r\n    this.images.length = 0;\r\n  }\r\n\r\n  function loadedImages() {\r\n    return this.totalImages === this.loadedAssets;\r\n  }\r\n\r\n  function loadedFootages() {\r\n    return this.totalFootages === this.loadedFootagesCount;\r\n  }\r\n\r\n  function setCacheType(type, elementHelper) {\r\n    if (type === 'svg') {\r\n      this._elementHelper = elementHelper;\r\n      this._createImageData = this.createImageData.bind(this);\r\n    } else {\r\n      this._createImageData = this.createImgData.bind(this);\r\n    }\r\n  }\r\n\r\n  function ImagePreloaderFactory() {\r\n    this._imageLoaded = imageLoaded.bind(this);\r\n    this._footageLoaded = footageLoaded.bind(this);\r\n    this.testImageLoaded = testImageLoaded.bind(this);\r\n    this.createFootageData = createFootageData.bind(this);\r\n    this.assetsPath = '';\r\n    this.path = '';\r\n    this.totalImages = 0;\r\n    this.totalFootages = 0;\r\n    this.loadedAssets = 0;\r\n    this.loadedFootagesCount = 0;\r\n    this.imagesLoadedCb = null;\r\n    this.images = [];\r\n  }\r\n\r\n  ImagePreloaderFactory.prototype = {\r\n    loadAssets: loadAssets,\r\n    setAssetsPath: setAssetsPath,\r\n    setPath: setPath,\r\n    loadedImages: loadedImages,\r\n    loadedFootages: loadedFootages,\r\n    destroy: destroy,\r\n    getAsset: getAsset,\r\n    createImgData: createImgData,\r\n    createImageData: createImageData,\r\n    imageLoaded: imageLoaded,\r\n    footageLoaded: footageLoaded,\r\n    setCacheType: setCacheType,\r\n  };\r\n\r\n  return ImagePreloaderFactory;\r\n}());\r\n\r\n/* exported featureSupport */\r\n\r\nvar featureSupport = (function () {\r\n  var ob = {\r\n    maskType: true,\r\n  };\r\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)) {\r\n    ob.maskType = false;\r\n  }\r\n  return ob;\r\n}());\r\n\r\n/* global createNS */\r\n/* exported filtersFactory */\r\n\r\nvar filtersFactory = (function () {\r\n  var ob = {};\r\n  ob.createFilter = createFilter;\r\n  ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\r\n\r\n  function createFilter(filId, skipCoordinates) {\r\n    var fil = createNS('filter');\r\n    fil.setAttribute('id', filId);\r\n    if (skipCoordinates !== true) {\r\n      fil.setAttribute('filterUnits', 'objectBoundingBox');\r\n      fil.setAttribute('x', '0%');\r\n      fil.setAttribute('y', '0%');\r\n      fil.setAttribute('width', '100%');\r\n      fil.setAttribute('height', '100%');\r\n    }\r\n    return fil;\r\n  }\r\n\r\n  function createAlphaToLuminanceFilter() {\r\n    var feColorMatrix = createNS('feColorMatrix');\r\n    feColorMatrix.setAttribute('type', 'matrix');\r\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n    feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\r\n    return feColorMatrix;\r\n  }\r\n\r\n  return ob;\r\n}());\r\n\r\n/* global createSizedArray, PropertyFactory, TextAnimatorDataProperty, bez, addHueToRGB,\r\n  addSaturationToRGB, addBrightnessToRGB, LetterProps, Matrix, extendPrototype, DynamicPropertyContainer */\r\n\r\nfunction TextAnimatorProperty(textData, renderType, elem) {\r\n  this._isFirstFrame = true;\r\n  this._hasMaskedPath = false;\r\n  this._frameId = -1;\r\n  this._textData = textData;\r\n  this._renderType = renderType;\r\n  this._elem = elem;\r\n  this._animatorsData = createSizedArray(this._textData.a.length);\r\n  this._pathData = {};\r\n  this._moreOptions = {\r\n    alignment: {},\r\n  };\r\n  this.renderedLetters = [];\r\n  this.lettersChangedFlag = false;\r\n  this.initDynamicPropertyContainer(elem);\r\n}\r\n\r\nTextAnimatorProperty.prototype.searchProperties = function () {\r\n  var i;\r\n  var len = this._textData.a.length;\r\n  var animatorProps;\r\n  var getProp = PropertyFactory.getProp;\r\n  for (i = 0; i < len; i += 1) {\r\n    animatorProps = this._textData.a[i];\r\n    this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\r\n  }\r\n  if (this._textData.p && 'm' in this._textData.p) {\r\n    this._pathData = {\r\n      a: getProp(this._elem, this._textData.p.a, 0, 0, this),\r\n      f: getProp(this._elem, this._textData.p.f, 0, 0, this),\r\n      l: getProp(this._elem, this._textData.p.l, 0, 0, this),\r\n      r: getProp(this._elem, this._textData.p.r, 0, 0, this),\r\n      p: getProp(this._elem, this._textData.p.p, 0, 0, this),\r\n      m: this._elem.maskManager.getMaskProperty(this._textData.p.m),\r\n    };\r\n    this._hasMaskedPath = true;\r\n  } else {\r\n    this._hasMaskedPath = false;\r\n  }\r\n  this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\r\n};\r\n\r\nTextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\r\n  this.lettersChangedFlag = lettersChangedFlag;\r\n  if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\r\n    return;\r\n  }\r\n  this._isFirstFrame = false;\r\n  var alignment = this._moreOptions.alignment.v;\r\n  var animators = this._animatorsData;\r\n  var textData = this._textData;\r\n  var matrixHelper = this.mHelper;\r\n  var renderType = this._renderType;\r\n  var renderedLettersCount = this.renderedLetters.length;\r\n  var xPos;\r\n  var yPos;\r\n  var i;\r\n  var len;\r\n  var letters = documentData.l;\r\n  var pathInfo;\r\n  var currentLength;\r\n  var currentPoint;\r\n  var segmentLength;\r\n  var flag;\r\n  var pointInd;\r\n  var segmentInd;\r\n  var prevPoint;\r\n  var points;\r\n  var segments;\r\n  var partialLength;\r\n  var totalLength;\r\n  var perc;\r\n  var tanAngle;\r\n  var mask;\r\n  if (this._hasMaskedPath) {\r\n    mask = this._pathData.m;\r\n    if (!this._pathData.n || this._pathData._mdf) {\r\n      var paths = mask.v;\r\n      if (this._pathData.r.v) {\r\n        paths = paths.reverse();\r\n      }\r\n      // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\r\n      pathInfo = {\r\n        tLength: 0,\r\n        segments: [],\r\n      };\r\n      len = paths._length - 1;\r\n      var bezierData;\r\n      totalLength = 0;\r\n      for (i = 0; i < len; i += 1) {\r\n        bezierData = bez.buildBezierData(paths.v[i],\r\n          paths.v[i + 1],\r\n          [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\r\n          [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\r\n        pathInfo.tLength += bezierData.segmentLength;\r\n        pathInfo.segments.push(bezierData);\r\n        totalLength += bezierData.segmentLength;\r\n      }\r\n      i = len;\r\n      if (mask.v.c) {\r\n        bezierData = bez.buildBezierData(paths.v[i],\r\n          paths.v[0],\r\n          [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\r\n          [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\r\n        pathInfo.tLength += bezierData.segmentLength;\r\n        pathInfo.segments.push(bezierData);\r\n        totalLength += bezierData.segmentLength;\r\n      }\r\n      this._pathData.pi = pathInfo;\r\n    }\r\n    pathInfo = this._pathData.pi;\r\n\r\n    currentLength = this._pathData.f.v;\r\n    segmentInd = 0;\r\n    pointInd = 1;\r\n    segmentLength = 0;\r\n    flag = true;\r\n    segments = pathInfo.segments;\r\n    if (currentLength < 0 && mask.v.c) {\r\n      if (pathInfo.tLength < Math.abs(currentLength)) {\r\n        currentLength = -Math.abs(currentLength) % pathInfo.tLength;\r\n      }\r\n      segmentInd = segments.length - 1;\r\n      points = segments[segmentInd].points;\r\n      pointInd = points.length - 1;\r\n      while (currentLength < 0) {\r\n        currentLength += points[pointInd].partialLength;\r\n        pointInd -= 1;\r\n        if (pointInd < 0) {\r\n          segmentInd -= 1;\r\n          points = segments[segmentInd].points;\r\n          pointInd = points.length - 1;\r\n        }\r\n      }\r\n    }\r\n    points = segments[segmentInd].points;\r\n    prevPoint = points[pointInd - 1];\r\n    currentPoint = points[pointInd];\r\n    partialLength = currentPoint.partialLength;\r\n  }\r\n\r\n  len = letters.length;\r\n  xPos = 0;\r\n  yPos = 0;\r\n  var yOff = documentData.finalSize * 1.2 * 0.714;\r\n  var firstLine = true;\r\n  var animatorProps;\r\n  var animatorSelector;\r\n  var j;\r\n  var jLen;\r\n  var letterValue;\r\n\r\n  jLen = animators.length;\r\n\r\n  var mult;\r\n  var ind = -1;\r\n  var offf;\r\n  var xPathPos;\r\n  var yPathPos;\r\n  var initPathPos = currentLength;\r\n  var initSegmentInd = segmentInd;\r\n  var initPointInd = pointInd;\r\n  var currentLine = -1;\r\n  var elemOpacity;\r\n  var sc;\r\n  var sw;\r\n  var fc;\r\n  var k;\r\n  var letterSw;\r\n  var letterSc;\r\n  var letterFc;\r\n  var letterM = '';\r\n  var letterP = this.defaultPropsArray;\r\n  var letterO;\r\n\r\n  //\r\n  if (documentData.j === 2 || documentData.j === 1) {\r\n    var animatorJustifyOffset = 0;\r\n    var animatorFirstCharOffset = 0;\r\n    var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\r\n    var lastIndex = 0;\r\n    var isNewLine = true;\r\n\r\n    for (i = 0; i < len; i += 1) {\r\n      if (letters[i].n) {\r\n        if (animatorJustifyOffset) {\r\n          animatorJustifyOffset += animatorFirstCharOffset;\r\n        }\r\n        while (lastIndex < i) {\r\n          letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\r\n          lastIndex += 1;\r\n        }\r\n        animatorJustifyOffset = 0;\r\n        isNewLine = true;\r\n      } else {\r\n        for (j = 0; j < jLen; j += 1) {\r\n          animatorProps = animators[j].a;\r\n          if (animatorProps.t.propType) {\r\n            if (isNewLine && documentData.j === 2) {\r\n              animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\r\n            }\r\n            animatorSelector = animators[j].s;\r\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n            if (mult.length) {\r\n              animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\r\n            } else {\r\n              animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\r\n            }\r\n          }\r\n        }\r\n        isNewLine = false;\r\n      }\r\n    }\r\n    if (animatorJustifyOffset) {\r\n      animatorJustifyOffset += animatorFirstCharOffset;\r\n    }\r\n    while (lastIndex < i) {\r\n      letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\r\n      lastIndex += 1;\r\n    }\r\n  }\r\n  //\r\n\r\n  for (i = 0; i < len; i += 1) {\r\n    matrixHelper.reset();\r\n    elemOpacity = 1;\r\n    if (letters[i].n) {\r\n      xPos = 0;\r\n      yPos += documentData.yOffset;\r\n      yPos += firstLine ? 1 : 0;\r\n      currentLength = initPathPos;\r\n      firstLine = false;\r\n      if (this._hasMaskedPath) {\r\n        segmentInd = initSegmentInd;\r\n        pointInd = initPointInd;\r\n        points = segments[segmentInd].points;\r\n        prevPoint = points[pointInd - 1];\r\n        currentPoint = points[pointInd];\r\n        partialLength = currentPoint.partialLength;\r\n        segmentLength = 0;\r\n      }\r\n      letterM = '';\r\n      letterFc = '';\r\n      letterSw = '';\r\n      letterO = '';\r\n      letterP = this.defaultPropsArray;\r\n    } else {\r\n      if (this._hasMaskedPath) {\r\n        if (currentLine !== letters[i].line) {\r\n          switch (documentData.j) {\r\n            case 1:\r\n              currentLength += totalLength - documentData.lineWidths[letters[i].line];\r\n              break;\r\n            case 2:\r\n              currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\r\n              break;\r\n            default:\r\n              break;\r\n          }\r\n          currentLine = letters[i].line;\r\n        }\r\n        if (ind !== letters[i].ind) {\r\n          if (letters[ind]) {\r\n            currentLength += letters[ind].extra;\r\n          }\r\n          currentLength += letters[i].an / 2;\r\n          ind = letters[i].ind;\r\n        }\r\n        currentLength += (alignment[0] * letters[i].an) * 0.005;\r\n        var animatorOffset = 0;\r\n        for (j = 0; j < jLen; j += 1) {\r\n          animatorProps = animators[j].a;\r\n          if (animatorProps.p.propType) {\r\n            animatorSelector = animators[j].s;\r\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n            if (mult.length) {\r\n              animatorOffset += animatorProps.p.v[0] * mult[0];\r\n            } else {\r\n              animatorOffset += animatorProps.p.v[0] * mult;\r\n            }\r\n          }\r\n          if (animatorProps.a.propType) {\r\n            animatorSelector = animators[j].s;\r\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n            if (mult.length) {\r\n              animatorOffset += animatorProps.a.v[0] * mult[0];\r\n            } else {\r\n              animatorOffset += animatorProps.a.v[0] * mult;\r\n            }\r\n          }\r\n        }\r\n        flag = true;\r\n        // Force alignment only works with a single line for now\r\n        if (this._pathData.a.v) {\r\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);\r\n          currentLength += this._pathData.f.v;\r\n        }\r\n        while (flag) {\r\n          if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\r\n            perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\r\n            xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\r\n            yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\r\n            matrixHelper.translate((-alignment[0] * letters[i].an) * 0.005, -(alignment[1] * yOff) * 0.01);\r\n            flag = false;\r\n          } else if (points) {\r\n            segmentLength += currentPoint.partialLength;\r\n            pointInd += 1;\r\n            if (pointInd >= points.length) {\r\n              pointInd = 0;\r\n              segmentInd += 1;\r\n              if (!segments[segmentInd]) {\r\n                if (mask.v.c) {\r\n                  pointInd = 0;\r\n                  segmentInd = 0;\r\n                  points = segments[segmentInd].points;\r\n                } else {\r\n                  segmentLength -= currentPoint.partialLength;\r\n                  points = null;\r\n                }\r\n              } else {\r\n                points = segments[segmentInd].points;\r\n              }\r\n            }\r\n            if (points) {\r\n              prevPoint = currentPoint;\r\n              currentPoint = points[pointInd];\r\n              partialLength = currentPoint.partialLength;\r\n            }\r\n          }\r\n        }\r\n        offf = letters[i].an / 2 - letters[i].add;\r\n        matrixHelper.translate(-offf, 0, 0);\r\n      } else {\r\n        offf = letters[i].an / 2 - letters[i].add;\r\n        matrixHelper.translate(-offf, 0, 0);\r\n\r\n        // Grouping alignment\r\n        matrixHelper.translate((-alignment[0] * letters[i].an) * 0.005, (-alignment[1] * yOff) * 0.01, 0);\r\n      }\r\n\r\n      for (j = 0; j < jLen; j += 1) {\r\n        animatorProps = animators[j].a;\r\n        if (animatorProps.t.propType) {\r\n          animatorSelector = animators[j].s;\r\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n          // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\r\n          if (xPos !== 0 || documentData.j !== 0) {\r\n            if (this._hasMaskedPath) {\r\n              if (mult.length) {\r\n                currentLength += animatorProps.t.v * mult[0];\r\n              } else {\r\n                currentLength += animatorProps.t.v * mult;\r\n              }\r\n            } else if (mult.length) {\r\n              xPos += animatorProps.t.v * mult[0];\r\n            } else {\r\n              xPos += animatorProps.t.v * mult;\r\n            }\r\n          }\r\n        }\r\n      }\r\n      if (documentData.strokeWidthAnim) {\r\n        sw = documentData.sw || 0;\r\n      }\r\n      if (documentData.strokeColorAnim) {\r\n        if (documentData.sc) {\r\n          sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\r\n        } else {\r\n          sc = [0, 0, 0];\r\n        }\r\n      }\r\n      if (documentData.fillColorAnim && documentData.fc) {\r\n        fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\r\n      }\r\n      for (j = 0; j < jLen; j += 1) {\r\n        animatorProps = animators[j].a;\r\n        if (animatorProps.a.propType) {\r\n          animatorSelector = animators[j].s;\r\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n          if (mult.length) {\r\n            matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\r\n          } else {\r\n            matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\r\n          }\r\n        }\r\n      }\r\n      for (j = 0; j < jLen; j += 1) {\r\n        animatorProps = animators[j].a;\r\n        if (animatorProps.s.propType) {\r\n          animatorSelector = animators[j].s;\r\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n          if (mult.length) {\r\n            matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult[0]), 1 + ((animatorProps.s.v[1] - 1) * mult[1]), 1);\r\n          } else {\r\n            matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult), 1 + ((animatorProps.s.v[1] - 1) * mult), 1);\r\n          }\r\n        }\r\n      }\r\n      for (j = 0; j < jLen; j += 1) {\r\n        animatorProps = animators[j].a;\r\n        animatorSelector = animators[j].s;\r\n        mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n        if (animatorProps.sk.propType) {\r\n          if (mult.length) {\r\n            matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\r\n          } else {\r\n            matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\r\n          }\r\n        }\r\n        if (animatorProps.r.propType) {\r\n          if (mult.length) {\r\n            matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\r\n          } else {\r\n            matrixHelper.rotateZ(-animatorProps.r.v * mult);\r\n          }\r\n        }\r\n        if (animatorProps.ry.propType) {\r\n          if (mult.length) {\r\n            matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\r\n          } else {\r\n            matrixHelper.rotateY(animatorProps.ry.v * mult);\r\n          }\r\n        }\r\n        if (animatorProps.rx.propType) {\r\n          if (mult.length) {\r\n            matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\r\n          } else {\r\n            matrixHelper.rotateX(animatorProps.rx.v * mult);\r\n          }\r\n        }\r\n        if (animatorProps.o.propType) {\r\n          if (mult.length) {\r\n            elemOpacity += ((animatorProps.o.v) * mult[0] - elemOpacity) * mult[0];\r\n          } else {\r\n            elemOpacity += ((animatorProps.o.v) * mult - elemOpacity) * mult;\r\n          }\r\n        }\r\n        if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\r\n          if (mult.length) {\r\n            sw += animatorProps.sw.v * mult[0];\r\n          } else {\r\n            sw += animatorProps.sw.v * mult;\r\n          }\r\n        }\r\n        if (documentData.strokeColorAnim && animatorProps.sc.propType) {\r\n          for (k = 0; k < 3; k += 1) {\r\n            if (mult.length) {\r\n              sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\r\n            } else {\r\n              sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\r\n            }\r\n          }\r\n        }\r\n        if (documentData.fillColorAnim && documentData.fc) {\r\n          if (animatorProps.fc.propType) {\r\n            for (k = 0; k < 3; k += 1) {\r\n              if (mult.length) {\r\n                fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\r\n              } else {\r\n                fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\r\n              }\r\n            }\r\n          }\r\n          if (animatorProps.fh.propType) {\r\n            if (mult.length) {\r\n              fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\r\n            } else {\r\n              fc = addHueToRGB(fc, animatorProps.fh.v * mult);\r\n            }\r\n          }\r\n          if (animatorProps.fs.propType) {\r\n            if (mult.length) {\r\n              fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\r\n            } else {\r\n              fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\r\n            }\r\n          }\r\n          if (animatorProps.fb.propType) {\r\n            if (mult.length) {\r\n              fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\r\n            } else {\r\n              fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      for (j = 0; j < jLen; j += 1) {\r\n        animatorProps = animators[j].a;\r\n\r\n        if (animatorProps.p.propType) {\r\n          animatorSelector = animators[j].s;\r\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n          if (this._hasMaskedPath) {\r\n            if (mult.length) {\r\n              matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\r\n            } else {\r\n              matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\r\n            }\r\n          } else if (mult.length) {\r\n            matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\r\n          } else {\r\n            matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\r\n          }\r\n        }\r\n      }\r\n      if (documentData.strokeWidthAnim) {\r\n        letterSw = sw < 0 ? 0 : sw;\r\n      }\r\n      if (documentData.strokeColorAnim) {\r\n        letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\r\n      }\r\n      if (documentData.fillColorAnim && documentData.fc) {\r\n        letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\r\n      }\r\n\r\n      if (this._hasMaskedPath) {\r\n        matrixHelper.translate(0, -documentData.ls);\r\n\r\n        matrixHelper.translate(0, (alignment[1] * yOff) * 0.01 + yPos, 0);\r\n        if (this._pathData.p.v) {\r\n          tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\r\n          var rot = (Math.atan(tanAngle) * 180) / Math.PI;\r\n          if (currentPoint.point[0] < prevPoint.point[0]) {\r\n            rot += 180;\r\n          }\r\n          matrixHelper.rotate((-rot * Math.PI) / 180);\r\n        }\r\n        matrixHelper.translate(xPathPos, yPathPos, 0);\r\n        currentLength -= (alignment[0] * letters[i].an) * 0.005;\r\n        if (letters[i + 1] && ind !== letters[i + 1].ind) {\r\n          currentLength += letters[i].an / 2;\r\n          currentLength += (documentData.tr * 0.001) * documentData.finalSize;\r\n        }\r\n      } else {\r\n        matrixHelper.translate(xPos, yPos, 0);\r\n\r\n        if (documentData.ps) {\r\n          // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\r\n          matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\r\n        }\r\n        switch (documentData.j) {\r\n          case 1:\r\n            matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\r\n            break;\r\n          case 2:\r\n            matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n        matrixHelper.translate(0, -documentData.ls);\r\n        matrixHelper.translate(offf, 0, 0);\r\n        matrixHelper.translate((alignment[0] * letters[i].an) * 0.005, (alignment[1] * yOff) * 0.01, 0);\r\n        xPos += letters[i].l + (documentData.tr * 0.001) * documentData.finalSize;\r\n      }\r\n      if (renderType === 'html') {\r\n        letterM = matrixHelper.toCSS();\r\n      } else if (renderType === 'svg') {\r\n        letterM = matrixHelper.to2dCSS();\r\n      } else {\r\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]];\r\n      }\r\n      letterO = elemOpacity;\r\n    }\r\n\r\n    if (renderedLettersCount <= i) {\r\n      letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\r\n      this.renderedLetters.push(letterValue);\r\n      renderedLettersCount += 1;\r\n      this.lettersChangedFlag = true;\r\n    } else {\r\n      letterValue = this.renderedLetters[i];\r\n      this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\r\n    }\r\n  }\r\n};\r\n\r\nTextAnimatorProperty.prototype.getValue = function () {\r\n  if (this._elem.globalData.frameId === this._frameId) {\r\n    return;\r\n  }\r\n  this._frameId = this._elem.globalData.frameId;\r\n  this.iterateDynamicProperties();\r\n};\r\n\r\nTextAnimatorProperty.prototype.mHelper = new Matrix();\r\nTextAnimatorProperty.prototype.defaultPropsArray = [];\r\nextendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\r\n\r\n/* global PropertyFactory, degToRads, TextSelectorProp */\r\n/* exported TextAnimatorDataProperty */\r\n\r\nfunction TextAnimatorDataProperty(elem, animatorProps, container) {\r\n  var defaultData = { propType: false };\r\n  var getProp = PropertyFactory.getProp;\r\n  var textAnimatorAnimatables = animatorProps.a;\r\n  this.a = {\r\n    r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\r\n    rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\r\n    ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\r\n    sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\r\n    sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\r\n    s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\r\n    a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\r\n    o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\r\n    p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\r\n    sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\r\n    sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\r\n    fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\r\n    fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\r\n    fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\r\n    fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\r\n    t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData,\r\n  };\r\n\r\n  this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\r\n  this.s.t = animatorProps.s.t;\r\n}\r\n\r\nfunction LetterProps(o, sw, sc, fc, m, p) {\r\n  this.o = o;\r\n  this.sw = sw;\r\n  this.sc = sc;\r\n  this.fc = fc;\r\n  this.m = m;\r\n  this.p = p;\r\n  this._mdf = {\r\n    o: true,\r\n    sw: !!sw,\r\n    sc: !!sc,\r\n    fc: !!fc,\r\n    m: true,\r\n    p: true,\r\n  };\r\n}\r\n\r\nLetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\r\n  this._mdf.o = false;\r\n  this._mdf.sw = false;\r\n  this._mdf.sc = false;\r\n  this._mdf.fc = false;\r\n  this._mdf.m = false;\r\n  this._mdf.p = false;\r\n  var updated = false;\r\n\r\n  if (this.o !== o) {\r\n    this.o = o;\r\n    this._mdf.o = true;\r\n    updated = true;\r\n  }\r\n  if (this.sw !== sw) {\r\n    this.sw = sw;\r\n    this._mdf.sw = true;\r\n    updated = true;\r\n  }\r\n  if (this.sc !== sc) {\r\n    this.sc = sc;\r\n    this._mdf.sc = true;\r\n    updated = true;\r\n  }\r\n  if (this.fc !== fc) {\r\n    this.fc = fc;\r\n    this._mdf.fc = true;\r\n    updated = true;\r\n  }\r\n  if (this.m !== m) {\r\n    this.m = m;\r\n    this._mdf.m = true;\r\n    updated = true;\r\n  }\r\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])) {\r\n    this.p = p;\r\n    this._mdf.p = true;\r\n    updated = true;\r\n  }\r\n  return updated;\r\n};\r\n\r\n/* global FontManager, initialDefaultFrame, getFontProperties */\r\n/* exported TextProperty */\r\n\r\nfunction TextProperty(elem, data) {\r\n  this._frameId = initialDefaultFrame;\r\n  this.pv = '';\r\n  this.v = '';\r\n  this.kf = false;\r\n  this._isFirstFrame = true;\r\n  this._mdf = false;\r\n  this.data = data;\r\n  this.elem = elem;\r\n  this.comp = this.elem.comp;\r\n  this.keysIndex = 0;\r\n  this.canResize = false;\r\n  this.minimumFontSize = 1;\r\n  this.effectsSequence = [];\r\n  this.currentData = {\r\n    ascent: 0,\r\n    boxWidth: this.defaultBoxWidth,\r\n    f: '',\r\n    fStyle: '',\r\n    fWeight: '',\r\n    fc: '',\r\n    j: '',\r\n    justifyOffset: '',\r\n    l: [],\r\n    lh: 0,\r\n    lineWidths: [],\r\n    ls: '',\r\n    of: '',\r\n    s: '',\r\n    sc: '',\r\n    sw: 0,\r\n    t: 0,\r\n    tr: 0,\r\n    sz: 0,\r\n    ps: null,\r\n    fillColorAnim: false,\r\n    strokeColorAnim: false,\r\n    strokeWidthAnim: false,\r\n    yOffset: 0,\r\n    finalSize: 0,\r\n    finalText: [],\r\n    finalLineHeight: 0,\r\n    __complete: false,\r\n\r\n  };\r\n  this.copyData(this.currentData, this.data.d.k[0].s);\r\n\r\n  if (!this.searchProperty()) {\r\n    this.completeTextData(this.currentData);\r\n  }\r\n}\r\n\r\nTextProperty.prototype.defaultBoxWidth = [0, 0];\r\n\r\nTextProperty.prototype.copyData = function (obj, data) {\r\n  for (var s in data) {\r\n    if (Object.prototype.hasOwnProperty.call(data, s)) {\r\n      obj[s] = data[s];\r\n    }\r\n  }\r\n  return obj;\r\n};\r\n\r\nTextProperty.prototype.setCurrentData = function (data) {\r\n  if (!data.__complete) {\r\n    this.completeTextData(data);\r\n  }\r\n  this.currentData = data;\r\n  this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\r\n  this._mdf = true;\r\n};\r\n\r\nTextProperty.prototype.searchProperty = function () {\r\n  return this.searchKeyframes();\r\n};\r\n\r\nTextProperty.prototype.searchKeyframes = function () {\r\n  this.kf = this.data.d.k.length > 1;\r\n  if (this.kf) {\r\n    this.addEffect(this.getKeyframeValue.bind(this));\r\n  }\r\n  return this.kf;\r\n};\r\n\r\nTextProperty.prototype.addEffect = function (effectFunction) {\r\n  this.effectsSequence.push(effectFunction);\r\n  this.elem.addDynamicProperty(this);\r\n};\r\n\r\nTextProperty.prototype.getValue = function (_finalValue) {\r\n  if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\r\n    return;\r\n  }\r\n  this.currentData.t = this.data.d.k[this.keysIndex].s.t;\r\n  var currentValue = this.currentData;\r\n  var currentIndex = this.keysIndex;\r\n  if (this.lock) {\r\n    this.setCurrentData(this.currentData);\r\n    return;\r\n  }\r\n  this.lock = true;\r\n  this._mdf = false;\r\n  var i; var\r\n    len = this.effectsSequence.length;\r\n  var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\r\n  for (i = 0; i < len; i += 1) {\r\n    // Checking if index changed to prevent creating a new object every time the expression updates.\r\n    if (currentIndex !== this.keysIndex) {\r\n      finalValue = this.effectsSequence[i](finalValue, finalValue.t);\r\n    } else {\r\n      finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\r\n    }\r\n  }\r\n  if (currentValue !== finalValue) {\r\n    this.setCurrentData(finalValue);\r\n  }\r\n  this.v = this.currentData;\r\n  this.pv = this.v;\r\n  this.lock = false;\r\n  this.frameId = this.elem.globalData.frameId;\r\n};\r\n\r\nTextProperty.prototype.getKeyframeValue = function () {\r\n  var textKeys = this.data.d.k;\r\n  var frameNum = this.elem.comp.renderedFrame;\r\n  var i = 0; var\r\n    len = textKeys.length;\r\n  while (i <= len - 1) {\r\n    if (i === len - 1 || textKeys[i + 1].t > frameNum) {\r\n      break;\r\n    }\r\n    i += 1;\r\n  }\r\n  if (this.keysIndex !== i) {\r\n    this.keysIndex = i;\r\n  }\r\n  return this.data.d.k[this.keysIndex].s;\r\n};\r\n\r\nTextProperty.prototype.buildFinalText = function (text) {\r\n  var charactersArray = [];\r\n  var i = 0;\r\n  var len = text.length;\r\n  var charCode;\r\n  var secondCharCode;\r\n  var shouldCombine = false;\r\n  while (i < len) {\r\n    charCode = text.charCodeAt(i);\r\n    if (FontManager.isCombinedCharacter(charCode)) {\r\n      charactersArray[charactersArray.length - 1] += text.charAt(i);\r\n    } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\r\n      secondCharCode = text.charCodeAt(i + 1);\r\n      if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\r\n        if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\r\n          charactersArray[charactersArray.length - 1] += text.substr(i, 2);\r\n          shouldCombine = false;\r\n        } else {\r\n          charactersArray.push(text.substr(i, 2));\r\n        }\r\n        i += 1;\r\n      } else {\r\n        charactersArray.push(text.charAt(i));\r\n      }\r\n    } else if (charCode > 0xDBFF) {\r\n      secondCharCode = text.charCodeAt(i + 1);\r\n      if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\r\n        shouldCombine = true;\r\n        charactersArray[charactersArray.length - 1] += text.substr(i, 2);\r\n        i += 1;\r\n      } else {\r\n        charactersArray.push(text.charAt(i));\r\n      }\r\n    } else if (FontManager.isZeroWidthJoiner(charCode)) {\r\n      charactersArray[charactersArray.length - 1] += text.charAt(i);\r\n      shouldCombine = true;\r\n    } else {\r\n      charactersArray.push(text.charAt(i));\r\n    }\r\n    i += 1;\r\n  }\r\n  return charactersArray;\r\n};\r\n\r\nTextProperty.prototype.completeTextData = function (documentData) {\r\n  documentData.__complete = true;\r\n  var fontManager = this.elem.globalData.fontManager;\r\n  var data = this.data;\r\n  var letters = [];\r\n  var i; var\r\n    len;\r\n  var newLineFlag; var index = 0; var\r\n    val;\r\n  var anchorGrouping = data.m.g;\r\n  var currentSize = 0; var currentPos = 0; var currentLine = 0; var\r\n    lineWidths = [];\r\n  var lineWidth = 0;\r\n  var maxLineWidth = 0;\r\n  var j; var\r\n    jLen;\r\n  var fontData = fontManager.getFontByName(documentData.f);\r\n  var charData; var\r\n    cLength = 0;\r\n\r\n  var fontProps = getFontProperties(fontData);\r\n  documentData.fWeight = fontProps.weight;\r\n  documentData.fStyle = fontProps.style;\r\n  documentData.finalSize = documentData.s;\r\n  documentData.finalText = this.buildFinalText(documentData.t);\r\n  len = documentData.finalText.length;\r\n  documentData.finalLineHeight = documentData.lh;\r\n  var trackingOffset = (documentData.tr / 1000) * documentData.finalSize;\r\n  var charCode;\r\n  if (documentData.sz) {\r\n    var flag = true;\r\n    var boxWidth = documentData.sz[0];\r\n    var boxHeight = documentData.sz[1];\r\n    var currentHeight; var\r\n      finalText;\r\n    while (flag) {\r\n      finalText = this.buildFinalText(documentData.t);\r\n      currentHeight = 0;\r\n      lineWidth = 0;\r\n      len = finalText.length;\r\n      trackingOffset = (documentData.tr / 1000) * documentData.finalSize;\r\n      var lastSpaceIndex = -1;\r\n      for (i = 0; i < len; i += 1) {\r\n        charCode = finalText[i].charCodeAt(0);\r\n        newLineFlag = false;\r\n        if (finalText[i] === ' ') {\r\n          lastSpaceIndex = i;\r\n        } else if (charCode === 13 || charCode === 3) {\r\n          lineWidth = 0;\r\n          newLineFlag = true;\r\n          currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n        }\r\n        if (fontManager.chars) {\r\n          charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\r\n          cLength = newLineFlag ? 0 : (charData.w * documentData.finalSize) / 100;\r\n        } else {\r\n          // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\r\n          cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\r\n        }\r\n        if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\r\n          if (lastSpaceIndex === -1) {\r\n            len += 1;\r\n          } else {\r\n            i = lastSpaceIndex;\r\n          }\r\n          currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n          finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r');\r\n          // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\r\n          lastSpaceIndex = -1;\r\n          lineWidth = 0;\r\n        } else {\r\n          lineWidth += cLength;\r\n          lineWidth += trackingOffset;\r\n        }\r\n      }\r\n      currentHeight += (fontData.ascent * documentData.finalSize) / 100;\r\n      if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\r\n        documentData.finalSize -= 1;\r\n        documentData.finalLineHeight = (documentData.finalSize * documentData.lh) / documentData.s;\r\n      } else {\r\n        documentData.finalText = finalText;\r\n        len = documentData.finalText.length;\r\n        flag = false;\r\n      }\r\n    }\r\n  }\r\n  lineWidth = -trackingOffset;\r\n  cLength = 0;\r\n  var uncollapsedSpaces = 0;\r\n  var currentChar;\r\n  for (i = 0; i < len; i += 1) {\r\n    newLineFlag = false;\r\n    currentChar = documentData.finalText[i];\r\n    charCode = currentChar.charCodeAt(0);\r\n    if (charCode === 13 || charCode === 3) {\r\n      uncollapsedSpaces = 0;\r\n      lineWidths.push(lineWidth);\r\n      maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\r\n      lineWidth = -2 * trackingOffset;\r\n      val = '';\r\n      newLineFlag = true;\r\n      currentLine += 1;\r\n    } else {\r\n      val = currentChar;\r\n    }\r\n    if (fontManager.chars) {\r\n      charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\r\n      cLength = newLineFlag ? 0 : (charData.w * documentData.finalSize) / 100;\r\n    } else {\r\n      // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\r\n      // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\r\n      cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\r\n    }\r\n\r\n    //\r\n    if (currentChar === ' ') {\r\n      uncollapsedSpaces += cLength + trackingOffset;\r\n    } else {\r\n      lineWidth += cLength + trackingOffset + uncollapsedSpaces;\r\n      uncollapsedSpaces = 0;\r\n    }\r\n    letters.push({\r\n      l: cLength, an: cLength, add: currentSize, n: newLineFlag, anIndexes: [], val: val, line: currentLine, animatorJustifyOffset: 0,\r\n    });\r\n    if (anchorGrouping == 2) { // eslint-disable-line eqeqeq\r\n      currentSize += cLength;\r\n      if (val === '' || val === ' ' || i === len - 1) {\r\n        if (val === '' || val === ' ') {\r\n          currentSize -= cLength;\r\n        }\r\n        while (currentPos <= i) {\r\n          letters[currentPos].an = currentSize;\r\n          letters[currentPos].ind = index;\r\n          letters[currentPos].extra = cLength;\r\n          currentPos += 1;\r\n        }\r\n        index += 1;\r\n        currentSize = 0;\r\n      }\r\n    } else if (anchorGrouping == 3) { // eslint-disable-line eqeqeq\r\n      currentSize += cLength;\r\n      if (val === '' || i === len - 1) {\r\n        if (val === '') {\r\n          currentSize -= cLength;\r\n        }\r\n        while (currentPos <= i) {\r\n          letters[currentPos].an = currentSize;\r\n          letters[currentPos].ind = index;\r\n          letters[currentPos].extra = cLength;\r\n          currentPos += 1;\r\n        }\r\n        currentSize = 0;\r\n        index += 1;\r\n      }\r\n    } else {\r\n      letters[index].ind = index;\r\n      letters[index].extra = 0;\r\n      index += 1;\r\n    }\r\n  }\r\n  documentData.l = letters;\r\n  maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\r\n  lineWidths.push(lineWidth);\r\n  if (documentData.sz) {\r\n    documentData.boxWidth = documentData.sz[0];\r\n    documentData.justifyOffset = 0;\r\n  } else {\r\n    documentData.boxWidth = maxLineWidth;\r\n    switch (documentData.j) {\r\n      case 1:\r\n        documentData.justifyOffset = -documentData.boxWidth;\r\n        break;\r\n      case 2:\r\n        documentData.justifyOffset = -documentData.boxWidth / 2;\r\n        break;\r\n      default:\r\n        documentData.justifyOffset = 0;\r\n    }\r\n  }\r\n  documentData.lineWidths = lineWidths;\r\n\r\n  var animators = data.a; var animatorData; var\r\n    letterData;\r\n  jLen = animators.length;\r\n  var based; var ind; var\r\n    indexes = [];\r\n  for (j = 0; j < jLen; j += 1) {\r\n    animatorData = animators[j];\r\n    if (animatorData.a.sc) {\r\n      documentData.strokeColorAnim = true;\r\n    }\r\n    if (animatorData.a.sw) {\r\n      documentData.strokeWidthAnim = true;\r\n    }\r\n    if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\r\n      documentData.fillColorAnim = true;\r\n    }\r\n    ind = 0;\r\n    based = animatorData.s.b;\r\n    for (i = 0; i < len; i += 1) {\r\n      letterData = letters[i];\r\n      letterData.anIndexes[j] = ind;\r\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))) { // eslint-disable-line eqeqeq\r\n        if (animatorData.s.rn === 1) {\r\n          indexes.push(ind);\r\n        }\r\n        ind += 1;\r\n      }\r\n    }\r\n    data.a[j].s.totalChars = ind;\r\n    var currentInd = -1; var\r\n      newInd;\r\n    if (animatorData.s.rn === 1) {\r\n      for (i = 0; i < len; i += 1) {\r\n        letterData = letters[i];\r\n        if (currentInd != letterData.anIndexes[j]) { // eslint-disable-line eqeqeq\r\n          currentInd = letterData.anIndexes[j];\r\n          newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\r\n        }\r\n        letterData.anIndexes[j] = newInd;\r\n      }\r\n    }\r\n  }\r\n  documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n  documentData.ls = documentData.ls || 0;\r\n  documentData.ascent = (fontData.ascent * documentData.finalSize) / 100;\r\n};\r\n\r\nTextProperty.prototype.updateDocumentData = function (newData, index) {\r\n  index = index === undefined ? this.keysIndex : index;\r\n  var dData = this.copyData({}, this.data.d.k[index].s);\r\n  dData = this.copyData(dData, newData);\r\n  this.data.d.k[index].s = dData;\r\n  this.recalculate(index);\r\n  this.elem.addDynamicProperty(this);\r\n};\r\n\r\nTextProperty.prototype.recalculate = function (index) {\r\n  var dData = this.data.d.k[index].s;\r\n  dData.__complete = false;\r\n  this.keysIndex = 0;\r\n  this._isFirstFrame = true;\r\n  this.getValue(dData);\r\n};\r\n\r\nTextProperty.prototype.canResizeFont = function (_canResize) {\r\n  this.canResize = _canResize;\r\n  this.recalculate(this.keysIndex);\r\n  this.elem.addDynamicProperty(this);\r\n};\r\n\r\nTextProperty.prototype.setMinimumFontSize = function (_fontValue) {\r\n  this.minimumFontSize = Math.floor(_fontValue) || 1;\r\n  this.recalculate(this.keysIndex);\r\n  this.elem.addDynamicProperty(this);\r\n};\r\n\r\n/* global extendPrototype, BezierFactory, PropertyFactory, DynamicPropertyContainer */\r\n/* exported TextSelectorProp */\r\n\r\nvar TextSelectorProp = (function () {\r\n  var max = Math.max;\r\n  var min = Math.min;\r\n  var floor = Math.floor;\r\n\r\n  function TextSelectorPropFactory(elem, data) {\r\n    this._currentTextLength = -1;\r\n    this.k = false;\r\n    this.data = data;\r\n    this.elem = elem;\r\n    this.comp = elem.comp;\r\n    this.finalS = 0;\r\n    this.finalE = 0;\r\n    this.initDynamicPropertyContainer(elem);\r\n    this.s = PropertyFactory.getProp(elem, data.s || { k: 0 }, 0, 0, this);\r\n    if ('e' in data) {\r\n      this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\r\n    } else {\r\n      this.e = { v: 100 };\r\n    }\r\n    this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this);\r\n    this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this);\r\n    this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this);\r\n    this.sm = PropertyFactory.getProp(elem, data.sm || { k: 100 }, 0, 0, this);\r\n    this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\r\n    if (!this.dynamicProperties.length) {\r\n      this.getValue();\r\n    }\r\n  }\r\n\r\n  TextSelectorPropFactory.prototype = {\r\n    getMult: function (ind) {\r\n      if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\r\n        this.getValue();\r\n      }\r\n      // var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\r\n      var x1 = 0;\r\n      var y1 = 0;\r\n      var x2 = 1;\r\n      var y2 = 1;\r\n      if (this.ne.v > 0) {\r\n        x1 = this.ne.v / 100.0;\r\n      } else {\r\n        y1 = -this.ne.v / 100.0;\r\n      }\r\n      if (this.xe.v > 0) {\r\n        x2 = 1.0 - this.xe.v / 100.0;\r\n      } else {\r\n        y2 = 1.0 + this.xe.v / 100.0;\r\n      }\r\n      var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\r\n\r\n      var mult = 0;\r\n      var s = this.finalS;\r\n      var e = this.finalE;\r\n      var type = this.data.sh;\r\n      if (type === 2) {\r\n        if (e === s) {\r\n          mult = ind >= e ? 1 : 0;\r\n        } else {\r\n          mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n        }\r\n        mult = easer(mult);\r\n      } else if (type === 3) {\r\n        if (e === s) {\r\n          mult = ind >= e ? 0 : 1;\r\n        } else {\r\n          mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n        }\r\n\r\n        mult = easer(mult);\r\n      } else if (type === 4) {\r\n        if (e === s) {\r\n          mult = 0;\r\n        } else {\r\n          mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n          if (mult < 0.5) {\r\n            mult *= 2;\r\n          } else {\r\n            mult = 1 - 2 * (mult - 0.5);\r\n          }\r\n        }\r\n        mult = easer(mult);\r\n      } else if (type === 5) {\r\n        if (e === s) {\r\n          mult = 0;\r\n        } else {\r\n          var tot = e - s;\r\n          /* ind += 0.5;\r\n                    mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\r\n          ind = min(max(0, ind + 0.5 - s), e - s);\r\n          var x = -tot / 2 + ind;\r\n          var a = tot / 2;\r\n          mult = Math.sqrt(1 - (x * x) / (a * a));\r\n        }\r\n        mult = easer(mult);\r\n      } else if (type === 6) {\r\n        if (e === s) {\r\n          mult = 0;\r\n        } else {\r\n          ind = min(max(0, ind + 0.5 - s), e - s);\r\n          mult = (1 + (Math.cos((Math.PI + Math.PI * 2 * (ind) / (e - s))))) / 2; // eslint-disable-line\r\n        }\r\n        mult = easer(mult);\r\n      } else {\r\n        if (ind >= floor(s)) {\r\n          if (ind - s < 0) {\r\n            mult = max(0, min(min(e, 1) - (s - ind), 1));\r\n          } else {\r\n            mult = max(0, min(e - ind, 1));\r\n          }\r\n        }\r\n        mult = easer(mult);\r\n      }\r\n      // Smoothness implementation.\r\n      // The smoothness represents a reduced range of the original [0; 1] range.\r\n      // if smoothness is 25%, the new range will be [0.375; 0.625]\r\n      // Steps are:\r\n      // - find the lower value of the new range (threshold)\r\n      // - if multiplier is smaller than that value, floor it to 0\r\n      // - if it is larger,\r\n      //     - subtract the threshold\r\n      //     - divide it by the smoothness (this will return the range to [0; 1])\r\n      // Note: If it doesn't work on some scenarios, consider applying it before the easer.\r\n      if (this.sm.v !== 100) {\r\n        var smoothness = this.sm.v * 0.01;\r\n        if (smoothness === 0) {\r\n          smoothness = 0.00000001;\r\n        }\r\n        var threshold = 0.5 - smoothness * 0.5;\r\n        if (mult < threshold) {\r\n          mult = 0;\r\n        } else {\r\n          mult = (mult - threshold) / smoothness;\r\n          if (mult > 1) {\r\n            mult = 1;\r\n          }\r\n        }\r\n      }\r\n      return mult * this.a.v;\r\n    },\r\n    getValue: function (newCharsFlag) {\r\n      this.iterateDynamicProperties();\r\n      this._mdf = newCharsFlag || this._mdf;\r\n      this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\r\n      if (newCharsFlag && this.data.r === 2) {\r\n        this.e.v = this._currentTextLength;\r\n      }\r\n      var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\r\n      var o = this.o.v / divisor;\r\n      var s = this.s.v / divisor + o;\r\n      var e = (this.e.v / divisor) + o;\r\n      if (s > e) {\r\n        var _s = s;\r\n        s = e;\r\n        e = _s;\r\n      }\r\n      this.finalS = s;\r\n      this.finalE = e;\r\n    },\r\n  };\r\n  extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\r\n\r\n  function getTextSelectorProp(elem, data, arr) {\r\n    return new TextSelectorPropFactory(elem, data, arr);\r\n  }\r\n\r\n  return {\r\n    getTextSelectorProp: getTextSelectorProp,\r\n  };\r\n}());\r\n\r\n/* global createSizedArray, pooling */\r\n/* exported poolFactory */\r\n\r\nvar poolFactory = (function () {\r\n  return function (initialLength, _create, _release) {\r\n    var _length = 0;\r\n    var _maxLength = initialLength;\r\n    var pool = createSizedArray(_maxLength);\r\n\r\n    var ob = {\r\n      newElement: newElement,\r\n      release: release,\r\n    };\r\n\r\n    function newElement() {\r\n      var element;\r\n      if (_length) {\r\n        _length -= 1;\r\n        element = pool[_length];\r\n      } else {\r\n        element = _create();\r\n      }\r\n      return element;\r\n    }\r\n\r\n    function release(element) {\r\n      if (_length === _maxLength) {\r\n        pool = pooling.double(pool);\r\n        _maxLength *= 2;\r\n      }\r\n      if (_release) {\r\n        _release(element);\r\n      }\r\n      pool[_length] = element;\r\n      _length += 1;\r\n    }\r\n\r\n    return ob;\r\n  };\r\n}());\r\n\r\n/* global createSizedArray */\r\n/* exported pooling */\r\n\r\nvar pooling = (function () {\r\n  function double(arr) {\r\n    return arr.concat(createSizedArray(arr.length));\r\n  }\r\n\r\n  return {\r\n    double: double,\r\n  };\r\n}());\r\n\r\n/* global createTypedArray, poolFactory */\r\n/* exported pointPool */\r\n\r\nvar pointPool = (function () {\r\n  function create() {\r\n    return createTypedArray('float32', 2);\r\n  }\r\n  return poolFactory(8, create);\r\n}());\r\n\r\n/* global ShapePath, pointPool, poolFactory */\r\n/* exported shapePool */\r\n\r\nvar shapePool = (function () {\r\n  function create() {\r\n    return new ShapePath();\r\n  }\r\n\r\n  function release(shapePath) {\r\n    var len = shapePath._length;\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      pointPool.release(shapePath.v[i]);\r\n      pointPool.release(shapePath.i[i]);\r\n      pointPool.release(shapePath.o[i]);\r\n      shapePath.v[i] = null;\r\n      shapePath.i[i] = null;\r\n      shapePath.o[i] = null;\r\n    }\r\n    shapePath._length = 0;\r\n    shapePath.c = false;\r\n  }\r\n\r\n  function clone(shape) {\r\n    var cloned = factory.newElement();\r\n    var i;\r\n    var len = shape._length === undefined ? shape.v.length : shape._length;\r\n    cloned.setLength(len);\r\n    cloned.c = shape.c;\r\n\r\n    for (i = 0; i < len; i += 1) {\r\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);\r\n    }\r\n    return cloned;\r\n  }\r\n\r\n  var factory = poolFactory(4, create, release);\r\n  factory.clone = clone;\r\n\r\n  return factory;\r\n}());\r\n\r\n/* global createSizedArray, ShapeCollection, shapePool, pooling */\r\n/* exported shapeCollectionPool */\r\n\r\nvar shapeCollectionPool = (function () {\r\n  var ob = {\r\n    newShapeCollection: newShapeCollection,\r\n    release: release,\r\n  };\r\n\r\n  var _length = 0;\r\n  var _maxLength = 4;\r\n  var pool = createSizedArray(_maxLength);\r\n\r\n  function newShapeCollection() {\r\n    var shapeCollection;\r\n    if (_length) {\r\n      _length -= 1;\r\n      shapeCollection = pool[_length];\r\n    } else {\r\n      shapeCollection = new ShapeCollection();\r\n    }\r\n    return shapeCollection;\r\n  }\r\n\r\n  function release(shapeCollection) {\r\n    var i;\r\n    var len = shapeCollection._length;\r\n    for (i = 0; i < len; i += 1) {\r\n      shapePool.release(shapeCollection.shapes[i]);\r\n    }\r\n    shapeCollection._length = 0;\r\n\r\n    if (_length === _maxLength) {\r\n      pool = pooling.double(pool);\r\n      _maxLength *= 2;\r\n    }\r\n    pool[_length] = shapeCollection;\r\n    _length += 1;\r\n  }\r\n\r\n  return ob;\r\n}());\r\n\r\n/* global poolFactory, bezierLengthPool */\r\n/* exported segmentsLengthPool */\r\n\r\nvar segmentsLengthPool = (function () {\r\n  function create() {\r\n    return {\r\n      lengths: [],\r\n      totalLength: 0,\r\n    };\r\n  }\r\n\r\n  function release(element) {\r\n    var i;\r\n    var len = element.lengths.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      bezierLengthPool.release(element.lengths[i]);\r\n    }\r\n    element.lengths.length = 0;\r\n  }\r\n\r\n  return poolFactory(8, create, release);\r\n}());\r\n\r\n/* global createTypedArray, defaultCurveSegments, poolFactory */\r\n/* exported bezierLengthPool */\r\n\r\nvar bezierLengthPool = (function () {\r\n  function create() {\r\n    return {\r\n      addedLength: 0,\r\n      percents: createTypedArray('float32', defaultCurveSegments),\r\n      lengths: createTypedArray('float32', defaultCurveSegments),\r\n    };\r\n  }\r\n  return poolFactory(8, create);\r\n}());\r\n\r\n/* exported markerParser */\r\n\r\nvar markerParser = (\r\n\r\n  function () {\r\n    function parsePayloadLines(payload) {\r\n      var lines = payload.split('\\r\\n');\r\n      var keys = {};\r\n      var line;\r\n      var keysCount = 0;\r\n      for (var i = 0; i < lines.length; i += 1) {\r\n        line = lines[i].split(':');\r\n        if (line.length === 2) {\r\n          keys[line[0]] = line[1].trim();\r\n          keysCount += 1;\r\n        }\r\n      }\r\n      if (keysCount === 0) {\r\n        throw new Error();\r\n      }\r\n      return keys;\r\n    }\r\n\r\n    return function (_markers) {\r\n      var markers = [];\r\n      for (var i = 0; i < _markers.length; i += 1) {\r\n        var _marker = _markers[i];\r\n        var markerData = {\r\n          time: _marker.tm,\r\n          duration: _marker.dr,\r\n        };\r\n        try {\r\n          markerData.payload = JSON.parse(_markers[i].cm);\r\n        } catch (_) {\r\n          try {\r\n            markerData.payload = parsePayloadLines(_markers[i].cm);\r\n          } catch (__) {\r\n            markerData.payload = {\r\n              name: _markers[i],\r\n            };\r\n          }\r\n        }\r\n        markers.push(markerData);\r\n      }\r\n      return markers;\r\n    };\r\n  }());\r\n\r\n/* global AudioElement, FootageElement, FontManager */\r\n\r\nfunction BaseRenderer() {}\r\nBaseRenderer.prototype.checkLayers = function (num) {\r\n  var i;\r\n  var len = this.layers.length;\r\n  var data;\r\n  this.completeLayers = true;\r\n  for (i = len - 1; i >= 0; i -= 1) {\r\n    if (!this.elements[i]) {\r\n      data = this.layers[i];\r\n      if (data.ip - data.st <= (num - this.layers[i].st) && data.op - data.st > (num - this.layers[i].st)) {\r\n        this.buildItem(i);\r\n      }\r\n    }\r\n    this.completeLayers = this.elements[i] ? this.completeLayers : false;\r\n  }\r\n  this.checkPendingElements();\r\n};\r\n\r\nBaseRenderer.prototype.createItem = function (layer) {\r\n  switch (layer.ty) {\r\n    case 2:\r\n      return this.createImage(layer);\r\n    case 0:\r\n      return this.createComp(layer);\r\n    case 1:\r\n      return this.createSolid(layer);\r\n    case 3:\r\n      return this.createNull(layer);\r\n    case 4:\r\n      return this.createShape(layer);\r\n    case 5:\r\n      return this.createText(layer);\r\n    case 6:\r\n      return this.createAudio(layer);\r\n    case 13:\r\n      return this.createCamera(layer);\r\n    case 15:\r\n      return this.createFootage(layer);\r\n    default:\r\n      return this.createNull(layer);\r\n  }\r\n};\r\n\r\nBaseRenderer.prototype.createCamera = function () {\r\n  throw new Error('You\\'re using a 3d camera. Try the html renderer.');\r\n};\r\n\r\nBaseRenderer.prototype.createAudio = function (data) {\r\n  return new AudioElement(data, this.globalData, this);\r\n};\r\n\r\nBaseRenderer.prototype.createFootage = function (data) {\r\n  return new FootageElement(data, this.globalData, this);\r\n};\r\n\r\nBaseRenderer.prototype.buildAllItems = function () {\r\n  var i;\r\n  var len = this.layers.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    this.buildItem(i);\r\n  }\r\n  this.checkPendingElements();\r\n};\r\n\r\nBaseRenderer.prototype.includeLayers = function (newLayers) {\r\n  this.completeLayers = false;\r\n  var i;\r\n  var len = newLayers.length;\r\n  var j;\r\n  var jLen = this.layers.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    j = 0;\r\n    while (j < jLen) {\r\n      if (this.layers[j].id === newLayers[i].id) {\r\n        this.layers[j] = newLayers[i];\r\n        break;\r\n      }\r\n      j += 1;\r\n    }\r\n  }\r\n};\r\n\r\nBaseRenderer.prototype.setProjectInterface = function (pInterface) {\r\n  this.globalData.projectInterface = pInterface;\r\n};\r\n\r\nBaseRenderer.prototype.initItems = function () {\r\n  if (!this.globalData.progressiveLoad) {\r\n    this.buildAllItems();\r\n  }\r\n};\r\nBaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\r\n  var elements = this.elements;\r\n  var layers = this.layers;\r\n  var i = 0;\r\n  var len = layers.length;\r\n  while (i < len) {\r\n    if (layers[i].ind == parentName) { // eslint-disable-line eqeqeq\r\n      if (!elements[i] || elements[i] === true) {\r\n        this.buildItem(i);\r\n        this.addPendingElement(element);\r\n      } else {\r\n        hierarchy.push(elements[i]);\r\n        elements[i].setAsParent();\r\n        if (layers[i].parent !== undefined) {\r\n          this.buildElementParenting(element, layers[i].parent, hierarchy);\r\n        } else {\r\n          element.setHierarchy(hierarchy);\r\n        }\r\n      }\r\n    }\r\n    i += 1;\r\n  }\r\n};\r\n\r\nBaseRenderer.prototype.addPendingElement = function (element) {\r\n  this.pendingElements.push(element);\r\n};\r\n\r\nBaseRenderer.prototype.searchExtraCompositions = function (assets) {\r\n  var i;\r\n  var len = assets.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    if (assets[i].xt) {\r\n      var comp = this.createComp(assets[i]);\r\n      comp.initExpressions();\r\n      this.globalData.projectInterface.registerComposition(comp);\r\n    }\r\n  }\r\n};\r\n\r\nBaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\r\n  this.globalData.fontManager = new FontManager();\r\n  this.globalData.fontManager.addChars(animData.chars);\r\n  this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\r\n  this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\r\n  this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\r\n  this.globalData.imageLoader = this.animationItem.imagePreloader;\r\n  this.globalData.audioController = this.animationItem.audioController;\r\n  this.globalData.frameId = 0;\r\n  this.globalData.frameRate = animData.fr;\r\n  this.globalData.nm = animData.nm;\r\n  this.globalData.compSize = {\r\n    w: animData.w,\r\n    h: animData.h,\r\n  };\r\n};\r\n\r\n/* global createElementID, extendPrototype, BaseRenderer, NullElement, SVGShapeElement, SVGTextLottieElement,\r\nIImageElement, SVGCompElement, ISolidElement, createNS, locationHref, createSizedArray, expressionsPlugin */\r\n\r\nfunction SVGRenderer(animationItem, config) {\r\n  this.animationItem = animationItem;\r\n  this.layers = null;\r\n  this.renderedFrame = -1;\r\n  this.svgElement = createNS('svg');\r\n  var ariaLabel = '';\r\n  if (config && config.title) {\r\n    var titleElement = createNS('title');\r\n    var titleId = createElementID();\r\n    titleElement.setAttribute('id', titleId);\r\n    titleElement.textContent = config.title;\r\n    this.svgElement.appendChild(titleElement);\r\n    ariaLabel += titleId;\r\n  }\r\n  if (config && config.description) {\r\n    var descElement = createNS('desc');\r\n    var descId = createElementID();\r\n    descElement.setAttribute('id', descId);\r\n    descElement.textContent = config.description;\r\n    this.svgElement.appendChild(descElement);\r\n    ariaLabel += ' ' + descId;\r\n  }\r\n  if (ariaLabel) {\r\n    this.svgElement.setAttribute('aria-labelledby', ariaLabel);\r\n  }\r\n  var defs = createNS('defs');\r\n  this.svgElement.appendChild(defs);\r\n  var maskElement = createNS('g');\r\n  this.svgElement.appendChild(maskElement);\r\n  this.layerElement = maskElement;\r\n  this.renderConfig = {\r\n    preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\r\n    imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\r\n    contentVisibility: (config && config.contentVisibility) || 'visible',\r\n    progressiveLoad: (config && config.progressiveLoad) || false,\r\n    hideOnTransparent: !((config && config.hideOnTransparent === false)),\r\n    viewBoxOnly: (config && config.viewBoxOnly) || false,\r\n    viewBoxSize: (config && config.viewBoxSize) || false,\r\n    className: (config && config.className) || '',\r\n    id: (config && config.id) || '',\r\n    focusable: config && config.focusable,\r\n    filterSize: {\r\n      width: (config && config.filterSize && config.filterSize.width) || '100%',\r\n      height: (config && config.filterSize && config.filterSize.height) || '100%',\r\n      x: (config && config.filterSize && config.filterSize.x) || '0%',\r\n      y: (config && config.filterSize && config.filterSize.y) || '0%',\r\n    },\r\n  };\r\n\r\n  this.globalData = {\r\n    _mdf: false,\r\n    frameNum: -1,\r\n    defs: defs,\r\n    renderConfig: this.renderConfig,\r\n  };\r\n  this.elements = [];\r\n  this.pendingElements = [];\r\n  this.destroyed = false;\r\n  this.rendererType = 'svg';\r\n}\r\n\r\nextendPrototype([BaseRenderer], SVGRenderer);\r\n\r\nSVGRenderer.prototype.createNull = function (data) {\r\n  return new NullElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createShape = function (data) {\r\n  return new SVGShapeElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createText = function (data) {\r\n  return new SVGTextLottieElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createImage = function (data) {\r\n  return new IImageElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createComp = function (data) {\r\n  return new SVGCompElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createSolid = function (data) {\r\n  return new ISolidElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.configAnimation = function (animData) {\r\n  this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n  if (this.renderConfig.viewBoxSize) {\r\n    this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\r\n  } else {\r\n    this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\r\n  }\r\n\r\n  if (!this.renderConfig.viewBoxOnly) {\r\n    this.svgElement.setAttribute('width', animData.w);\r\n    this.svgElement.setAttribute('height', animData.h);\r\n    this.svgElement.style.width = '100%';\r\n    this.svgElement.style.height = '100%';\r\n    this.svgElement.style.transform = 'translate3d(0,0,0)';\r\n    this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\r\n  }\r\n  if (this.renderConfig.className) {\r\n    this.svgElement.setAttribute('class', this.renderConfig.className);\r\n  }\r\n  if (this.renderConfig.id) {\r\n    this.svgElement.setAttribute('id', this.renderConfig.id);\r\n  }\r\n  if (this.renderConfig.focusable !== undefined) {\r\n    this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\r\n  }\r\n  this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\r\n  // this.layerElement.style.transform = 'translate3d(0,0,0)';\r\n  // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\r\n  this.animationItem.wrapper.appendChild(this.svgElement);\r\n  // Mask animation\r\n  var defs = this.globalData.defs;\r\n\r\n  this.setupGlobalData(animData, defs);\r\n  this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\r\n  this.data = animData;\r\n\r\n  var maskElement = createNS('clipPath');\r\n  var rect = createNS('rect');\r\n  rect.setAttribute('width', animData.w);\r\n  rect.setAttribute('height', animData.h);\r\n  rect.setAttribute('x', 0);\r\n  rect.setAttribute('y', 0);\r\n  var maskId = createElementID();\r\n  maskElement.setAttribute('id', maskId);\r\n  maskElement.appendChild(rect);\r\n  this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + maskId + ')');\r\n\r\n  defs.appendChild(maskElement);\r\n  this.layers = animData.layers;\r\n  this.elements = createSizedArray(animData.layers.length);\r\n};\r\n\r\nSVGRenderer.prototype.destroy = function () {\r\n  if (this.animationItem.wrapper) {\r\n    this.animationItem.wrapper.innerText = '';\r\n  }\r\n  this.layerElement = null;\r\n  this.globalData.defs = null;\r\n  var i;\r\n  var len = this.layers ? this.layers.length : 0;\r\n  for (i = 0; i < len; i += 1) {\r\n    if (this.elements[i]) {\r\n      this.elements[i].destroy();\r\n    }\r\n  }\r\n  this.elements.length = 0;\r\n  this.destroyed = true;\r\n  this.animationItem = null;\r\n};\r\n\r\nSVGRenderer.prototype.updateContainerSize = function () {\r\n};\r\n\r\nSVGRenderer.prototype.buildItem = function (pos) {\r\n  var elements = this.elements;\r\n  if (elements[pos] || this.layers[pos].ty === 99) {\r\n    return;\r\n  }\r\n  elements[pos] = true;\r\n  var element = this.createItem(this.layers[pos]);\r\n\r\n  elements[pos] = element;\r\n  if (expressionsPlugin) {\r\n    if (this.layers[pos].ty === 0) {\r\n      this.globalData.projectInterface.registerComposition(element);\r\n    }\r\n    element.initExpressions();\r\n  }\r\n  this.appendElementInPos(element, pos);\r\n  if (this.layers[pos].tt) {\r\n    if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\r\n      this.buildItem(pos - 1);\r\n      this.addPendingElement(element);\r\n    } else {\r\n      element.setMatte(elements[pos - 1].layerId);\r\n    }\r\n  }\r\n};\r\n\r\nSVGRenderer.prototype.checkPendingElements = function () {\r\n  while (this.pendingElements.length) {\r\n    var element = this.pendingElements.pop();\r\n    element.checkParenting();\r\n    if (element.data.tt) {\r\n      var i = 0;\r\n      var len = this.elements.length;\r\n      while (i < len) {\r\n        if (this.elements[i] === element) {\r\n          element.setMatte(this.elements[i - 1].layerId);\r\n          break;\r\n        }\r\n        i += 1;\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nSVGRenderer.prototype.renderFrame = function (num) {\r\n  if (this.renderedFrame === num || this.destroyed) {\r\n    return;\r\n  }\r\n  if (num === null) {\r\n    num = this.renderedFrame;\r\n  } else {\r\n    this.renderedFrame = num;\r\n  }\r\n  // console.log('-------');\r\n  // console.log('FRAME ',num);\r\n  this.globalData.frameNum = num;\r\n  this.globalData.frameId += 1;\r\n  this.globalData.projectInterface.currentFrame = num;\r\n  this.globalData._mdf = false;\r\n  var i;\r\n  var len = this.layers.length;\r\n  if (!this.completeLayers) {\r\n    this.checkLayers(num);\r\n  }\r\n  for (i = len - 1; i >= 0; i -= 1) {\r\n    if (this.completeLayers || this.elements[i]) {\r\n      this.elements[i].prepareFrame(num - this.layers[i].st);\r\n    }\r\n  }\r\n  if (this.globalData._mdf) {\r\n    for (i = 0; i < len; i += 1) {\r\n      if (this.completeLayers || this.elements[i]) {\r\n        this.elements[i].renderFrame();\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nSVGRenderer.prototype.appendElementInPos = function (element, pos) {\r\n  var newElement = element.getBaseElement();\r\n  if (!newElement) {\r\n    return;\r\n  }\r\n  var i = 0;\r\n  var nextElement;\r\n  while (i < pos) {\r\n    if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\r\n      nextElement = this.elements[i].getBaseElement();\r\n    }\r\n    i += 1;\r\n  }\r\n  if (nextElement) {\r\n    this.layerElement.insertBefore(newElement, nextElement);\r\n  } else {\r\n    this.layerElement.appendChild(newElement);\r\n  }\r\n};\r\n\r\nSVGRenderer.prototype.hide = function () {\r\n  this.layerElement.style.display = 'none';\r\n};\r\n\r\nSVGRenderer.prototype.show = function () {\r\n  this.layerElement.style.display = 'block';\r\n};\r\n\r\n/* global createSizedArray, createElementID, PropertyFactory, ShapePropertyFactory, createNS, locationHref */\r\n\r\nfunction MaskElement(data, element, globalData) {\r\n  this.data = data;\r\n  this.element = element;\r\n  this.globalData = globalData;\r\n  this.storedData = [];\r\n  this.masksProperties = this.data.masksProperties || [];\r\n  this.maskElement = null;\r\n  var defs = this.globalData.defs;\r\n  var i;\r\n  var len = this.masksProperties ? this.masksProperties.length : 0;\r\n  this.viewData = createSizedArray(len);\r\n  this.solidPath = '';\r\n\r\n  var path;\r\n  var properties = this.masksProperties;\r\n  var count = 0;\r\n  var currentMasks = [];\r\n  var j;\r\n  var jLen;\r\n  var layerId = createElementID();\r\n  var rect;\r\n  var expansor;\r\n  var feMorph;\r\n  var x;\r\n  var maskType = 'clipPath';\r\n  var maskRef = 'clip-path';\r\n  for (i = 0; i < len; i += 1) {\r\n    if ((properties[i].mode !== 'a' && properties[i].mode !== 'n') || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\r\n      maskType = 'mask';\r\n      maskRef = 'mask';\r\n    }\r\n\r\n    if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\r\n      rect = createNS('rect');\r\n      rect.setAttribute('fill', '#ffffff');\r\n      rect.setAttribute('width', this.element.comp.data.w || 0);\r\n      rect.setAttribute('height', this.element.comp.data.h || 0);\r\n      currentMasks.push(rect);\r\n    } else {\r\n      rect = null;\r\n    }\r\n\r\n    path = createNS('path');\r\n    if (properties[i].mode === 'n') {\r\n      // TODO move this to a factory or to a constructor\r\n      this.viewData[i] = {\r\n        op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\r\n        prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\r\n        elem: path,\r\n        lastPath: '',\r\n      };\r\n      defs.appendChild(path);\r\n    } else {\r\n      count += 1;\r\n\r\n      path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\r\n      path.setAttribute('clip-rule', 'nonzero');\r\n      var filterID;\r\n\r\n      if (properties[i].x.k !== 0) {\r\n        maskType = 'mask';\r\n        maskRef = 'mask';\r\n        x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\r\n        filterID = createElementID();\r\n        expansor = createNS('filter');\r\n        expansor.setAttribute('id', filterID);\r\n        feMorph = createNS('feMorphology');\r\n        feMorph.setAttribute('operator', 'erode');\r\n        feMorph.setAttribute('in', 'SourceGraphic');\r\n        feMorph.setAttribute('radius', '0');\r\n        expansor.appendChild(feMorph);\r\n        defs.appendChild(expansor);\r\n        path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\r\n      } else {\r\n        feMorph = null;\r\n        x = null;\r\n      }\r\n\r\n      // TODO move this to a factory or to a constructor\r\n      this.storedData[i] = {\r\n        elem: path,\r\n        x: x,\r\n        expan: feMorph,\r\n        lastPath: '',\r\n        lastOperator: '',\r\n        filterId: filterID,\r\n        lastRadius: 0,\r\n      };\r\n      if (properties[i].mode === 'i') {\r\n        jLen = currentMasks.length;\r\n        var g = createNS('g');\r\n        for (j = 0; j < jLen; j += 1) {\r\n          g.appendChild(currentMasks[j]);\r\n        }\r\n        var mask = createNS('mask');\r\n        mask.setAttribute('mask-type', 'alpha');\r\n        mask.setAttribute('id', layerId + '_' + count);\r\n        mask.appendChild(path);\r\n        defs.appendChild(mask);\r\n        g.setAttribute('mask', 'url(' + locationHref + '#' + layerId + '_' + count + ')');\r\n\r\n        currentMasks.length = 0;\r\n        currentMasks.push(g);\r\n      } else {\r\n        currentMasks.push(path);\r\n      }\r\n      if (properties[i].inv && !this.solidPath) {\r\n        this.solidPath = this.createLayerSolidPath();\r\n      }\r\n      // TODO move this to a factory or to a constructor\r\n      this.viewData[i] = {\r\n        elem: path,\r\n        lastPath: '',\r\n        op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\r\n        prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\r\n        invRect: rect,\r\n      };\r\n      if (!this.viewData[i].prop.k) {\r\n        this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\r\n      }\r\n    }\r\n  }\r\n\r\n  this.maskElement = createNS(maskType);\r\n\r\n  len = currentMasks.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    this.maskElement.appendChild(currentMasks[i]);\r\n  }\r\n\r\n  if (count > 0) {\r\n    this.maskElement.setAttribute('id', layerId);\r\n    this.element.maskedElement.setAttribute(maskRef, 'url(' + locationHref + '#' + layerId + ')');\r\n    defs.appendChild(this.maskElement);\r\n  }\r\n  if (this.viewData.length) {\r\n    this.element.addRenderableComponent(this);\r\n  }\r\n}\r\n\r\nMaskElement.prototype.getMaskProperty = function (pos) {\r\n  return this.viewData[pos].prop;\r\n};\r\n\r\nMaskElement.prototype.renderFrame = function (isFirstFrame) {\r\n  var finalMat = this.element.finalTransform.mat;\r\n  var i;\r\n  var len = this.masksProperties.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    if (this.viewData[i].prop._mdf || isFirstFrame) {\r\n      this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\r\n    }\r\n    if (this.viewData[i].op._mdf || isFirstFrame) {\r\n      this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\r\n    }\r\n    if (this.masksProperties[i].mode !== 'n') {\r\n      if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\r\n        this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\r\n      }\r\n      if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\r\n        var feMorph = this.storedData[i].expan;\r\n        if (this.storedData[i].x.v < 0) {\r\n          if (this.storedData[i].lastOperator !== 'erode') {\r\n            this.storedData[i].lastOperator = 'erode';\r\n            this.storedData[i].elem.setAttribute('filter', 'url(' + locationHref + '#' + this.storedData[i].filterId + ')');\r\n          }\r\n          feMorph.setAttribute('radius', -this.storedData[i].x.v);\r\n        } else {\r\n          if (this.storedData[i].lastOperator !== 'dilate') {\r\n            this.storedData[i].lastOperator = 'dilate';\r\n            this.storedData[i].elem.setAttribute('filter', null);\r\n          }\r\n          this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\r\n        }\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nMaskElement.prototype.getMaskelement = function () {\r\n  return this.maskElement;\r\n};\r\n\r\nMaskElement.prototype.createLayerSolidPath = function () {\r\n  var path = 'M0,0 ';\r\n  path += ' h' + this.globalData.compSize.w;\r\n  path += ' v' + this.globalData.compSize.h;\r\n  path += ' h-' + this.globalData.compSize.w;\r\n  path += ' v-' + this.globalData.compSize.h + ' ';\r\n  return path;\r\n};\r\n\r\nMaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\r\n  var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\r\n  var i;\r\n  var len;\r\n  len = pathNodes._length;\r\n  for (i = 1; i < len; i += 1) {\r\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];\r\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];\r\n  }\r\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];\r\n  if (pathNodes.c && len > 1) {\r\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];\r\n  }\r\n  // pathNodes.__renderedString = pathString;\r\n\r\n  if (viewData.lastPath !== pathString) {\r\n    var pathShapeValue = '';\r\n    if (viewData.elem) {\r\n      if (pathNodes.c) {\r\n        pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\r\n      }\r\n      viewData.elem.setAttribute('d', pathShapeValue);\r\n    }\r\n    viewData.lastPath = pathString;\r\n  }\r\n};\r\n\r\nMaskElement.prototype.destroy = function () {\r\n  this.element = null;\r\n  this.globalData = null;\r\n  this.maskElement = null;\r\n  this.data = null;\r\n  this.masksProperties = null;\r\n};\r\n\r\n/**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\r\n\r\nfunction HierarchyElement() {}\r\n\r\nHierarchyElement.prototype = {\r\n  /**\r\n     * @function\r\n     * Initializes hierarchy properties\r\n     *\r\n     */\r\n  initHierarchy: function () {\r\n    // element's parent list\r\n    this.hierarchy = [];\r\n    // if element is parent of another layer _isParent will be true\r\n    this._isParent = false;\r\n    this.checkParenting();\r\n  },\r\n  /**\r\n     * @function\r\n     * Sets layer's hierarchy.\r\n     * @param {array} hierarch\r\n     * layer's parent list\r\n     *\r\n     */\r\n  setHierarchy: function (hierarchy) {\r\n    this.hierarchy = hierarchy;\r\n  },\r\n  /**\r\n     * @function\r\n     * Sets layer as parent.\r\n     *\r\n     */\r\n  setAsParent: function () {\r\n    this._isParent = true;\r\n  },\r\n  /**\r\n     * @function\r\n     * Searches layer's parenting chain\r\n     *\r\n     */\r\n  checkParenting: function () {\r\n    if (this.data.parent !== undefined) {\r\n      this.comp.buildElementParenting(this, this.data.parent, []);\r\n    }\r\n  },\r\n};\r\n\r\n/**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\r\n\r\nfunction FrameElement() {}\r\n\r\nFrameElement.prototype = {\r\n  /**\r\n     * @function\r\n     * Initializes frame related properties.\r\n     *\r\n     */\r\n  initFrame: function () {\r\n    // set to true when inpoint is rendered\r\n    this._isFirstFrame = false;\r\n    // list of animated properties\r\n    this.dynamicProperties = [];\r\n    // If layer has been modified in current tick this will be true\r\n    this._mdf = false;\r\n  },\r\n  /**\r\n     * @function\r\n     * Calculates all dynamic values\r\n     *\r\n     * @param {number} num\r\n     * current frame number in Layer's time\r\n     * @param {boolean} isVisible\r\n     * if layers is currently in range\r\n     *\r\n     */\r\n  prepareProperties: function (num, isVisible) {\r\n    var i;\r\n    var len = this.dynamicProperties.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      if (isVisible || (this._isParent && this.dynamicProperties[i].propType === 'transform')) {\r\n        this.dynamicProperties[i].getValue();\r\n        if (this.dynamicProperties[i]._mdf) {\r\n          this.globalData._mdf = true;\r\n          this._mdf = true;\r\n        }\r\n      }\r\n    }\r\n  },\r\n  addDynamicProperty: function (prop) {\r\n    if (this.dynamicProperties.indexOf(prop) === -1) {\r\n      this.dynamicProperties.push(prop);\r\n    }\r\n  },\r\n};\r\n\r\n/* global TransformPropertyFactory, Matrix */\r\n\r\nfunction TransformElement() {}\r\n\r\nTransformElement.prototype = {\r\n  initTransform: function () {\r\n    this.finalTransform = {\r\n      mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 },\r\n      _matMdf: false,\r\n      _opMdf: false,\r\n      mat: new Matrix(),\r\n    };\r\n    if (this.data.ao) {\r\n      this.finalTransform.mProp.autoOriented = true;\r\n    }\r\n\r\n    // TODO: check TYPE 11: Guided elements\r\n    if (this.data.ty !== 11) {\r\n      // this.createElements();\r\n    }\r\n  },\r\n  renderTransform: function () {\r\n    this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\r\n    this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\r\n\r\n    if (this.hierarchy) {\r\n      var mat;\r\n      var finalMat = this.finalTransform.mat;\r\n      var i = 0;\r\n      var len = this.hierarchy.length;\r\n      // Checking if any of the transformation matrices in the hierarchy chain has changed.\r\n      if (!this.finalTransform._matMdf) {\r\n        while (i < len) {\r\n          if (this.hierarchy[i].finalTransform.mProp._mdf) {\r\n            this.finalTransform._matMdf = true;\r\n            break;\r\n          }\r\n          i += 1;\r\n        }\r\n      }\r\n\r\n      if (this.finalTransform._matMdf) {\r\n        mat = this.finalTransform.mProp.v.props;\r\n        finalMat.cloneFromProps(mat);\r\n        for (i = 0; i < len; i += 1) {\r\n          mat = this.hierarchy[i].finalTransform.mProp.v.props;\r\n          finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\r\n        }\r\n      }\r\n    }\r\n  },\r\n  globalToLocal: function (pt) {\r\n    var transforms = [];\r\n    transforms.push(this.finalTransform);\r\n    var flag = true;\r\n    var comp = this.comp;\r\n    while (flag) {\r\n      if (comp.finalTransform) {\r\n        if (comp.data.hasMask) {\r\n          transforms.splice(0, 0, comp.finalTransform);\r\n        }\r\n        comp = comp.comp;\r\n      } else {\r\n        flag = false;\r\n      }\r\n    }\r\n    var i;\r\n    var len = transforms.length;\r\n    var ptNew;\r\n    for (i = 0; i < len; i += 1) {\r\n      ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\r\n      // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\r\n      pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\r\n    }\r\n    return pt;\r\n  },\r\n  mHelper: new Matrix(),\r\n};\r\n\r\nfunction RenderableElement() {\r\n\r\n}\r\n\r\nRenderableElement.prototype = {\r\n  initRenderable: function () {\r\n    // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\r\n    this.isInRange = false;\r\n    // layer's display state\r\n    this.hidden = false;\r\n    // If layer's transparency equals 0, it can be hidden\r\n    this.isTransparent = false;\r\n    // list of animated components\r\n    this.renderableComponents = [];\r\n  },\r\n  addRenderableComponent: function (component) {\r\n    if (this.renderableComponents.indexOf(component) === -1) {\r\n      this.renderableComponents.push(component);\r\n    }\r\n  },\r\n  removeRenderableComponent: function (component) {\r\n    if (this.renderableComponents.indexOf(component) !== -1) {\r\n      this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\r\n    }\r\n  },\r\n  prepareRenderableFrame: function (num) {\r\n    this.checkLayerLimits(num);\r\n  },\r\n  checkTransparency: function () {\r\n    if (this.finalTransform.mProp.o.v <= 0) {\r\n      if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\r\n        this.isTransparent = true;\r\n        this.hide();\r\n      }\r\n    } else if (this.isTransparent) {\r\n      this.isTransparent = false;\r\n      this.show();\r\n    }\r\n  },\r\n  /**\r\n     * @function\r\n     * Initializes frame related properties.\r\n     *\r\n     * @param {number} num\r\n     * current frame number in Layer's time\r\n     *\r\n     */\r\n  checkLayerLimits: function (num) {\r\n    if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\r\n      if (this.isInRange !== true) {\r\n        this.globalData._mdf = true;\r\n        this._mdf = true;\r\n        this.isInRange = true;\r\n        this.show();\r\n      }\r\n    } else if (this.isInRange !== false) {\r\n      this.globalData._mdf = true;\r\n      this.isInRange = false;\r\n      this.hide();\r\n    }\r\n  },\r\n  renderRenderable: function () {\r\n    var i;\r\n    var len = this.renderableComponents.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      this.renderableComponents[i].renderFrame(this._isFirstFrame);\r\n    }\r\n    /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n        this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\r\n  },\r\n  sourceRectAtTime: function () {\r\n    return {\r\n      top: 0,\r\n      left: 0,\r\n      width: 100,\r\n      height: 100,\r\n    };\r\n  },\r\n  getLayerSize: function () {\r\n    if (this.data.ty === 5) {\r\n      return { w: this.data.textData.width, h: this.data.textData.height };\r\n    }\r\n    return { w: this.data.width, h: this.data.height };\r\n  },\r\n};\r\n\r\n/* global extendPrototype, RenderableElement, createProxyFunction */\r\n\r\nfunction RenderableDOMElement() {}\r\n\r\n(function () {\r\n  var _prototype = {\r\n    initElement: function (data, globalData, comp) {\r\n      this.initFrame();\r\n      this.initBaseData(data, globalData, comp);\r\n      this.initTransform(data, globalData, comp);\r\n      this.initHierarchy();\r\n      this.initRenderable();\r\n      this.initRendererElement();\r\n      this.createContainerElements();\r\n      this.createRenderableComponents();\r\n      this.createContent();\r\n      this.hide();\r\n    },\r\n    hide: function () {\r\n      if (!this.hidden && (!this.isInRange || this.isTransparent)) {\r\n        var elem = this.baseElement || this.layerElement;\r\n        elem.style.display = 'none';\r\n        this.hidden = true;\r\n      }\r\n    },\r\n    show: function () {\r\n      if (this.isInRange && !this.isTransparent) {\r\n        if (!this.data.hd) {\r\n          var elem = this.baseElement || this.layerElement;\r\n          elem.style.display = 'block';\r\n        }\r\n        this.hidden = false;\r\n        this._isFirstFrame = true;\r\n      }\r\n    },\r\n    renderFrame: function () {\r\n      // If it is exported as hidden (data.hd === true) no need to render\r\n      // If it is not visible no need to render\r\n      if (this.data.hd || this.hidden) {\r\n        return;\r\n      }\r\n      this.renderTransform();\r\n      this.renderRenderable();\r\n      this.renderElement();\r\n      this.renderInnerContent();\r\n      if (this._isFirstFrame) {\r\n        this._isFirstFrame = false;\r\n      }\r\n    },\r\n    renderInnerContent: function () {},\r\n    prepareFrame: function (num) {\r\n      this._mdf = false;\r\n      this.prepareRenderableFrame(num);\r\n      this.prepareProperties(num, this.isInRange);\r\n      this.checkTransparency();\r\n    },\r\n    destroy: function () {\r\n      this.innerElem = null;\r\n      this.destroyBaseElement();\r\n    },\r\n  };\r\n  extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\r\n}());\r\n\r\n/* exported ProcessedElement */\r\n\r\nfunction ProcessedElement(element, position) {\r\n  this.elem = element;\r\n  this.pos = position;\r\n}\r\n\r\n/* global createNS */\r\n\r\nfunction SVGStyleData(data, level) {\r\n  this.data = data;\r\n  this.type = data.ty;\r\n  this.d = '';\r\n  this.lvl = level;\r\n  this._mdf = false;\r\n  this.closed = data.hd === true;\r\n  this.pElem = createNS('path');\r\n  this.msElem = null;\r\n}\r\n\r\nSVGStyleData.prototype.reset = function () {\r\n  this.d = '';\r\n  this._mdf = false;\r\n};\r\n\r\nfunction SVGShapeData(transformers, level, shape) {\r\n  this.caches = [];\r\n  this.styles = [];\r\n  this.transformers = transformers;\r\n  this.lStr = '';\r\n  this.sh = shape;\r\n  this.lvl = level;\r\n  // TODO find if there are some cases where _isAnimated can be false.\r\n  // For now, since shapes add up with other shapes. They have to be calculated every time.\r\n  // One way of finding out is checking if all styles associated to this shape depend only of this shape\r\n  this._isAnimated = !!shape.k;\r\n  // TODO: commenting this for now since all shapes are animated\r\n  var i = 0;\r\n  var len = transformers.length;\r\n  while (i < len) {\r\n    if (transformers[i].mProps.dynamicProperties.length) {\r\n      this._isAnimated = true;\r\n      break;\r\n    }\r\n    i += 1;\r\n  }\r\n}\r\n\r\nSVGShapeData.prototype.setAsAnimated = function () {\r\n  this._isAnimated = true;\r\n};\r\n\r\n/* exported SVGTransformData */\r\n\r\nfunction SVGTransformData(mProps, op, container) {\r\n  this.transform = {\r\n    mProps: mProps,\r\n    op: op,\r\n    container: container,\r\n  };\r\n  this.elements = [];\r\n  this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\r\n}\r\n\r\n/* global DashProperty, PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\n\r\nfunction SVGStrokeStyleData(elem, data, styleOb) {\r\n  this.initDynamicPropertyContainer(elem);\r\n  this.getValue = this.iterateDynamicProperties;\r\n  this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n  this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\r\n  this.d = new DashProperty(elem, data.d || {}, 'svg', this);\r\n  this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\r\n  this.style = styleOb;\r\n  this._isAnimated = !!this._isAnimated;\r\n}\r\n\r\nextendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\r\n\r\n/* global PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\n\r\nfunction SVGFillStyleData(elem, data, styleOb) {\r\n  this.initDynamicPropertyContainer(elem);\r\n  this.getValue = this.iterateDynamicProperties;\r\n  this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n  this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\r\n  this.style = styleOb;\r\n}\r\n\r\nextendPrototype([DynamicPropertyContainer], SVGFillStyleData);\r\n\r\n/* global PropertyFactory, degToRads, GradientProperty, createElementID, createNS, locationHref,\r\nextendPrototype, DynamicPropertyContainer, lineCapEnum, lineJoinEnum */\r\n\r\nfunction SVGGradientFillStyleData(elem, data, styleOb) {\r\n  this.initDynamicPropertyContainer(elem);\r\n  this.getValue = this.iterateDynamicProperties;\r\n  this.initGradientData(elem, data, styleOb);\r\n}\r\n\r\nSVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\r\n  this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n  this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\r\n  this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\r\n  this.h = PropertyFactory.getProp(elem, data.h || { k: 0 }, 0, 0.01, this);\r\n  this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 0, degToRads, this);\r\n  this.g = new GradientProperty(elem, data.g, this);\r\n  this.style = styleOb;\r\n  this.stops = [];\r\n  this.setGradientData(styleOb.pElem, data);\r\n  this.setGradientOpacity(data, styleOb);\r\n  this._isAnimated = !!this._isAnimated;\r\n};\r\n\r\nSVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\r\n  var gradientId = createElementID();\r\n  var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\r\n  gfill.setAttribute('id', gradientId);\r\n  gfill.setAttribute('spreadMethod', 'pad');\r\n  gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\r\n  var stops = [];\r\n  var stop;\r\n  var j;\r\n  var jLen;\r\n  jLen = data.g.p * 4;\r\n  for (j = 0; j < jLen; j += 4) {\r\n    stop = createNS('stop');\r\n    gfill.appendChild(stop);\r\n    stops.push(stop);\r\n  }\r\n  pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + gradientId + ')');\r\n  this.gf = gfill;\r\n  this.cst = stops;\r\n};\r\n\r\nSVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\r\n  if (this.g._hasOpacity && !this.g._collapsable) {\r\n    var stop;\r\n    var j;\r\n    var jLen;\r\n    var mask = createNS('mask');\r\n    var maskElement = createNS('path');\r\n    mask.appendChild(maskElement);\r\n    var opacityId = createElementID();\r\n    var maskId = createElementID();\r\n    mask.setAttribute('id', maskId);\r\n    var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\r\n    opFill.setAttribute('id', opacityId);\r\n    opFill.setAttribute('spreadMethod', 'pad');\r\n    opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\r\n    jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\r\n    var stops = this.stops;\r\n    for (j = data.g.p * 4; j < jLen; j += 2) {\r\n      stop = createNS('stop');\r\n      stop.setAttribute('stop-color', 'rgb(255,255,255)');\r\n      opFill.appendChild(stop);\r\n      stops.push(stop);\r\n    }\r\n    maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + opacityId + ')');\r\n    if (data.ty === 'gs') {\r\n      maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\r\n      maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\r\n      if (data.lj === 1) {\r\n        maskElement.setAttribute('stroke-miterlimit', data.ml);\r\n      }\r\n    }\r\n    this.of = opFill;\r\n    this.ms = mask;\r\n    this.ost = stops;\r\n    this.maskId = maskId;\r\n    styleOb.msElem = maskElement;\r\n  }\r\n};\r\n\r\nextendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\r\n\r\n/* global PropertyFactory, DashProperty, extendPrototype, SVGGradientFillStyleData, DynamicPropertyContainer */\r\n\r\nfunction SVGGradientStrokeStyleData(elem, data, styleOb) {\r\n  this.initDynamicPropertyContainer(elem);\r\n  this.getValue = this.iterateDynamicProperties;\r\n  this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\r\n  this.d = new DashProperty(elem, data.d || {}, 'svg', this);\r\n  this.initGradientData(elem, data, styleOb);\r\n  this._isAnimated = !!this._isAnimated;\r\n}\r\n\r\nextendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\r\n\r\n/* global createNS */\r\n/* exported ShapeGroupData */\r\n\r\nfunction ShapeGroupData() {\r\n  this.it = [];\r\n  this.prevViewData = [];\r\n  this.gr = createNS('g');\r\n}\r\n\r\n/* global Matrix, buildShapeString, bmFloor */\r\n/* exported SVGElementsRenderer */\r\n\r\nvar SVGElementsRenderer = (function () {\r\n  var _identityMatrix = new Matrix();\r\n  var _matrixHelper = new Matrix();\r\n\r\n  var ob = {\r\n    createRenderFunction: createRenderFunction,\r\n  };\r\n\r\n  function createRenderFunction(data) {\r\n    switch (data.ty) {\r\n      case 'fl':\r\n        return renderFill;\r\n      case 'gf':\r\n        return renderGradient;\r\n      case 'gs':\r\n        return renderGradientStroke;\r\n      case 'st':\r\n        return renderStroke;\r\n      case 'sh':\r\n      case 'el':\r\n      case 'rc':\r\n      case 'sr':\r\n        return renderPath;\r\n      case 'tr':\r\n        return renderContentTransform;\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n\r\n  function renderContentTransform(styleData, itemData, isFirstFrame) {\r\n    if (isFirstFrame || itemData.transform.op._mdf) {\r\n      itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\r\n    }\r\n    if (isFirstFrame || itemData.transform.mProps._mdf) {\r\n      itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\r\n    }\r\n  }\r\n\r\n  function renderPath(styleData, itemData, isFirstFrame) {\r\n    var j;\r\n    var jLen;\r\n    var pathStringTransformed;\r\n    var redraw;\r\n    var pathNodes;\r\n    var l;\r\n    var lLen = itemData.styles.length;\r\n    var lvl = itemData.lvl;\r\n    var paths;\r\n    var mat;\r\n    var props;\r\n    var iterations;\r\n    var k;\r\n    for (l = 0; l < lLen; l += 1) {\r\n      redraw = itemData.sh._mdf || isFirstFrame;\r\n      if (itemData.styles[l].lvl < lvl) {\r\n        mat = _matrixHelper.reset();\r\n        iterations = lvl - itemData.styles[l].lvl;\r\n        k = itemData.transformers.length - 1;\r\n        while (!redraw && iterations > 0) {\r\n          redraw = itemData.transformers[k].mProps._mdf || redraw;\r\n          iterations -= 1;\r\n          k -= 1;\r\n        }\r\n        if (redraw) {\r\n          iterations = lvl - itemData.styles[l].lvl;\r\n          k = itemData.transformers.length - 1;\r\n          while (iterations > 0) {\r\n            props = itemData.transformers[k].mProps.v.props;\r\n            mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\r\n            iterations -= 1;\r\n            k -= 1;\r\n          }\r\n        }\r\n      } else {\r\n        mat = _identityMatrix;\r\n      }\r\n      paths = itemData.sh.paths;\r\n      jLen = paths._length;\r\n      if (redraw) {\r\n        pathStringTransformed = '';\r\n        for (j = 0; j < jLen; j += 1) {\r\n          pathNodes = paths.shapes[j];\r\n          if (pathNodes && pathNodes._length) {\r\n            pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\r\n          }\r\n        }\r\n        itemData.caches[l] = pathStringTransformed;\r\n      } else {\r\n        pathStringTransformed = itemData.caches[l];\r\n      }\r\n      itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\r\n      itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\r\n    }\r\n  }\r\n\r\n  function renderFill(styleData, itemData, isFirstFrame) {\r\n    var styleElem = itemData.style;\r\n\r\n    if (itemData.c._mdf || isFirstFrame) {\r\n      styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\r\n    }\r\n    if (itemData.o._mdf || isFirstFrame) {\r\n      styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\r\n    }\r\n  }\r\n\r\n  function renderGradientStroke(styleData, itemData, isFirstFrame) {\r\n    renderGradient(styleData, itemData, isFirstFrame);\r\n    renderStroke(styleData, itemData, isFirstFrame);\r\n  }\r\n\r\n  function renderGradient(styleData, itemData, isFirstFrame) {\r\n    var gfill = itemData.gf;\r\n    var hasOpacity = itemData.g._hasOpacity;\r\n    var pt1 = itemData.s.v;\r\n    var pt2 = itemData.e.v;\r\n\r\n    if (itemData.o._mdf || isFirstFrame) {\r\n      var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\r\n      itemData.style.pElem.setAttribute(attr, itemData.o.v);\r\n    }\r\n    if (itemData.s._mdf || isFirstFrame) {\r\n      var attr1 = styleData.t === 1 ? 'x1' : 'cx';\r\n      var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\r\n      gfill.setAttribute(attr1, pt1[0]);\r\n      gfill.setAttribute(attr2, pt1[1]);\r\n      if (hasOpacity && !itemData.g._collapsable) {\r\n        itemData.of.setAttribute(attr1, pt1[0]);\r\n        itemData.of.setAttribute(attr2, pt1[1]);\r\n      }\r\n    }\r\n    var stops;\r\n    var i;\r\n    var len;\r\n    var stop;\r\n    if (itemData.g._cmdf || isFirstFrame) {\r\n      stops = itemData.cst;\r\n      var cValues = itemData.g.c;\r\n      len = stops.length;\r\n      for (i = 0; i < len; i += 1) {\r\n        stop = stops[i];\r\n        stop.setAttribute('offset', cValues[i * 4] + '%');\r\n        stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\r\n      }\r\n    }\r\n    if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\r\n      var oValues = itemData.g.o;\r\n      if (itemData.g._collapsable) {\r\n        stops = itemData.cst;\r\n      } else {\r\n        stops = itemData.ost;\r\n      }\r\n      len = stops.length;\r\n      for (i = 0; i < len; i += 1) {\r\n        stop = stops[i];\r\n        if (!itemData.g._collapsable) {\r\n          stop.setAttribute('offset', oValues[i * 2] + '%');\r\n        }\r\n        stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\r\n      }\r\n    }\r\n    if (styleData.t === 1) {\r\n      if (itemData.e._mdf || isFirstFrame) {\r\n        gfill.setAttribute('x2', pt2[0]);\r\n        gfill.setAttribute('y2', pt2[1]);\r\n        if (hasOpacity && !itemData.g._collapsable) {\r\n          itemData.of.setAttribute('x2', pt2[0]);\r\n          itemData.of.setAttribute('y2', pt2[1]);\r\n        }\r\n      }\r\n    } else {\r\n      var rad;\r\n      if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\r\n        rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\r\n        gfill.setAttribute('r', rad);\r\n        if (hasOpacity && !itemData.g._collapsable) {\r\n          itemData.of.setAttribute('r', rad);\r\n        }\r\n      }\r\n      if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\r\n        if (!rad) {\r\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\r\n        }\r\n        var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\r\n\r\n        var percent = itemData.h.v;\r\n        if (percent >= 1) {\r\n          percent = 0.99;\r\n        } else if (percent <= -1) {\r\n          percent = -0.99;\r\n        }\r\n        var dist = rad * percent;\r\n        var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\r\n        var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\r\n        gfill.setAttribute('fx', x);\r\n        gfill.setAttribute('fy', y);\r\n        if (hasOpacity && !itemData.g._collapsable) {\r\n          itemData.of.setAttribute('fx', x);\r\n          itemData.of.setAttribute('fy', y);\r\n        }\r\n      }\r\n      // gfill.setAttribute('fy','200');\r\n    }\r\n  }\r\n\r\n  function renderStroke(styleData, itemData, isFirstFrame) {\r\n    var styleElem = itemData.style;\r\n    var d = itemData.d;\r\n    if (d && (d._mdf || isFirstFrame) && d.dashStr) {\r\n      styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\r\n      styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\r\n    }\r\n    if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\r\n      styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\r\n    }\r\n    if (itemData.o._mdf || isFirstFrame) {\r\n      styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\r\n    }\r\n    if (itemData.w._mdf || isFirstFrame) {\r\n      styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\r\n      if (styleElem.msElem) {\r\n        styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\r\n      }\r\n    }\r\n  }\r\n\r\n  return ob;\r\n}());\r\n\r\n/* global Matrix */\r\n\r\nfunction ShapeTransformManager() {\r\n  this.sequences = {};\r\n  this.sequenceList = [];\r\n  this.transform_key_count = 0;\r\n}\r\n\r\nShapeTransformManager.prototype = {\r\n  addTransformSequence: function (transforms) {\r\n    var i;\r\n    var len = transforms.length;\r\n    var key = '_';\r\n    for (i = 0; i < len; i += 1) {\r\n      key += transforms[i].transform.key + '_';\r\n    }\r\n    var sequence = this.sequences[key];\r\n    if (!sequence) {\r\n      sequence = {\r\n        transforms: [].concat(transforms),\r\n        finalTransform: new Matrix(),\r\n        _mdf: false,\r\n      };\r\n      this.sequences[key] = sequence;\r\n      this.sequenceList.push(sequence);\r\n    }\r\n    return sequence;\r\n  },\r\n  processSequence: function (sequence, isFirstFrame) {\r\n    var i = 0;\r\n    var len = sequence.transforms.length;\r\n    var _mdf = isFirstFrame;\r\n    while (i < len && !isFirstFrame) {\r\n      if (sequence.transforms[i].transform.mProps._mdf) {\r\n        _mdf = true;\r\n        break;\r\n      }\r\n      i += 1;\r\n    }\r\n    if (_mdf) {\r\n      var props;\r\n      sequence.finalTransform.reset();\r\n      for (i = len - 1; i >= 0; i -= 1) {\r\n        props = sequence.transforms[i].transform.mProps.v.props;\r\n        sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\r\n      }\r\n    }\r\n    sequence._mdf = _mdf;\r\n  },\r\n  processSequences: function (isFirstFrame) {\r\n    var i;\r\n    var len = this.sequenceList.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      this.processSequence(this.sequenceList[i], isFirstFrame);\r\n    }\r\n  },\r\n  getNewKey: function () {\r\n    this.transform_key_count += 1;\r\n    return '_' + this.transform_key_count;\r\n  },\r\n};\r\n\r\n/* global LayerExpressionInterface, EffectsExpressionInterface, CompExpressionInterface, ShapeExpressionInterface,\r\nTextExpressionInterface, getBlendMode,createElementID, EffectsManager */\r\n\r\nfunction BaseElement() {\r\n}\r\n\r\nBaseElement.prototype = {\r\n  checkMasks: function () {\r\n    if (!this.data.hasMask) {\r\n      return false;\r\n    }\r\n    var i = 0;\r\n    var len = this.data.masksProperties.length;\r\n    while (i < len) {\r\n      if ((this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false)) {\r\n        return true;\r\n      }\r\n      i += 1;\r\n    }\r\n    return false;\r\n  },\r\n  initExpressions: function () {\r\n    this.layerInterface = LayerExpressionInterface(this);\r\n    if (this.data.hasMask && this.maskManager) {\r\n      this.layerInterface.registerMaskInterface(this.maskManager);\r\n    }\r\n    var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\r\n    this.layerInterface.registerEffectsInterface(effectsInterface);\r\n\r\n    if (this.data.ty === 0 || this.data.xt) {\r\n      this.compInterface = CompExpressionInterface(this);\r\n    } else if (this.data.ty === 4) {\r\n      this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\r\n      this.layerInterface.content = this.layerInterface.shapeInterface;\r\n    } else if (this.data.ty === 5) {\r\n      this.layerInterface.textInterface = TextExpressionInterface(this);\r\n      this.layerInterface.text = this.layerInterface.textInterface;\r\n    }\r\n  },\r\n  setBlendMode: function () {\r\n    var blendModeValue = getBlendMode(this.data.bm);\r\n    var elem = this.baseElement || this.layerElement;\r\n\r\n    elem.style['mix-blend-mode'] = blendModeValue;\r\n  },\r\n  initBaseData: function (data, globalData, comp) {\r\n    this.globalData = globalData;\r\n    this.comp = comp;\r\n    this.data = data;\r\n    this.layerId = createElementID();\r\n\r\n    // Stretch factor for old animations missing this property.\r\n    if (!this.data.sr) {\r\n      this.data.sr = 1;\r\n    }\r\n    // effects manager\r\n    this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\r\n  },\r\n  getType: function () {\r\n    return this.type;\r\n  },\r\n  sourceRectAtTime: function () {},\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, HierarchyElement, FrameElement */\r\n\r\nfunction NullElement(data, globalData, comp) {\r\n  this.initFrame();\r\n  this.initBaseData(data, globalData, comp);\r\n  this.initFrame();\r\n  this.initTransform(data, globalData, comp);\r\n  this.initHierarchy();\r\n}\r\n\r\nNullElement.prototype.prepareFrame = function (num) {\r\n  this.prepareProperties(num, true);\r\n};\r\n\r\nNullElement.prototype.renderFrame = function () {\r\n};\r\n\r\nNullElement.prototype.getBaseElement = function () {\r\n  return null;\r\n};\r\n\r\nNullElement.prototype.destroy = function () {\r\n};\r\n\r\nNullElement.prototype.sourceRectAtTime = function () {\r\n};\r\n\r\nNullElement.prototype.hide = function () {\r\n};\r\n\r\nextendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\r\n\r\n/* global filtersFactory, featureSupport, filtersFactory, createElementID, createNS, MaskElement, SVGEffects, locationHref */\r\n\r\nfunction SVGBaseElement() {\r\n}\r\n\r\nSVGBaseElement.prototype = {\r\n  initRendererElement: function () {\r\n    this.layerElement = createNS('g');\r\n  },\r\n  createContainerElements: function () {\r\n    this.matteElement = createNS('g');\r\n    this.transformedElement = this.layerElement;\r\n    this.maskedElement = this.layerElement;\r\n    this._sizeChanged = false;\r\n    var layerElementParent = null;\r\n    // If this layer acts as a mask for the following layer\r\n    var filId;\r\n    var fil;\r\n    var gg;\r\n    if (this.data.td) {\r\n      if (this.data.td == 3 || this.data.td == 1) { // eslint-disable-line eqeqeq\r\n        var masker = createNS('mask');\r\n        masker.setAttribute('id', this.layerId);\r\n        masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\r\n        masker.appendChild(this.layerElement);\r\n        layerElementParent = masker;\r\n        this.globalData.defs.appendChild(masker);\r\n        // This is only for IE and Edge when mask if of type alpha\r\n        if (!featureSupport.maskType && this.data.td == 1) { // eslint-disable-line eqeqeq\r\n          masker.setAttribute('mask-type', 'luminance');\r\n          filId = createElementID();\r\n          fil = filtersFactory.createFilter(filId);\r\n          this.globalData.defs.appendChild(fil);\r\n          fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\r\n          gg = createNS('g');\r\n          gg.appendChild(this.layerElement);\r\n          layerElementParent = gg;\r\n          masker.appendChild(gg);\r\n          gg.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\r\n        }\r\n      } else if (this.data.td == 2) { // eslint-disable-line eqeqeq\r\n        var maskGroup = createNS('mask');\r\n        maskGroup.setAttribute('id', this.layerId);\r\n        maskGroup.setAttribute('mask-type', 'alpha');\r\n        var maskGrouper = createNS('g');\r\n        maskGroup.appendChild(maskGrouper);\r\n        filId = createElementID();\r\n        fil = filtersFactory.createFilter(filId);\r\n        /// /\r\n\r\n        // This solution doesn't work on Android when meta tag with viewport attribute is set\r\n        /* var feColorMatrix = createNS('feColorMatrix');\r\n                feColorMatrix.setAttribute('type', 'matrix');\r\n                feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n                feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n                fil.appendChild(feColorMatrix); */\r\n        /// /\r\n        var feCTr = createNS('feComponentTransfer');\r\n        feCTr.setAttribute('in', 'SourceGraphic');\r\n        fil.appendChild(feCTr);\r\n        var feFunc = createNS('feFuncA');\r\n        feFunc.setAttribute('type', 'table');\r\n        feFunc.setAttribute('tableValues', '1.0 0.0');\r\n        feCTr.appendChild(feFunc);\r\n        /// /\r\n        this.globalData.defs.appendChild(fil);\r\n        var alphaRect = createNS('rect');\r\n        alphaRect.setAttribute('width', this.comp.data.w);\r\n        alphaRect.setAttribute('height', this.comp.data.h);\r\n        alphaRect.setAttribute('x', '0');\r\n        alphaRect.setAttribute('y', '0');\r\n        alphaRect.setAttribute('fill', '#ffffff');\r\n        alphaRect.setAttribute('opacity', '0');\r\n        maskGrouper.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\r\n        maskGrouper.appendChild(alphaRect);\r\n        maskGrouper.appendChild(this.layerElement);\r\n        layerElementParent = maskGrouper;\r\n        if (!featureSupport.maskType) {\r\n          maskGroup.setAttribute('mask-type', 'luminance');\r\n          fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\r\n          gg = createNS('g');\r\n          maskGrouper.appendChild(alphaRect);\r\n          gg.appendChild(this.layerElement);\r\n          layerElementParent = gg;\r\n          maskGrouper.appendChild(gg);\r\n        }\r\n        this.globalData.defs.appendChild(maskGroup);\r\n      }\r\n    } else if (this.data.tt) {\r\n      this.matteElement.appendChild(this.layerElement);\r\n      layerElementParent = this.matteElement;\r\n      this.baseElement = this.matteElement;\r\n    } else {\r\n      this.baseElement = this.layerElement;\r\n    }\r\n    if (this.data.ln) {\r\n      this.layerElement.setAttribute('id', this.data.ln);\r\n    }\r\n    if (this.data.cl) {\r\n      this.layerElement.setAttribute('class', this.data.cl);\r\n    }\r\n    // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\r\n    if (this.data.ty === 0 && !this.data.hd) {\r\n      var cp = createNS('clipPath');\r\n      var pt = createNS('path');\r\n      pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\r\n      var clipId = createElementID();\r\n      cp.setAttribute('id', clipId);\r\n      cp.appendChild(pt);\r\n      this.globalData.defs.appendChild(cp);\r\n\r\n      if (this.checkMasks()) {\r\n        var cpGroup = createNS('g');\r\n        cpGroup.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\r\n        cpGroup.appendChild(this.layerElement);\r\n        this.transformedElement = cpGroup;\r\n        if (layerElementParent) {\r\n          layerElementParent.appendChild(this.transformedElement);\r\n        } else {\r\n          this.baseElement = this.transformedElement;\r\n        }\r\n      } else {\r\n        this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\r\n      }\r\n    }\r\n    if (this.data.bm !== 0) {\r\n      this.setBlendMode();\r\n    }\r\n  },\r\n  renderElement: function () {\r\n    if (this.finalTransform._matMdf) {\r\n      this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\r\n    }\r\n    if (this.finalTransform._opMdf) {\r\n      this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\r\n    }\r\n  },\r\n  destroyBaseElement: function () {\r\n    this.layerElement = null;\r\n    this.matteElement = null;\r\n    this.maskManager.destroy();\r\n  },\r\n  getBaseElement: function () {\r\n    if (this.data.hd) {\r\n      return null;\r\n    }\r\n    return this.baseElement;\r\n  },\r\n  createRenderableComponents: function () {\r\n    this.maskManager = new MaskElement(this.data, this, this.globalData);\r\n    this.renderableEffectsManager = new SVGEffects(this);\r\n  },\r\n  setMatte: function (id) {\r\n    if (!this.matteElement) {\r\n      return;\r\n    }\r\n    this.matteElement.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');\r\n  },\r\n};\r\n\r\n/* global ProcessedElement */\r\n\r\nfunction IShapeElement() {\r\n}\r\n\r\nIShapeElement.prototype = {\r\n  addShapeToModifiers: function (data) {\r\n    var i;\r\n    var len = this.shapeModifiers.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      this.shapeModifiers[i].addShape(data);\r\n    }\r\n  },\r\n  isShapeInAnimatedModifiers: function (data) {\r\n    var i = 0;\r\n    var len = this.shapeModifiers.length;\r\n    while (i < len) {\r\n      if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  },\r\n  renderModifiers: function () {\r\n    if (!this.shapeModifiers.length) {\r\n      return;\r\n    }\r\n    var i;\r\n    var len = this.shapes.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      this.shapes[i].sh.reset();\r\n    }\r\n\r\n    len = this.shapeModifiers.length;\r\n    var shouldBreakProcess;\r\n    for (i = len - 1; i >= 0; i -= 1) {\r\n      shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\r\n      // workaround to fix cases where a repeater resets the shape so the following processes get called twice\r\n      // TODO: find a better solution for this\r\n      if (shouldBreakProcess) {\r\n        break;\r\n      }\r\n    }\r\n  },\r\n\r\n  searchProcessedElement: function (elem) {\r\n    var elements = this.processedElements;\r\n    var i = 0;\r\n    var len = elements.length;\r\n    while (i < len) {\r\n      if (elements[i].elem === elem) {\r\n        return elements[i].pos;\r\n      }\r\n      i += 1;\r\n    }\r\n    return 0;\r\n  },\r\n  addProcessedElement: function (elem, pos) {\r\n    var elements = this.processedElements;\r\n    var i = elements.length;\r\n    while (i) {\r\n      i -= 1;\r\n      if (elements[i].elem === elem) {\r\n        elements[i].pos = pos;\r\n        return;\r\n      }\r\n    }\r\n    elements.push(new ProcessedElement(elem, pos));\r\n  },\r\n  prepareFrame: function (num) {\r\n    this.prepareRenderableFrame(num);\r\n    this.prepareProperties(num, this.isInRange);\r\n  },\r\n};\r\n\r\n/* global TextProperty, TextAnimatorProperty, buildShapeString, LetterProps */\r\n\r\nfunction ITextElement() {\r\n}\r\n\r\nITextElement.prototype.initElement = function (data, globalData, comp) {\r\n  this.lettersChangedFlag = true;\r\n  this.initFrame();\r\n  this.initBaseData(data, globalData, comp);\r\n  this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\r\n  this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\r\n  this.initTransform(data, globalData, comp);\r\n  this.initHierarchy();\r\n  this.initRenderable();\r\n  this.initRendererElement();\r\n  this.createContainerElements();\r\n  this.createRenderableComponents();\r\n  this.createContent();\r\n  this.hide();\r\n  this.textAnimator.searchProperties(this.dynamicProperties);\r\n};\r\n\r\nITextElement.prototype.prepareFrame = function (num) {\r\n  this._mdf = false;\r\n  this.prepareRenderableFrame(num);\r\n  this.prepareProperties(num, this.isInRange);\r\n  if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\r\n    this.buildNewText();\r\n    this.textProperty._isFirstFrame = false;\r\n    this.textProperty._mdf = false;\r\n  }\r\n};\r\n\r\nITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\r\n  var j;\r\n  var jLen = shapes.length;\r\n  var pathNodes;\r\n  var shapeStr = '';\r\n  for (j = 0; j < jLen; j += 1) {\r\n    pathNodes = shapes[j].ks.k;\r\n    shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\r\n  }\r\n  return shapeStr;\r\n};\r\n\r\nITextElement.prototype.updateDocumentData = function (newData, index) {\r\n  this.textProperty.updateDocumentData(newData, index);\r\n};\r\n\r\nITextElement.prototype.canResizeFont = function (_canResize) {\r\n  this.textProperty.canResizeFont(_canResize);\r\n};\r\n\r\nITextElement.prototype.setMinimumFontSize = function (_fontSize) {\r\n  this.textProperty.setMinimumFontSize(_fontSize);\r\n};\r\n\r\nITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\r\n  if (documentData.ps) {\r\n    matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\r\n  }\r\n  matrixHelper.translate(0, -documentData.ls, 0);\r\n  switch (documentData.j) {\r\n    case 1:\r\n      matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\r\n      break;\r\n    case 2:\r\n      matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n  matrixHelper.translate(xPos, yPos, 0);\r\n};\r\n\r\nITextElement.prototype.buildColor = function (colorData) {\r\n  return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\r\n};\r\n\r\nITextElement.prototype.emptyProp = new LetterProps();\r\n\r\nITextElement.prototype.destroy = function () {\r\n\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement */\r\n\r\nfunction ICompElement() {}\r\n\r\nextendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\r\n\r\nICompElement.prototype.initElement = function (data, globalData, comp) {\r\n  this.initFrame();\r\n  this.initBaseData(data, globalData, comp);\r\n  this.initTransform(data, globalData, comp);\r\n  this.initRenderable();\r\n  this.initHierarchy();\r\n  this.initRendererElement();\r\n  this.createContainerElements();\r\n  this.createRenderableComponents();\r\n  if (this.data.xt || !globalData.progressiveLoad) {\r\n    this.buildAllItems();\r\n  }\r\n  this.hide();\r\n};\r\n\r\n/* ICompElement.prototype.hide = function(){\r\n    if(!this.hidden){\r\n        this.hideElement();\r\n        var i,len = this.elements.length;\r\n        for( i = 0; i < len; i+=1 ){\r\n            if(this.elements[i]){\r\n                this.elements[i].hide();\r\n            }\r\n        }\r\n    }\r\n}; */\r\n\r\nICompElement.prototype.prepareFrame = function (num) {\r\n  this._mdf = false;\r\n  this.prepareRenderableFrame(num);\r\n  this.prepareProperties(num, this.isInRange);\r\n  if (!this.isInRange && !this.data.xt) {\r\n    return;\r\n  }\r\n\r\n  if (!this.tm._placeholder) {\r\n    var timeRemapped = this.tm.v;\r\n    if (timeRemapped === this.data.op) {\r\n      timeRemapped = this.data.op - 1;\r\n    }\r\n    this.renderedFrame = timeRemapped;\r\n  } else {\r\n    this.renderedFrame = num / this.data.sr;\r\n  }\r\n  var i;\r\n  var len = this.elements.length;\r\n  if (!this.completeLayers) {\r\n    this.checkLayers(this.renderedFrame);\r\n  }\r\n  // This iteration needs to be backwards because of how expressions connect between each other\r\n  for (i = len - 1; i >= 0; i -= 1) {\r\n    if (this.completeLayers || this.elements[i]) {\r\n      this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\r\n      if (this.elements[i]._mdf) {\r\n        this._mdf = true;\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nICompElement.prototype.renderInnerContent = function () {\r\n  var i;\r\n  var len = this.layers.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    if (this.completeLayers || this.elements[i]) {\r\n      this.elements[i].renderFrame();\r\n    }\r\n  }\r\n};\r\n\r\nICompElement.prototype.setElements = function (elems) {\r\n  this.elements = elems;\r\n};\r\n\r\nICompElement.prototype.getElements = function () {\r\n  return this.elements;\r\n};\r\n\r\nICompElement.prototype.destroyElements = function () {\r\n  var i;\r\n  var len = this.layers.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    if (this.elements[i]) {\r\n      this.elements[i].destroy();\r\n    }\r\n  }\r\n};\r\n\r\nICompElement.prototype.destroy = function () {\r\n  this.destroyElements();\r\n  this.destroyBaseElement();\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, createNS */\r\n\r\nfunction IImageElement(data, globalData, comp) {\r\n  this.assetData = globalData.getAssetData(data.refId);\r\n  this.initElement(data, globalData, comp);\r\n  this.sourceRect = {\r\n    top: 0, left: 0, width: this.assetData.w, height: this.assetData.h,\r\n  };\r\n}\r\n\r\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\r\n\r\nIImageElement.prototype.createContent = function () {\r\n  var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n\r\n  this.innerElem = createNS('image');\r\n  this.innerElem.setAttribute('width', this.assetData.w + 'px');\r\n  this.innerElem.setAttribute('height', this.assetData.h + 'px');\r\n  this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\r\n  this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\r\n\r\n  this.layerElement.appendChild(this.innerElem);\r\n};\r\n\r\nIImageElement.prototype.sourceRectAtTime = function () {\r\n  return this.sourceRect;\r\n};\r\n\r\n/* global extendPrototype, IImageElement, createNS */\r\n\r\nfunction ISolidElement(data, globalData, comp) {\r\n  this.initElement(data, globalData, comp);\r\n}\r\nextendPrototype([IImageElement], ISolidElement);\r\n\r\nISolidElement.prototype.createContent = function () {\r\n  var rect = createNS('rect');\r\n  /// /rect.style.width = this.data.sw;\r\n  /// /rect.style.height = this.data.sh;\r\n  /// /rect.style.fill = this.data.sc;\r\n  rect.setAttribute('width', this.data.sw);\r\n  rect.setAttribute('height', this.data.sh);\r\n  rect.setAttribute('fill', this.data.sc);\r\n  this.layerElement.appendChild(rect);\r\n};\r\n\r\n/* global PropertyFactory, extendPrototype, RenderableElement, BaseElement, FrameElement */\r\n\r\nfunction AudioElement(data, globalData, comp) {\r\n  this.initFrame();\r\n  this.initRenderable();\r\n  this.assetData = globalData.getAssetData(data.refId);\r\n  this.initBaseData(data, globalData, comp);\r\n  this._isPlaying = false;\r\n  this._canPlay = false;\r\n  var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n  this.audio = this.globalData.audioController.createAudio(assetPath);\r\n  this._currentTime = 0;\r\n  this.globalData.audioController.addAudio(this);\r\n  this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\r\n}\r\n\r\nAudioElement.prototype.prepareFrame = function (num) {\r\n  this.prepareRenderableFrame(num, true);\r\n  this.prepareProperties(num, true);\r\n  if (!this.tm._placeholder) {\r\n    var timeRemapped = this.tm.v;\r\n    this._currentTime = timeRemapped;\r\n  } else {\r\n    this._currentTime = num / this.data.sr;\r\n  }\r\n};\r\n\r\nextendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\r\n\r\nAudioElement.prototype.renderFrame = function () {\r\n  if (this.isInRange && this._canPlay) {\r\n    if (!this._isPlaying) {\r\n      this.audio.play();\r\n      this.audio.seek(this._currentTime / this.globalData.frameRate);\r\n      this._isPlaying = true;\r\n    } else if (!this.audio.playing()\r\n      || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1\r\n    ) {\r\n      this.audio.seek(this._currentTime / this.globalData.frameRate);\r\n    }\r\n  }\r\n};\r\n\r\nAudioElement.prototype.show = function () {\r\n  // this.audio.play()\r\n};\r\n\r\nAudioElement.prototype.hide = function () {\r\n  this.audio.pause();\r\n  this._isPlaying = false;\r\n};\r\n\r\nAudioElement.prototype.pause = function () {\r\n  this.audio.pause();\r\n  this._isPlaying = false;\r\n  this._canPlay = false;\r\n};\r\n\r\nAudioElement.prototype.resume = function () {\r\n  this._canPlay = true;\r\n};\r\n\r\nAudioElement.prototype.setRate = function (rateValue) {\r\n  this.audio.rate(rateValue);\r\n};\r\n\r\nAudioElement.prototype.volume = function (volumeValue) {\r\n  this.audio.volume(volumeValue);\r\n};\r\n\r\nAudioElement.prototype.getBaseElement = function () {\r\n  return null;\r\n};\r\n\r\nAudioElement.prototype.destroy = function () {\r\n};\r\n\r\nAudioElement.prototype.sourceRectAtTime = function () {\r\n};\r\n\r\nAudioElement.prototype.initExpressions = function () {\r\n};\r\n\r\n/* global createSizedArray, PropertyFactory, extendPrototype, SVGRenderer, ICompElement, SVGBaseElement */\r\n\r\nfunction SVGCompElement(data, globalData, comp) {\r\n  this.layers = data.layers;\r\n  this.supports3d = true;\r\n  this.completeLayers = false;\r\n  this.pendingElements = [];\r\n  this.elements = this.layers ? createSizedArray(this.layers.length) : [];\r\n  // this.layerElement = createNS('g');\r\n  this.initElement(data, globalData, comp);\r\n  this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\r\n}\r\n\r\nextendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement,\r\nRenderableDOMElement, ITextElement, createSizedArray, createNS */\r\n\r\nfunction SVGTextLottieElement(data, globalData, comp) {\r\n  this.textSpans = [];\r\n  this.renderType = 'svg';\r\n  this.initElement(data, globalData, comp);\r\n}\r\n\r\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\r\n\r\nSVGTextLottieElement.prototype.createContent = function () {\r\n  if (this.data.singleShape && !this.globalData.fontManager.chars) {\r\n    this.textContainer = createNS('text');\r\n  }\r\n};\r\n\r\nSVGTextLottieElement.prototype.buildTextContents = function (textArray) {\r\n  var i = 0;\r\n  var len = textArray.length;\r\n  var textContents = [];\r\n  var currentTextContent = '';\r\n  while (i < len) {\r\n    if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\r\n      textContents.push(currentTextContent);\r\n      currentTextContent = '';\r\n    } else {\r\n      currentTextContent += textArray[i];\r\n    }\r\n    i += 1;\r\n  }\r\n  textContents.push(currentTextContent);\r\n  return textContents;\r\n};\r\n\r\nSVGTextLottieElement.prototype.buildNewText = function () {\r\n  var i;\r\n  var len;\r\n\r\n  var documentData = this.textProperty.currentData;\r\n  this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\r\n  if (documentData.fc) {\r\n    this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\r\n  } else {\r\n    this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\r\n  }\r\n  if (documentData.sc) {\r\n    this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\r\n    this.layerElement.setAttribute('stroke-width', documentData.sw);\r\n  }\r\n  this.layerElement.setAttribute('font-size', documentData.finalSize);\r\n  var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n  if (fontData.fClass) {\r\n    this.layerElement.setAttribute('class', fontData.fClass);\r\n  } else {\r\n    this.layerElement.setAttribute('font-family', fontData.fFamily);\r\n    var fWeight = documentData.fWeight;\r\n    var fStyle = documentData.fStyle;\r\n    this.layerElement.setAttribute('font-style', fStyle);\r\n    this.layerElement.setAttribute('font-weight', fWeight);\r\n  }\r\n  this.layerElement.setAttribute('aria-label', documentData.t);\r\n\r\n  var letters = documentData.l || [];\r\n  var usesGlyphs = !!this.globalData.fontManager.chars;\r\n  len = letters.length;\r\n\r\n  var tSpan;\r\n  var matrixHelper = this.mHelper;\r\n  var shapes;\r\n  var shapeStr = '';\r\n  var singleShape = this.data.singleShape;\r\n  var xPos = 0;\r\n  var yPos = 0;\r\n  var firstLine = true;\r\n  var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\r\n  if (singleShape && !usesGlyphs && !documentData.sz) {\r\n    var tElement = this.textContainer;\r\n    var justify = 'start';\r\n    switch (documentData.j) {\r\n      case 1:\r\n        justify = 'end';\r\n        break;\r\n      case 2:\r\n        justify = 'middle';\r\n        break;\r\n      default:\r\n        justify = 'start';\r\n        break;\r\n    }\r\n    tElement.setAttribute('text-anchor', justify);\r\n    tElement.setAttribute('letter-spacing', trackingOffset);\r\n    var textContent = this.buildTextContents(documentData.finalText);\r\n    len = textContent.length;\r\n    yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\r\n    for (i = 0; i < len; i += 1) {\r\n      tSpan = this.textSpans[i] || createNS('tspan');\r\n      tSpan.textContent = textContent[i];\r\n      tSpan.setAttribute('x', 0);\r\n      tSpan.setAttribute('y', yPos);\r\n      tSpan.style.display = 'inherit';\r\n      tElement.appendChild(tSpan);\r\n      this.textSpans[i] = tSpan;\r\n      yPos += documentData.finalLineHeight;\r\n    }\r\n\r\n    this.layerElement.appendChild(tElement);\r\n  } else {\r\n    var cachedSpansLength = this.textSpans.length;\r\n    var shapeData;\r\n    var charData;\r\n    for (i = 0; i < len; i += 1) {\r\n      if (!usesGlyphs || !singleShape || i === 0) {\r\n        tSpan = cachedSpansLength > i ? this.textSpans[i] : createNS(usesGlyphs ? 'path' : 'text');\r\n        if (cachedSpansLength <= i) {\r\n          tSpan.setAttribute('stroke-linecap', 'butt');\r\n          tSpan.setAttribute('stroke-linejoin', 'round');\r\n          tSpan.setAttribute('stroke-miterlimit', '4');\r\n          this.textSpans[i] = tSpan;\r\n          this.layerElement.appendChild(tSpan);\r\n        }\r\n        tSpan.style.display = 'inherit';\r\n      }\r\n\r\n      matrixHelper.reset();\r\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\r\n      if (singleShape) {\r\n        if (letters[i].n) {\r\n          xPos = -trackingOffset;\r\n          yPos += documentData.yOffset;\r\n          yPos += firstLine ? 1 : 0;\r\n          firstLine = false;\r\n        }\r\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\r\n        xPos += letters[i].l || 0;\r\n        // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\r\n        xPos += trackingOffset;\r\n      }\r\n      if (usesGlyphs) {\r\n        charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n        shapeData = (charData && charData.data) || {};\r\n        shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\r\n        if (!singleShape) {\r\n          tSpan.setAttribute('d', this.createPathShape(matrixHelper, shapes));\r\n        } else {\r\n          shapeStr += this.createPathShape(matrixHelper, shapes);\r\n        }\r\n      } else {\r\n        if (singleShape) {\r\n          tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\r\n        }\r\n        tSpan.textContent = letters[i].val;\r\n        tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\r\n      }\r\n      //\r\n    }\r\n    if (singleShape && tSpan) {\r\n      tSpan.setAttribute('d', shapeStr);\r\n    }\r\n  }\r\n  while (i < this.textSpans.length) {\r\n    this.textSpans[i].style.display = 'none';\r\n    i += 1;\r\n  }\r\n\r\n  this._sizeChanged = true;\r\n};\r\n\r\nSVGTextLottieElement.prototype.sourceRectAtTime = function () {\r\n  this.prepareFrame(this.comp.renderedFrame - this.data.st);\r\n  this.renderInnerContent();\r\n  if (this._sizeChanged) {\r\n    this._sizeChanged = false;\r\n    var textBox = this.layerElement.getBBox();\r\n    this.bbox = {\r\n      top: textBox.y,\r\n      left: textBox.x,\r\n      width: textBox.width,\r\n      height: textBox.height,\r\n    };\r\n  }\r\n  return this.bbox;\r\n};\r\n\r\nSVGTextLottieElement.prototype.renderInnerContent = function () {\r\n  if (!this.data.singleShape) {\r\n    this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n    if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\r\n      this._sizeChanged = true;\r\n      var i;\r\n      var len;\r\n      var renderedLetters = this.textAnimator.renderedLetters;\r\n\r\n      var letters = this.textProperty.currentData.l;\r\n\r\n      len = letters.length;\r\n      var renderedLetter;\r\n      var textSpan;\r\n      for (i = 0; i < len; i += 1) {\r\n        if (!letters[i].n) {\r\n          renderedLetter = renderedLetters[i];\r\n          textSpan = this.textSpans[i];\r\n          if (renderedLetter._mdf.m) {\r\n            textSpan.setAttribute('transform', renderedLetter.m);\r\n          }\r\n          if (renderedLetter._mdf.o) {\r\n            textSpan.setAttribute('opacity', renderedLetter.o);\r\n          }\r\n          if (renderedLetter._mdf.sw) {\r\n            textSpan.setAttribute('stroke-width', renderedLetter.sw);\r\n          }\r\n          if (renderedLetter._mdf.sc) {\r\n            textSpan.setAttribute('stroke', renderedLetter.sc);\r\n          }\r\n          if (renderedLetter._mdf.fc) {\r\n            textSpan.setAttribute('fill', renderedLetter.fc);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement,\r\nFrameElement, RenderableDOMElement, Matrix, SVGStyleData, SVGStrokeStyleData, SVGFillStyleData,\r\nSVGGradientFillStyleData, SVGGradientStrokeStyleData, locationHref, getBlendMode, ShapeGroupData,\r\nTransformPropertyFactory, SVGTransformData, ShapePropertyFactory, SVGShapeData, SVGElementsRenderer, ShapeModifiers,\r\nlineCapEnum, lineJoinEnum */\r\n\r\nfunction SVGShapeElement(data, globalData, comp) {\r\n  // List of drawable elements\r\n  this.shapes = [];\r\n  // Full shape data\r\n  this.shapesData = data.shapes;\r\n  // List of styles that will be applied to shapes\r\n  this.stylesList = [];\r\n  // List of modifiers that will be applied to shapes\r\n  this.shapeModifiers = [];\r\n  // List of items in shape tree\r\n  this.itemsData = [];\r\n  // List of items in previous shape tree\r\n  this.processedElements = [];\r\n  // List of animated components\r\n  this.animatedContents = [];\r\n  this.initElement(data, globalData, comp);\r\n  // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\r\n  // List of elements that have been created\r\n  this.prevViewData = [];\r\n  // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\r\n}\r\n\r\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\r\n\r\nSVGShapeElement.prototype.initSecondaryElement = function () {\r\n};\r\n\r\nSVGShapeElement.prototype.identityMatrix = new Matrix();\r\n\r\nSVGShapeElement.prototype.buildExpressionInterface = function () {};\r\n\r\nSVGShapeElement.prototype.createContent = function () {\r\n  this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\r\n  this.filterUniqueShapes();\r\n};\r\n\r\n/*\r\nThis method searches for multiple shapes that affect a single element and one of them is animated\r\n*/\r\nSVGShapeElement.prototype.filterUniqueShapes = function () {\r\n  var i;\r\n  var len = this.shapes.length;\r\n  var shape;\r\n  var j;\r\n  var jLen = this.stylesList.length;\r\n  var style;\r\n  var tempShapes = [];\r\n  var areAnimated = false;\r\n  for (j = 0; j < jLen; j += 1) {\r\n    style = this.stylesList[j];\r\n    areAnimated = false;\r\n    tempShapes.length = 0;\r\n    for (i = 0; i < len; i += 1) {\r\n      shape = this.shapes[i];\r\n      if (shape.styles.indexOf(style) !== -1) {\r\n        tempShapes.push(shape);\r\n        areAnimated = shape._isAnimated || areAnimated;\r\n      }\r\n    }\r\n    if (tempShapes.length > 1 && areAnimated) {\r\n      this.setShapesAsAnimated(tempShapes);\r\n    }\r\n  }\r\n};\r\n\r\nSVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\r\n  var i;\r\n  var len = shapes.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    shapes[i].setAsAnimated();\r\n  }\r\n};\r\n\r\nSVGShapeElement.prototype.createStyleElement = function (data, level) {\r\n  // TODO: prevent drawing of hidden styles\r\n  var elementData;\r\n  var styleOb = new SVGStyleData(data, level);\r\n\r\n  var pathElement = styleOb.pElem;\r\n  if (data.ty === 'st') {\r\n    elementData = new SVGStrokeStyleData(this, data, styleOb);\r\n  } else if (data.ty === 'fl') {\r\n    elementData = new SVGFillStyleData(this, data, styleOb);\r\n  } else if (data.ty === 'gf' || data.ty === 'gs') {\r\n    var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\r\n    elementData = new GradientConstructor(this, data, styleOb);\r\n    this.globalData.defs.appendChild(elementData.gf);\r\n    if (elementData.maskId) {\r\n      this.globalData.defs.appendChild(elementData.ms);\r\n      this.globalData.defs.appendChild(elementData.of);\r\n      pathElement.setAttribute('mask', 'url(' + locationHref + '#' + elementData.maskId + ')');\r\n    }\r\n  }\r\n\r\n  if (data.ty === 'st' || data.ty === 'gs') {\r\n    pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\r\n    pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\r\n    pathElement.setAttribute('fill-opacity', '0');\r\n    if (data.lj === 1) {\r\n      pathElement.setAttribute('stroke-miterlimit', data.ml);\r\n    }\r\n  }\r\n\r\n  if (data.r === 2) {\r\n    pathElement.setAttribute('fill-rule', 'evenodd');\r\n  }\r\n\r\n  if (data.ln) {\r\n    pathElement.setAttribute('id', data.ln);\r\n  }\r\n  if (data.cl) {\r\n    pathElement.setAttribute('class', data.cl);\r\n  }\r\n  if (data.bm) {\r\n    pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\r\n  }\r\n  this.stylesList.push(styleOb);\r\n  this.addToAnimatedContents(data, elementData);\r\n  return elementData;\r\n};\r\n\r\nSVGShapeElement.prototype.createGroupElement = function (data) {\r\n  var elementData = new ShapeGroupData();\r\n  if (data.ln) {\r\n    elementData.gr.setAttribute('id', data.ln);\r\n  }\r\n  if (data.cl) {\r\n    elementData.gr.setAttribute('class', data.cl);\r\n  }\r\n  if (data.bm) {\r\n    elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\r\n  }\r\n  return elementData;\r\n};\r\n\r\nSVGShapeElement.prototype.createTransformElement = function (data, container) {\r\n  var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\r\n  var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\r\n  this.addToAnimatedContents(data, elementData);\r\n  return elementData;\r\n};\r\n\r\nSVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\r\n  var ty = 4;\r\n  if (data.ty === 'rc') {\r\n    ty = 5;\r\n  } else if (data.ty === 'el') {\r\n    ty = 6;\r\n  } else if (data.ty === 'sr') {\r\n    ty = 7;\r\n  }\r\n  var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\r\n  var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\r\n  this.shapes.push(elementData);\r\n  this.addShapeToModifiers(elementData);\r\n  this.addToAnimatedContents(data, elementData);\r\n  return elementData;\r\n};\r\n\r\nSVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\r\n  var i = 0;\r\n  var len = this.animatedContents.length;\r\n  while (i < len) {\r\n    if (this.animatedContents[i].element === element) {\r\n      return;\r\n    }\r\n    i += 1;\r\n  }\r\n  this.animatedContents.push({\r\n    fn: SVGElementsRenderer.createRenderFunction(data),\r\n    element: element,\r\n    data: data,\r\n  });\r\n};\r\n\r\nSVGShapeElement.prototype.setElementStyles = function (elementData) {\r\n  var arr = elementData.styles;\r\n  var j;\r\n  var jLen = this.stylesList.length;\r\n  for (j = 0; j < jLen; j += 1) {\r\n    if (!this.stylesList[j].closed) {\r\n      arr.push(this.stylesList[j]);\r\n    }\r\n  }\r\n};\r\n\r\nSVGShapeElement.prototype.reloadShapes = function () {\r\n  this._isFirstFrame = true;\r\n  var i;\r\n  var len = this.itemsData.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    this.prevViewData[i] = this.itemsData[i];\r\n  }\r\n  this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\r\n  this.filterUniqueShapes();\r\n  len = this.dynamicProperties.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    this.dynamicProperties[i].getValue();\r\n  }\r\n  this.renderModifiers();\r\n};\r\n\r\nSVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\r\n  var ownTransformers = [].concat(transformers);\r\n  var i;\r\n  var len = arr.length - 1;\r\n  var j;\r\n  var jLen;\r\n  var ownStyles = [];\r\n  var ownModifiers = [];\r\n  var currentTransform;\r\n  var modifier;\r\n  var processedPos;\r\n  for (i = len; i >= 0; i -= 1) {\r\n    processedPos = this.searchProcessedElement(arr[i]);\r\n    if (!processedPos) {\r\n      arr[i]._render = render;\r\n    } else {\r\n      itemsData[i] = prevViewData[processedPos - 1];\r\n    }\r\n    if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\r\n      if (!processedPos) {\r\n        itemsData[i] = this.createStyleElement(arr[i], level);\r\n      } else {\r\n        itemsData[i].style.closed = false;\r\n      }\r\n      if (arr[i]._render) {\r\n        if (itemsData[i].style.pElem.parentNode !== container) {\r\n          container.appendChild(itemsData[i].style.pElem);\r\n        }\r\n      }\r\n      ownStyles.push(itemsData[i].style);\r\n    } else if (arr[i].ty === 'gr') {\r\n      if (!processedPos) {\r\n        itemsData[i] = this.createGroupElement(arr[i]);\r\n      } else {\r\n        jLen = itemsData[i].it.length;\r\n        for (j = 0; j < jLen; j += 1) {\r\n          itemsData[i].prevViewData[j] = itemsData[i].it[j];\r\n        }\r\n      }\r\n      this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\r\n      if (arr[i]._render) {\r\n        if (itemsData[i].gr.parentNode !== container) {\r\n          container.appendChild(itemsData[i].gr);\r\n        }\r\n      }\r\n    } else if (arr[i].ty === 'tr') {\r\n      if (!processedPos) {\r\n        itemsData[i] = this.createTransformElement(arr[i], container);\r\n      }\r\n      currentTransform = itemsData[i].transform;\r\n      ownTransformers.push(currentTransform);\r\n    } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\r\n      if (!processedPos) {\r\n        itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\r\n      }\r\n      this.setElementStyles(itemsData[i]);\r\n    } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\r\n      if (!processedPos) {\r\n        modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n        modifier.init(this, arr[i]);\r\n        itemsData[i] = modifier;\r\n        this.shapeModifiers.push(modifier);\r\n      } else {\r\n        modifier = itemsData[i];\r\n        modifier.closed = false;\r\n      }\r\n      ownModifiers.push(modifier);\r\n    } else if (arr[i].ty === 'rp') {\r\n      if (!processedPos) {\r\n        modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n        itemsData[i] = modifier;\r\n        modifier.init(this, arr, i, itemsData);\r\n        this.shapeModifiers.push(modifier);\r\n        render = false;\r\n      } else {\r\n        modifier = itemsData[i];\r\n        modifier.closed = true;\r\n      }\r\n      ownModifiers.push(modifier);\r\n    }\r\n    this.addProcessedElement(arr[i], i + 1);\r\n  }\r\n  len = ownStyles.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    ownStyles[i].closed = true;\r\n  }\r\n  len = ownModifiers.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    ownModifiers[i].closed = true;\r\n  }\r\n};\r\n\r\nSVGShapeElement.prototype.renderInnerContent = function () {\r\n  this.renderModifiers();\r\n  var i;\r\n  var len = this.stylesList.length;\r\n  for (i = 0; i < len; i += 1) {\r\n    this.stylesList[i].reset();\r\n  }\r\n  this.renderShape();\r\n\r\n  for (i = 0; i < len; i += 1) {\r\n    if (this.stylesList[i]._mdf || this._isFirstFrame) {\r\n      if (this.stylesList[i].msElem) {\r\n        this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\r\n        // Adding M0 0 fixes same mask bug on all browsers\r\n        this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\r\n      }\r\n      this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\r\n    }\r\n  }\r\n};\r\n\r\nSVGShapeElement.prototype.renderShape = function () {\r\n  var i;\r\n  var len = this.animatedContents.length;\r\n  var animatedContent;\r\n  for (i = 0; i < len; i += 1) {\r\n    animatedContent = this.animatedContents[i];\r\n    if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\r\n      animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\r\n    }\r\n  }\r\n};\r\n\r\nSVGShapeElement.prototype.destroy = function () {\r\n  this.destroyBaseElement();\r\n  this.shapesData = null;\r\n  this.itemsData = null;\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGTintFilter(filter, filterManager) {\r\n  this.filterManager = filterManager;\r\n  var feColorMatrix = createNS('feColorMatrix');\r\n  feColorMatrix.setAttribute('type', 'matrix');\r\n  feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\r\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');\r\n  feColorMatrix.setAttribute('result', 'f1');\r\n  filter.appendChild(feColorMatrix);\r\n  feColorMatrix = createNS('feColorMatrix');\r\n  feColorMatrix.setAttribute('type', 'matrix');\r\n  feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n  feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\r\n  feColorMatrix.setAttribute('result', 'f2');\r\n  filter.appendChild(feColorMatrix);\r\n  this.matrixFilter = feColorMatrix;\r\n  if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {\r\n    var feMerge = createNS('feMerge');\r\n    filter.appendChild(feMerge);\r\n    var feMergeNode;\r\n    feMergeNode = createNS('feMergeNode');\r\n    feMergeNode.setAttribute('in', 'SourceGraphic');\r\n    feMerge.appendChild(feMergeNode);\r\n    feMergeNode = createNS('feMergeNode');\r\n    feMergeNode.setAttribute('in', 'f2');\r\n    feMerge.appendChild(feMergeNode);\r\n  }\r\n}\r\n\r\nSVGTintFilter.prototype.renderFrame = function (forceRender) {\r\n  if (forceRender || this.filterManager._mdf) {\r\n    var colorBlack = this.filterManager.effectElements[0].p.v;\r\n    var colorWhite = this.filterManager.effectElements[1].p.v;\r\n    var opacity = this.filterManager.effectElements[2].p.v / 100;\r\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 ' + opacity + ' 0');\r\n  }\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGFillFilter(filter, filterManager) {\r\n  this.filterManager = filterManager;\r\n  var feColorMatrix = createNS('feColorMatrix');\r\n  feColorMatrix.setAttribute('type', 'matrix');\r\n  feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n  feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\r\n  filter.appendChild(feColorMatrix);\r\n  this.matrixFilter = feColorMatrix;\r\n}\r\nSVGFillFilter.prototype.renderFrame = function (forceRender) {\r\n  if (forceRender || this.filterManager._mdf) {\r\n    var color = this.filterManager.effectElements[2].p.v;\r\n    var opacity = this.filterManager.effectElements[6].p.v;\r\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');\r\n  }\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGGaussianBlurEffect(filter, filterManager) {\r\n  // Outset the filter region by 100% on all sides to accommodate blur expansion.\r\n  filter.setAttribute('x', '-100%');\r\n  filter.setAttribute('y', '-100%');\r\n  filter.setAttribute('width', '300%');\r\n  filter.setAttribute('height', '300%');\r\n\r\n  this.filterManager = filterManager;\r\n  var feGaussianBlur = createNS('feGaussianBlur');\r\n  filter.appendChild(feGaussianBlur);\r\n  this.feGaussianBlur = feGaussianBlur;\r\n}\r\n\r\nSVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\r\n  if (forceRender || this.filterManager._mdf) {\r\n    // Empirical value, matching AE's blur appearance.\r\n    var kBlurrinessToSigma = 0.3;\r\n    var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma;\r\n\r\n    // Dimensions mapping:\r\n    //\r\n    //   1 -> horizontal & vertical\r\n    //   2 -> horizontal only\r\n    //   3 -> vertical only\r\n    //\r\n    var dimensions = this.filterManager.effectElements[1].p.v;\r\n    var sigmaX = (dimensions == 3) ? 0 : sigma; // eslint-disable-line eqeqeq\r\n    var sigmaY = (dimensions == 2) ? 0 : sigma; // eslint-disable-line eqeqeq\r\n\r\n    this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY);\r\n\r\n    // Repeat edges mapping:\r\n    //\r\n    //   0 -> off -> duplicate\r\n    //   1 -> on  -> wrap\r\n    var edgeMode = (this.filterManager.effectElements[2].p.v == 1) ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\r\n    this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\r\n  }\r\n};\r\n\r\n/* global createNS, createElementID, locationHref, bmFloor */\r\n\r\nfunction SVGStrokeEffect(elem, filterManager) {\r\n  this.initialized = false;\r\n  this.filterManager = filterManager;\r\n  this.elem = elem;\r\n  this.paths = [];\r\n}\r\n\r\nSVGStrokeEffect.prototype.initialize = function () {\r\n  var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\r\n  var path;\r\n  var groupPath;\r\n  var i;\r\n  var len;\r\n  if (this.filterManager.effectElements[1].p.v === 1) {\r\n    len = this.elem.maskManager.masksProperties.length;\r\n    i = 0;\r\n  } else {\r\n    i = this.filterManager.effectElements[0].p.v - 1;\r\n    len = i + 1;\r\n  }\r\n  groupPath = createNS('g');\r\n  groupPath.setAttribute('fill', 'none');\r\n  groupPath.setAttribute('stroke-linecap', 'round');\r\n  groupPath.setAttribute('stroke-dashoffset', 1);\r\n  for (i; i < len; i += 1) {\r\n    path = createNS('path');\r\n    groupPath.appendChild(path);\r\n    this.paths.push({ p: path, m: i });\r\n  }\r\n  if (this.filterManager.effectElements[10].p.v === 3) {\r\n    var mask = createNS('mask');\r\n    var id = createElementID();\r\n    mask.setAttribute('id', id);\r\n    mask.setAttribute('mask-type', 'alpha');\r\n    mask.appendChild(groupPath);\r\n    this.elem.globalData.defs.appendChild(mask);\r\n    var g = createNS('g');\r\n    g.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');\r\n    while (elemChildren[0]) {\r\n      g.appendChild(elemChildren[0]);\r\n    }\r\n    this.elem.layerElement.appendChild(g);\r\n    this.masker = mask;\r\n    groupPath.setAttribute('stroke', '#fff');\r\n  } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\r\n    if (this.filterManager.effectElements[10].p.v === 2) {\r\n      elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\r\n      while (elemChildren.length) {\r\n        this.elem.layerElement.removeChild(elemChildren[0]);\r\n      }\r\n    }\r\n    this.elem.layerElement.appendChild(groupPath);\r\n    this.elem.layerElement.removeAttribute('mask');\r\n    groupPath.setAttribute('stroke', '#fff');\r\n  }\r\n  this.initialized = true;\r\n  this.pathMasker = groupPath;\r\n};\r\n\r\nSVGStrokeEffect.prototype.renderFrame = function (forceRender) {\r\n  if (!this.initialized) {\r\n    this.initialize();\r\n  }\r\n  var i;\r\n  var len = this.paths.length;\r\n  var mask;\r\n  var path;\r\n  for (i = 0; i < len; i += 1) {\r\n    if (this.paths[i].m !== -1) {\r\n      mask = this.elem.maskManager.viewData[this.paths[i].m];\r\n      path = this.paths[i].p;\r\n      if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\r\n        path.setAttribute('d', mask.lastPath);\r\n      }\r\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) {\r\n        var dasharrayValue;\r\n        if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\r\n          var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\r\n          var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\r\n          var l = path.getTotalLength();\r\n          dasharrayValue = '0 0 0 ' + l * s + ' ';\r\n          var lineLength = l * (e - s);\r\n          var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\r\n          var units = Math.floor(lineLength / segment);\r\n          var j;\r\n          for (j = 0; j < units; j += 1) {\r\n            dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\r\n          }\r\n          dasharrayValue += '0 ' + l * 10 + ' 0 0';\r\n        } else {\r\n          dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\r\n        }\r\n        path.setAttribute('stroke-dasharray', dasharrayValue);\r\n      }\r\n    }\r\n  }\r\n  if (forceRender || this.filterManager.effectElements[4].p._mdf) {\r\n    this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\r\n  }\r\n\r\n  if (forceRender || this.filterManager.effectElements[6].p._mdf) {\r\n    this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\r\n  }\r\n  if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\r\n    if (forceRender || this.filterManager.effectElements[3].p._mdf) {\r\n      var color = this.filterManager.effectElements[3].p.v;\r\n      this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\r\n    }\r\n  }\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGTritoneFilter(filter, filterManager) {\r\n  this.filterManager = filterManager;\r\n  var feColorMatrix = createNS('feColorMatrix');\r\n  feColorMatrix.setAttribute('type', 'matrix');\r\n  feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\r\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');\r\n  feColorMatrix.setAttribute('result', 'f1');\r\n  filter.appendChild(feColorMatrix);\r\n  var feComponentTransfer = createNS('feComponentTransfer');\r\n  feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n  filter.appendChild(feComponentTransfer);\r\n  this.matrixFilter = feComponentTransfer;\r\n  var feFuncR = createNS('feFuncR');\r\n  feFuncR.setAttribute('type', 'table');\r\n  feComponentTransfer.appendChild(feFuncR);\r\n  this.feFuncR = feFuncR;\r\n  var feFuncG = createNS('feFuncG');\r\n  feFuncG.setAttribute('type', 'table');\r\n  feComponentTransfer.appendChild(feFuncG);\r\n  this.feFuncG = feFuncG;\r\n  var feFuncB = createNS('feFuncB');\r\n  feFuncB.setAttribute('type', 'table');\r\n  feComponentTransfer.appendChild(feFuncB);\r\n  this.feFuncB = feFuncB;\r\n}\r\n\r\nSVGTritoneFilter.prototype.renderFrame = function (forceRender) {\r\n  if (forceRender || this.filterManager._mdf) {\r\n    var color1 = this.filterManager.effectElements[0].p.v;\r\n    var color2 = this.filterManager.effectElements[1].p.v;\r\n    var color3 = this.filterManager.effectElements[2].p.v;\r\n    var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\r\n    var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\r\n    var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\r\n    this.feFuncR.setAttribute('tableValues', tableR);\r\n    this.feFuncG.setAttribute('tableValues', tableG);\r\n    this.feFuncB.setAttribute('tableValues', tableB);\r\n    // var opacity = this.filterManager.effectElements[2].p.v/100;\r\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 ' + opacity + ' 0');\r\n  }\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGProLevelsFilter(filter, filterManager) {\r\n  this.filterManager = filterManager;\r\n  var effectElements = this.filterManager.effectElements;\r\n  var feComponentTransfer = createNS('feComponentTransfer');\r\n\r\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) {\r\n    this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\r\n  }\r\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) {\r\n    this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\r\n  }\r\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) {\r\n    this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\r\n  }\r\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) {\r\n    this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\r\n  }\r\n\r\n  if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\r\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n    filter.appendChild(feComponentTransfer);\r\n    feComponentTransfer = createNS('feComponentTransfer');\r\n  }\r\n\r\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) {\r\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n    filter.appendChild(feComponentTransfer);\r\n    this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\r\n    this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\r\n    this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\r\n  }\r\n}\r\n\r\nSVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\r\n  var feFunc = createNS(type);\r\n  feFunc.setAttribute('type', 'table');\r\n  feComponentTransfer.appendChild(feFunc);\r\n  return feFunc;\r\n};\r\n\r\nSVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\r\n  var cnt = 0;\r\n  var segments = 256;\r\n  var perc;\r\n  var min = Math.min(inputBlack, inputWhite);\r\n  var max = Math.max(inputBlack, inputWhite);\r\n  var table = Array.call(null, { length: segments });\r\n  var colorValue;\r\n  var pos = 0;\r\n  var outputDelta = outputWhite - outputBlack;\r\n  var inputDelta = inputWhite - inputBlack;\r\n  while (cnt <= 256) {\r\n    perc = cnt / 256;\r\n    if (perc <= min) {\r\n      colorValue = inputDelta < 0 ? outputWhite : outputBlack;\r\n    } else if (perc >= max) {\r\n      colorValue = inputDelta < 0 ? outputBlack : outputWhite;\r\n    } else {\r\n      colorValue = (outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma));\r\n    }\r\n    table[pos] = colorValue;\r\n    pos += 1;\r\n    cnt += 256 / (segments - 1);\r\n  }\r\n  return table.join(' ');\r\n};\r\n\r\nSVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\r\n  if (forceRender || this.filterManager._mdf) {\r\n    var val;\r\n    var effectElements = this.filterManager.effectElements;\r\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)) {\r\n      val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\r\n      this.feFuncRComposed.setAttribute('tableValues', val);\r\n      this.feFuncGComposed.setAttribute('tableValues', val);\r\n      this.feFuncBComposed.setAttribute('tableValues', val);\r\n    }\r\n\r\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)) {\r\n      val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\r\n      this.feFuncR.setAttribute('tableValues', val);\r\n    }\r\n\r\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)) {\r\n      val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\r\n      this.feFuncG.setAttribute('tableValues', val);\r\n    }\r\n\r\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)) {\r\n      val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\r\n      this.feFuncB.setAttribute('tableValues', val);\r\n    }\r\n\r\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)) {\r\n      val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\r\n      this.feFuncA.setAttribute('tableValues', val);\r\n    }\r\n  }\r\n};\r\n\r\n/* global createNS, rgbToHex, degToRads */\r\n\r\nfunction SVGDropShadowEffect(filter, filterManager) {\r\n  var filterSize = filterManager.container.globalData.renderConfig.filterSize;\r\n  filter.setAttribute('x', filterSize.x);\r\n  filter.setAttribute('y', filterSize.y);\r\n  filter.setAttribute('width', filterSize.width);\r\n  filter.setAttribute('height', filterSize.height);\r\n  this.filterManager = filterManager;\r\n\r\n  var feGaussianBlur = createNS('feGaussianBlur');\r\n  feGaussianBlur.setAttribute('in', 'SourceAlpha');\r\n  feGaussianBlur.setAttribute('result', 'drop_shadow_1');\r\n  feGaussianBlur.setAttribute('stdDeviation', '0');\r\n  this.feGaussianBlur = feGaussianBlur;\r\n  filter.appendChild(feGaussianBlur);\r\n\r\n  var feOffset = createNS('feOffset');\r\n  feOffset.setAttribute('dx', '25');\r\n  feOffset.setAttribute('dy', '0');\r\n  feOffset.setAttribute('in', 'drop_shadow_1');\r\n  feOffset.setAttribute('result', 'drop_shadow_2');\r\n  this.feOffset = feOffset;\r\n  filter.appendChild(feOffset);\r\n  var feFlood = createNS('feFlood');\r\n  feFlood.setAttribute('flood-color', '#00ff00');\r\n  feFlood.setAttribute('flood-opacity', '1');\r\n  feFlood.setAttribute('result', 'drop_shadow_3');\r\n  this.feFlood = feFlood;\r\n  filter.appendChild(feFlood);\r\n\r\n  var feComposite = createNS('feComposite');\r\n  feComposite.setAttribute('in', 'drop_shadow_3');\r\n  feComposite.setAttribute('in2', 'drop_shadow_2');\r\n  feComposite.setAttribute('operator', 'in');\r\n  feComposite.setAttribute('result', 'drop_shadow_4');\r\n  filter.appendChild(feComposite);\r\n\r\n  var feMerge = createNS('feMerge');\r\n  filter.appendChild(feMerge);\r\n  var feMergeNode;\r\n  feMergeNode = createNS('feMergeNode');\r\n  feMerge.appendChild(feMergeNode);\r\n  feMergeNode = createNS('feMergeNode');\r\n  feMergeNode.setAttribute('in', 'SourceGraphic');\r\n  this.feMergeNode = feMergeNode;\r\n  this.feMerge = feMerge;\r\n  this.originalNodeAdded = false;\r\n  feMerge.appendChild(feMergeNode);\r\n}\r\n\r\nSVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\r\n  if (forceRender || this.filterManager._mdf) {\r\n    if (forceRender || this.filterManager.effectElements[4].p._mdf) {\r\n      this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\r\n    }\r\n    if (forceRender || this.filterManager.effectElements[0].p._mdf) {\r\n      var col = this.filterManager.effectElements[0].p.v;\r\n      this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\r\n    }\r\n    if (forceRender || this.filterManager.effectElements[1].p._mdf) {\r\n      this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\r\n    }\r\n    if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\r\n      var distance = this.filterManager.effectElements[3].p.v;\r\n      var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\r\n      var x = distance * Math.cos(angle);\r\n      var y = distance * Math.sin(angle);\r\n      this.feOffset.setAttribute('dx', x);\r\n      this.feOffset.setAttribute('dy', y);\r\n    }\r\n    /* if(forceRender || this.filterManager.effectElements[5].p._mdf){\r\n            if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n                this.feMerge.removeChild(this.feMergeNode);\r\n                this.originalNodeAdded = false;\r\n            } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n                this.feMerge.appendChild(this.feMergeNode);\r\n                this.originalNodeAdded = true;\r\n            }\r\n        } */\r\n  }\r\n};\r\n\r\n/* global createElementID, createNS */\r\n\r\nvar _svgMatteSymbols = [];\r\n\r\nfunction SVGMatte3Effect(filterElem, filterManager, elem) {\r\n  this.initialized = false;\r\n  this.filterManager = filterManager;\r\n  this.filterElem = filterElem;\r\n  this.elem = elem;\r\n  elem.matteElement = createNS('g');\r\n  elem.matteElement.appendChild(elem.layerElement);\r\n  elem.matteElement.appendChild(elem.transformedElement);\r\n  elem.baseElement = elem.matteElement;\r\n}\r\n\r\nSVGMatte3Effect.prototype.findSymbol = function (mask) {\r\n  var i = 0;\r\n  var len = _svgMatteSymbols.length;\r\n  while (i < len) {\r\n    if (_svgMatteSymbols[i] === mask) {\r\n      return _svgMatteSymbols[i];\r\n    }\r\n    i += 1;\r\n  }\r\n  return null;\r\n};\r\n\r\nSVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\r\n  var parentNode = mask.layerElement.parentNode;\r\n  if (!parentNode) {\r\n    return;\r\n  }\r\n  var children = parentNode.children;\r\n  var i = 0;\r\n  var len = children.length;\r\n  while (i < len) {\r\n    if (children[i] === mask.layerElement) {\r\n      break;\r\n    }\r\n    i += 1;\r\n  }\r\n  var nextChild;\r\n  if (i <= len - 2) {\r\n    nextChild = children[i + 1];\r\n  }\r\n  var useElem = createNS('use');\r\n  useElem.setAttribute('href', '#' + symbolId);\r\n  if (nextChild) {\r\n    parentNode.insertBefore(useElem, nextChild);\r\n  } else {\r\n    parentNode.appendChild(useElem);\r\n  }\r\n};\r\n\r\nSVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\r\n  if (!this.findSymbol(mask)) {\r\n    var symbolId = createElementID();\r\n    var masker = createNS('mask');\r\n    masker.setAttribute('id', mask.layerId);\r\n    masker.setAttribute('mask-type', 'alpha');\r\n    _svgMatteSymbols.push(mask);\r\n    var defs = elem.globalData.defs;\r\n    defs.appendChild(masker);\r\n    var symbol = createNS('symbol');\r\n    symbol.setAttribute('id', symbolId);\r\n    this.replaceInParent(mask, symbolId);\r\n    symbol.appendChild(mask.layerElement);\r\n    defs.appendChild(symbol);\r\n    var useElem = createNS('use');\r\n    useElem.setAttribute('href', '#' + symbolId);\r\n    masker.appendChild(useElem);\r\n    mask.data.hd = false;\r\n    mask.show();\r\n  }\r\n  elem.setMatte(mask.layerId);\r\n};\r\n\r\nSVGMatte3Effect.prototype.initialize = function () {\r\n  var ind = this.filterManager.effectElements[0].p.v;\r\n  var elements = this.elem.comp.elements;\r\n  var i = 0;\r\n  var len = elements.length;\r\n  while (i < len) {\r\n    if (elements[i] && elements[i].data.ind === ind) {\r\n      this.setElementAsMask(this.elem, elements[i]);\r\n    }\r\n    i += 1;\r\n  }\r\n  this.initialized = true;\r\n};\r\n\r\nSVGMatte3Effect.prototype.renderFrame = function () {\r\n  if (!this.initialized) {\r\n    this.initialize();\r\n  }\r\n};\r\n\r\n/* exported SVGEffects */\r\n\r\nfunction SVGEffects() {}\r\n\r\n/* global createTag, AnimationItem */\r\n/* exported animationManager */\r\n\r\nvar animationManager = (function () {\r\n  var moduleOb = {};\r\n  var registeredAnimations = [];\r\n  var initTime = 0;\r\n  var len = 0;\r\n  var playingAnimationsNum = 0;\r\n  var _stopped = true;\r\n  var _isFrozen = false;\r\n\r\n  function removeElement(ev) {\r\n    var i = 0;\r\n    var animItem = ev.target;\r\n    while (i < len) {\r\n      if (registeredAnimations[i].animation === animItem) {\r\n        registeredAnimations.splice(i, 1);\r\n        i -= 1;\r\n        len -= 1;\r\n        if (!animItem.isPaused) {\r\n          subtractPlayingCount();\r\n        }\r\n      }\r\n      i += 1;\r\n    }\r\n  }\r\n\r\n  function registerAnimation(element, animationData) {\r\n    if (!element) {\r\n      return null;\r\n    }\r\n    var i = 0;\r\n    while (i < len) {\r\n      if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\r\n        return registeredAnimations[i].animation;\r\n      }\r\n      i += 1;\r\n    }\r\n    var animItem = new AnimationItem();\r\n    setupAnimation(animItem, element);\r\n    animItem.setData(element, animationData);\r\n    return animItem;\r\n  }\r\n\r\n  function getRegisteredAnimations() {\r\n    var i;\r\n    var lenAnims = registeredAnimations.length;\r\n    var animations = [];\r\n    for (i = 0; i < lenAnims; i += 1) {\r\n      animations.push(registeredAnimations[i].animation);\r\n    }\r\n    return animations;\r\n  }\r\n\r\n  function addPlayingCount() {\r\n    playingAnimationsNum += 1;\r\n    activate();\r\n  }\r\n\r\n  function subtractPlayingCount() {\r\n    playingAnimationsNum -= 1;\r\n  }\r\n\r\n  function setupAnimation(animItem, element) {\r\n    animItem.addEventListener('destroy', removeElement);\r\n    animItem.addEventListener('_active', addPlayingCount);\r\n    animItem.addEventListener('_idle', subtractPlayingCount);\r\n    registeredAnimations.push({ elem: element, animation: animItem });\r\n    len += 1;\r\n  }\r\n\r\n  function loadAnimation(params) {\r\n    var animItem = new AnimationItem();\r\n    setupAnimation(animItem, null);\r\n    animItem.setParams(params);\r\n    return animItem;\r\n  }\r\n\r\n  function setSpeed(val, animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.setSpeed(val, animation);\r\n    }\r\n  }\r\n\r\n  function setDirection(val, animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.setDirection(val, animation);\r\n    }\r\n  }\r\n\r\n  function play(animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.play(animation);\r\n    }\r\n  }\r\n  function resume(nowTime) {\r\n    var elapsedTime = nowTime - initTime;\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.advanceTime(elapsedTime);\r\n    }\r\n    initTime = nowTime;\r\n    if (playingAnimationsNum && !_isFrozen) {\r\n      window.requestAnimationFrame(resume);\r\n    } else {\r\n      _stopped = true;\r\n    }\r\n  }\r\n\r\n  function first(nowTime) {\r\n    initTime = nowTime;\r\n    window.requestAnimationFrame(resume);\r\n  }\r\n\r\n  function pause(animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.pause(animation);\r\n    }\r\n  }\r\n\r\n  function goToAndStop(value, isFrame, animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\r\n    }\r\n  }\r\n\r\n  function stop(animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.stop(animation);\r\n    }\r\n  }\r\n\r\n  function togglePause(animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.togglePause(animation);\r\n    }\r\n  }\r\n\r\n  function destroy(animation) {\r\n    var i;\r\n    for (i = (len - 1); i >= 0; i -= 1) {\r\n      registeredAnimations[i].animation.destroy(animation);\r\n    }\r\n  }\r\n\r\n  function searchAnimations(animationData, standalone, renderer) {\r\n    var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')),\r\n      [].slice.call(document.getElementsByClassName('bodymovin')));\r\n    var i;\r\n    var lenAnims = animElements.length;\r\n    for (i = 0; i < lenAnims; i += 1) {\r\n      if (renderer) {\r\n        animElements[i].setAttribute('data-bm-type', renderer);\r\n      }\r\n      registerAnimation(animElements[i], animationData);\r\n    }\r\n    if (standalone && lenAnims === 0) {\r\n      if (!renderer) {\r\n        renderer = 'svg';\r\n      }\r\n      var body = document.getElementsByTagName('body')[0];\r\n      body.innerText = '';\r\n      var div = createTag('div');\r\n      div.style.width = '100%';\r\n      div.style.height = '100%';\r\n      div.setAttribute('data-bm-type', renderer);\r\n      body.appendChild(div);\r\n      registerAnimation(div, animationData);\r\n    }\r\n  }\r\n\r\n  function resize() {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.resize();\r\n    }\r\n  }\r\n\r\n  function activate() {\r\n    if (!_isFrozen && playingAnimationsNum) {\r\n      if (_stopped) {\r\n        window.requestAnimationFrame(first);\r\n        _stopped = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  function freeze() {\r\n    _isFrozen = true;\r\n  }\r\n\r\n  function unfreeze() {\r\n    _isFrozen = false;\r\n    activate();\r\n  }\r\n\r\n  function setVolume(val, animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.setVolume(val, animation);\r\n    }\r\n  }\r\n\r\n  function mute(animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.mute(animation);\r\n    }\r\n  }\r\n\r\n  function unmute(animation) {\r\n    var i;\r\n    for (i = 0; i < len; i += 1) {\r\n      registeredAnimations[i].animation.unmute(animation);\r\n    }\r\n  }\r\n\r\n  moduleOb.registerAnimation = registerAnimation;\r\n  moduleOb.loadAnimation = loadAnimation;\r\n  moduleOb.setSpeed = setSpeed;\r\n  moduleOb.setDirection = setDirection;\r\n  moduleOb.play = play;\r\n  moduleOb.pause = pause;\r\n  moduleOb.stop = stop;\r\n  moduleOb.togglePause = togglePause;\r\n  moduleOb.searchAnimations = searchAnimations;\r\n  moduleOb.resize = resize;\r\n  // moduleOb.start = start;\r\n  moduleOb.goToAndStop = goToAndStop;\r\n  moduleOb.destroy = destroy;\r\n  moduleOb.freeze = freeze;\r\n  moduleOb.unfreeze = unfreeze;\r\n  moduleOb.setVolume = setVolume;\r\n  moduleOb.mute = mute;\r\n  moduleOb.unmute = unmute;\r\n  moduleOb.getRegisteredAnimations = getRegisteredAnimations;\r\n  return moduleOb;\r\n}());\r\n\r\n/* global createElementID, subframeEnabled, ProjectInterface, ImagePreloader, audioControllerFactory, extendPrototype, BaseEvent,\r\nCanvasRenderer, SVGRenderer, HybridRenderer, dataManager, expressionsPlugin, BMEnterFrameEvent, BMCompleteLoopEvent,\r\nBMCompleteEvent, BMSegmentStartEvent, BMDestroyEvent, BMEnterFrameEvent, BMCompleteLoopEvent, BMCompleteEvent, BMSegmentStartEvent,\r\nBMDestroyEvent, BMRenderFrameErrorEvent, BMConfigErrorEvent, markerParser */\r\n\r\nvar AnimationItem = function () {\r\n  this._cbs = [];\r\n  this.name = '';\r\n  this.path = '';\r\n  this.isLoaded = false;\r\n  this.currentFrame = 0;\r\n  this.currentRawFrame = 0;\r\n  this.firstFrame = 0;\r\n  this.totalFrames = 0;\r\n  this.frameRate = 0;\r\n  this.frameMult = 0;\r\n  this.playSpeed = 1;\r\n  this.playDirection = 1;\r\n  this.playCount = 0;\r\n  this.animationData = {};\r\n  this.assets = [];\r\n  this.isPaused = true;\r\n  this.autoplay = false;\r\n  this.loop = true;\r\n  this.renderer = null;\r\n  this.animationID = createElementID();\r\n  this.assetsPath = '';\r\n  this.timeCompleted = 0;\r\n  this.segmentPos = 0;\r\n  this.isSubframeEnabled = subframeEnabled;\r\n  this.segments = [];\r\n  this._idle = true;\r\n  this._completedLoop = false;\r\n  this.projectInterface = ProjectInterface();\r\n  this.imagePreloader = new ImagePreloader();\r\n  this.audioController = audioControllerFactory();\r\n  this.markers = [];\r\n  this.configAnimation = this.configAnimation.bind(this);\r\n  this.onSetupError = this.onSetupError.bind(this);\r\n  this.onSegmentComplete = this.onSegmentComplete.bind(this);\r\n};\r\n\r\nextendPrototype([BaseEvent], AnimationItem);\r\n\r\nAnimationItem.prototype.setParams = function (params) {\r\n  if (params.wrapper || params.container) {\r\n    this.wrapper = params.wrapper || params.container;\r\n  }\r\n  var animType = 'svg';\r\n  if (params.animType) {\r\n    animType = params.animType;\r\n  } else if (params.renderer) {\r\n    animType = params.renderer;\r\n  }\r\n  switch (animType) {\r\n    case 'canvas':\r\n      this.renderer = new CanvasRenderer(this, params.rendererSettings);\r\n      break;\r\n    case 'svg':\r\n      this.renderer = new SVGRenderer(this, params.rendererSettings);\r\n      break;\r\n    default:\r\n      this.renderer = new HybridRenderer(this, params.rendererSettings);\r\n      break;\r\n  }\r\n  this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\r\n  this.renderer.setProjectInterface(this.projectInterface);\r\n  this.animType = animType;\r\n  if (params.loop === ''\r\n        || params.loop === null\r\n        || params.loop === undefined\r\n        || params.loop === true) {\r\n    this.loop = true;\r\n  } else if (params.loop === false) {\r\n    this.loop = false;\r\n  } else {\r\n    this.loop = parseInt(params.loop, 10);\r\n  }\r\n  this.autoplay = 'autoplay' in params ? params.autoplay : true;\r\n  this.name = params.name ? params.name : '';\r\n  this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\r\n  this.assetsPath = params.assetsPath;\r\n  this.initialSegment = params.initialSegment;\r\n  if (params.audioFactory) {\r\n    this.audioController.setAudioFactory(params.audioFactory);\r\n  }\r\n  if (params.animationData) {\r\n    this.setupAnimation(params.animationData);\r\n  } else if (params.path) {\r\n    if (params.path.lastIndexOf('\\\\') !== -1) {\r\n      this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\r\n    } else {\r\n      this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\r\n    }\r\n    this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\r\n    this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\r\n    dataManager.loadAnimation(\r\n      params.path,\r\n      this.configAnimation,\r\n      this.onSetupError\r\n    );\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.onSetupError = function () {\r\n  this.trigger('data_failed');\r\n};\r\n\r\nAnimationItem.prototype.setupAnimation = function (data) {\r\n  dataManager.completeAnimation(\r\n    data,\r\n    this.configAnimation\r\n  );\r\n};\r\n\r\nAnimationItem.prototype.setData = function (wrapper, animationData) {\r\n  if (animationData) {\r\n    if (typeof animationData !== 'object') {\r\n      animationData = JSON.parse(animationData);\r\n    }\r\n  }\r\n  var params = {\r\n    wrapper: wrapper,\r\n    animationData: animationData,\r\n  };\r\n  var wrapperAttributes = wrapper.attributes;\r\n\r\n  params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\r\n    ? wrapperAttributes.getNamedItem('data-animation-path').value\r\n    : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\r\n      ? wrapperAttributes.getNamedItem('data-bm-path').value\r\n      : wrapperAttributes.getNamedItem('bm-path')\r\n        ? wrapperAttributes.getNamedItem('bm-path').value\r\n        : '';\r\n  params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\r\n    ? wrapperAttributes.getNamedItem('data-anim-type').value\r\n    : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\r\n      ? wrapperAttributes.getNamedItem('data-bm-type').value\r\n      : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\r\n        ? wrapperAttributes.getNamedItem('bm-type').value\r\n        : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\r\n          ? wrapperAttributes.getNamedItem('data-bm-renderer').value\r\n          : wrapperAttributes.getNamedItem('bm-renderer')\r\n            ? wrapperAttributes.getNamedItem('bm-renderer').value\r\n            : 'canvas';\r\n\r\n  var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\r\n    ? wrapperAttributes.getNamedItem('data-anim-loop').value\r\n    : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\r\n      ? wrapperAttributes.getNamedItem('data-bm-loop').value\r\n      : wrapperAttributes.getNamedItem('bm-loop')\r\n        ? wrapperAttributes.getNamedItem('bm-loop').value\r\n        : '';\r\n  if (loop === 'false') {\r\n    params.loop = false;\r\n  } else if (loop === 'true') {\r\n    params.loop = true;\r\n  } else if (loop !== '') {\r\n    params.loop = parseInt(loop, 10);\r\n  }\r\n  var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\r\n    ? wrapperAttributes.getNamedItem('data-anim-autoplay').value\r\n    : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\r\n      ? wrapperAttributes.getNamedItem('data-bm-autoplay').value\r\n      : wrapperAttributes.getNamedItem('bm-autoplay')\r\n        ? wrapperAttributes.getNamedItem('bm-autoplay').value\r\n        : true;\r\n  params.autoplay = autoplay !== 'false';\r\n\r\n  params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\r\n    ? wrapperAttributes.getNamedItem('data-name').value\r\n    : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\r\n      ? wrapperAttributes.getNamedItem('data-bm-name').value\r\n      : wrapperAttributes.getNamedItem('bm-name')\r\n        ? wrapperAttributes.getNamedItem('bm-name').value\r\n        : '';\r\n  var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\r\n    ? wrapperAttributes.getNamedItem('data-anim-prerender').value\r\n    : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\r\n      ? wrapperAttributes.getNamedItem('data-bm-prerender').value\r\n      : wrapperAttributes.getNamedItem('bm-prerender')\r\n        ? wrapperAttributes.getNamedItem('bm-prerender').value\r\n        : '';\r\n\r\n  if (prerender === 'false') {\r\n    params.prerender = false;\r\n  }\r\n  this.setParams(params);\r\n};\r\n\r\nAnimationItem.prototype.includeLayers = function (data) {\r\n  if (data.op > this.animationData.op) {\r\n    this.animationData.op = data.op;\r\n    this.totalFrames = Math.floor(data.op - this.animationData.ip);\r\n  }\r\n  var layers = this.animationData.layers;\r\n  var i;\r\n  var len = layers.length;\r\n  var newLayers = data.layers;\r\n  var j;\r\n  var jLen = newLayers.length;\r\n  for (j = 0; j < jLen; j += 1) {\r\n    i = 0;\r\n    while (i < len) {\r\n      if (layers[i].id === newLayers[j].id) {\r\n        layers[i] = newLayers[j];\r\n        break;\r\n      }\r\n      i += 1;\r\n    }\r\n  }\r\n  if (data.chars || data.fonts) {\r\n    this.renderer.globalData.fontManager.addChars(data.chars);\r\n    this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\r\n  }\r\n  if (data.assets) {\r\n    len = data.assets.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      this.animationData.assets.push(data.assets[i]);\r\n    }\r\n  }\r\n  this.animationData.__complete = false;\r\n  dataManager.completeAnimation(\r\n    this.animationData,\r\n    this.onSegmentComplete\r\n  );\r\n};\r\n\r\nAnimationItem.prototype.onSegmentComplete = function (data) {\r\n  this.animationData = data;\r\n  if (expressionsPlugin) {\r\n    expressionsPlugin.initExpressions(this);\r\n  }\r\n  this.loadNextSegment();\r\n};\r\n\r\nAnimationItem.prototype.loadNextSegment = function () {\r\n  var segments = this.animationData.segments;\r\n  if (!segments || segments.length === 0 || !this.autoloadSegments) {\r\n    this.trigger('data_ready');\r\n    this.timeCompleted = this.totalFrames;\r\n    return;\r\n  }\r\n  var segment = segments.shift();\r\n  this.timeCompleted = segment.time * this.frameRate;\r\n  var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\r\n  this.segmentPos += 1;\r\n  dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\r\n    this.trigger('data_failed');\r\n  }.bind(this));\r\n};\r\n\r\nAnimationItem.prototype.loadSegments = function () {\r\n  var segments = this.animationData.segments;\r\n  if (!segments) {\r\n    this.timeCompleted = this.totalFrames;\r\n  }\r\n  this.loadNextSegment();\r\n};\r\n\r\nAnimationItem.prototype.imagesLoaded = function () {\r\n  this.trigger('loaded_images');\r\n  this.checkLoaded();\r\n};\r\n\r\nAnimationItem.prototype.preloadImages = function () {\r\n  this.imagePreloader.setAssetsPath(this.assetsPath);\r\n  this.imagePreloader.setPath(this.path);\r\n  this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\r\n};\r\n\r\nAnimationItem.prototype.configAnimation = function (animData) {\r\n  if (!this.renderer) {\r\n    return;\r\n  }\r\n  try {\r\n    this.animationData = animData;\r\n    if (this.initialSegment) {\r\n      this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\r\n      this.firstFrame = Math.round(this.initialSegment[0]);\r\n    } else {\r\n      this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\r\n      this.firstFrame = Math.round(this.animationData.ip);\r\n    }\r\n    this.renderer.configAnimation(animData);\r\n    if (!animData.assets) {\r\n      animData.assets = [];\r\n    }\r\n\r\n    this.assets = this.animationData.assets;\r\n    this.frameRate = this.animationData.fr;\r\n    this.frameMult = this.animationData.fr / 1000;\r\n    this.renderer.searchExtraCompositions(animData.assets);\r\n    this.markers = markerParser(animData.markers || []);\r\n    this.trigger('config_ready');\r\n    this.preloadImages();\r\n    this.loadSegments();\r\n    this.updaFrameModifier();\r\n    this.waitForFontsLoaded();\r\n    if (this.isPaused) {\r\n      this.audioController.pause();\r\n    }\r\n  } catch (error) {\r\n    this.triggerConfigError(error);\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.waitForFontsLoaded = function () {\r\n  if (!this.renderer) {\r\n    return;\r\n  }\r\n  if (this.renderer.globalData.fontManager.isLoaded) {\r\n    this.checkLoaded();\r\n  } else {\r\n    setTimeout(this.waitForFontsLoaded.bind(this), 20);\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.checkLoaded = function () {\r\n  if (!this.isLoaded\r\n        && this.renderer.globalData.fontManager.isLoaded\r\n        && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas')\r\n        && (this.imagePreloader.loadedFootages())\r\n  ) {\r\n    this.isLoaded = true;\r\n    if (expressionsPlugin) {\r\n      expressionsPlugin.initExpressions(this);\r\n    }\r\n    this.renderer.initItems();\r\n    setTimeout(function () {\r\n      this.trigger('DOMLoaded');\r\n    }.bind(this), 0);\r\n    this.gotoFrame();\r\n    if (this.autoplay) {\r\n      this.play();\r\n    }\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.resize = function () {\r\n  this.renderer.updateContainerSize();\r\n};\r\n\r\nAnimationItem.prototype.setSubframe = function (flag) {\r\n  this.isSubframeEnabled = !!flag;\r\n};\r\n\r\nAnimationItem.prototype.gotoFrame = function () {\r\n  this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\r\n\r\n  if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\r\n    this.currentFrame = this.timeCompleted;\r\n  }\r\n  this.trigger('enterFrame');\r\n  this.renderFrame();\r\n  this.trigger('drawnFrame');\r\n};\r\n\r\nAnimationItem.prototype.renderFrame = function () {\r\n  if (this.isLoaded === false || !this.renderer) {\r\n    return;\r\n  }\r\n  try {\r\n    this.renderer.renderFrame(this.currentFrame + this.firstFrame);\r\n  } catch (error) {\r\n    this.triggerRenderFrameError(error);\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.play = function (name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  if (this.isPaused === true) {\r\n    this.isPaused = false;\r\n    this.audioController.resume();\r\n    if (this._idle) {\r\n      this._idle = false;\r\n      this.trigger('_active');\r\n    }\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.pause = function (name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  if (this.isPaused === false) {\r\n    this.isPaused = true;\r\n    this._idle = true;\r\n    this.trigger('_idle');\r\n    this.audioController.pause();\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.togglePause = function (name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  if (this.isPaused === true) {\r\n    this.play();\r\n  } else {\r\n    this.pause();\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.stop = function (name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  this.pause();\r\n  this.playCount = 0;\r\n  this._completedLoop = false;\r\n  this.setCurrentRawFrameValue(0);\r\n};\r\n\r\nAnimationItem.prototype.getMarkerData = function (markerName) {\r\n  var marker;\r\n  for (var i = 0; i < this.markers.length; i += 1) {\r\n    marker = this.markers[i];\r\n    if (marker.payload && marker.payload.name === markerName) {\r\n      return marker;\r\n    }\r\n  }\r\n  return null;\r\n};\r\n\r\nAnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  var numValue = Number(value);\r\n  if (isNaN(numValue)) {\r\n    var marker = this.getMarkerData(value);\r\n    if (marker) {\r\n      this.goToAndStop(marker.time, true);\r\n    }\r\n  } else if (isFrame) {\r\n    this.setCurrentRawFrameValue(value);\r\n  } else {\r\n    this.setCurrentRawFrameValue(value * this.frameModifier);\r\n  }\r\n  this.pause();\r\n};\r\n\r\nAnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  var numValue = Number(value);\r\n  if (isNaN(numValue)) {\r\n    var marker = this.getMarkerData(value);\r\n    if (marker) {\r\n      if (!marker.duration) {\r\n        this.goToAndStop(marker.time, true);\r\n      } else {\r\n        this.playSegments([marker.time, marker.time + marker.duration], true);\r\n      }\r\n    }\r\n  } else {\r\n    this.goToAndStop(numValue, isFrame, name);\r\n  }\r\n  this.play();\r\n};\r\n\r\nAnimationItem.prototype.advanceTime = function (value) {\r\n  if (this.isPaused === true || this.isLoaded === false) {\r\n    return;\r\n  }\r\n  var nextValue = this.currentRawFrame + value * this.frameModifier;\r\n  var _isComplete = false;\r\n  // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\r\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.\r\n  if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\r\n    if (!this.loop || this.playCount === this.loop) {\r\n      if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\r\n        _isComplete = true;\r\n        nextValue = this.totalFrames - 1;\r\n      }\r\n    } else if (nextValue >= this.totalFrames) {\r\n      this.playCount += 1;\r\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\r\n        this.setCurrentRawFrameValue(nextValue % this.totalFrames);\r\n        this._completedLoop = true;\r\n        this.trigger('loopComplete');\r\n      }\r\n    } else {\r\n      this.setCurrentRawFrameValue(nextValue);\r\n    }\r\n  } else if (nextValue < 0) {\r\n    if (!this.checkSegments(nextValue % this.totalFrames)) {\r\n      if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { // eslint-disable-line no-plusplus\r\n        this.setCurrentRawFrameValue(this.totalFrames + (nextValue % this.totalFrames));\r\n        if (!this._completedLoop) {\r\n          this._completedLoop = true;\r\n        } else {\r\n          this.trigger('loopComplete');\r\n        }\r\n      } else {\r\n        _isComplete = true;\r\n        nextValue = 0;\r\n      }\r\n    }\r\n  } else {\r\n    this.setCurrentRawFrameValue(nextValue);\r\n  }\r\n  if (_isComplete) {\r\n    this.setCurrentRawFrameValue(nextValue);\r\n    this.pause();\r\n    this.trigger('complete');\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.adjustSegment = function (arr, offset) {\r\n  this.playCount = 0;\r\n  if (arr[1] < arr[0]) {\r\n    if (this.frameModifier > 0) {\r\n      if (this.playSpeed < 0) {\r\n        this.setSpeed(-this.playSpeed);\r\n      } else {\r\n        this.setDirection(-1);\r\n      }\r\n    }\r\n    this.totalFrames = arr[0] - arr[1];\r\n    this.timeCompleted = this.totalFrames;\r\n    this.firstFrame = arr[1];\r\n    this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\r\n  } else if (arr[1] > arr[0]) {\r\n    if (this.frameModifier < 0) {\r\n      if (this.playSpeed < 0) {\r\n        this.setSpeed(-this.playSpeed);\r\n      } else {\r\n        this.setDirection(1);\r\n      }\r\n    }\r\n    this.totalFrames = arr[1] - arr[0];\r\n    this.timeCompleted = this.totalFrames;\r\n    this.firstFrame = arr[0];\r\n    this.setCurrentRawFrameValue(0.001 + offset);\r\n  }\r\n  this.trigger('segmentStart');\r\n};\r\nAnimationItem.prototype.setSegment = function (init, end) {\r\n  var pendingFrame = -1;\r\n  if (this.isPaused) {\r\n    if (this.currentRawFrame + this.firstFrame < init) {\r\n      pendingFrame = init;\r\n    } else if (this.currentRawFrame + this.firstFrame > end) {\r\n      pendingFrame = end - init;\r\n    }\r\n  }\r\n\r\n  this.firstFrame = init;\r\n  this.totalFrames = end - init;\r\n  this.timeCompleted = this.totalFrames;\r\n  if (pendingFrame !== -1) {\r\n    this.goToAndStop(pendingFrame, true);\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.playSegments = function (arr, forceFlag) {\r\n  if (forceFlag) {\r\n    this.segments.length = 0;\r\n  }\r\n  if (typeof arr[0] === 'object') {\r\n    var i;\r\n    var len = arr.length;\r\n    for (i = 0; i < len; i += 1) {\r\n      this.segments.push(arr[i]);\r\n    }\r\n  } else {\r\n    this.segments.push(arr);\r\n  }\r\n  if (this.segments.length && forceFlag) {\r\n    this.adjustSegment(this.segments.shift(), 0);\r\n  }\r\n  if (this.isPaused) {\r\n    this.play();\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.resetSegments = function (forceFlag) {\r\n  this.segments.length = 0;\r\n  this.segments.push([this.animationData.ip, this.animationData.op]);\r\n  if (forceFlag) {\r\n    this.checkSegments(0);\r\n  }\r\n};\r\nAnimationItem.prototype.checkSegments = function (offset) {\r\n  if (this.segments.length) {\r\n    this.adjustSegment(this.segments.shift(), offset);\r\n    return true;\r\n  }\r\n  return false;\r\n};\r\n\r\nAnimationItem.prototype.destroy = function (name) {\r\n  if ((name && this.name !== name) || !this.renderer) {\r\n    return;\r\n  }\r\n  this.renderer.destroy();\r\n  this.imagePreloader.destroy();\r\n  this.trigger('destroy');\r\n  this._cbs = null;\r\n  this.onEnterFrame = null;\r\n  this.onLoopComplete = null;\r\n  this.onComplete = null;\r\n  this.onSegmentStart = null;\r\n  this.onDestroy = null;\r\n  this.renderer = null;\r\n  this.renderer = null;\r\n  this.imagePreloader = null;\r\n  this.projectInterface = null;\r\n};\r\n\r\nAnimationItem.prototype.setCurrentRawFrameValue = function (value) {\r\n  this.currentRawFrame = value;\r\n  this.gotoFrame();\r\n};\r\n\r\nAnimationItem.prototype.setSpeed = function (val) {\r\n  this.playSpeed = val;\r\n  this.updaFrameModifier();\r\n};\r\n\r\nAnimationItem.prototype.setDirection = function (val) {\r\n  this.playDirection = val < 0 ? -1 : 1;\r\n  this.updaFrameModifier();\r\n};\r\n\r\nAnimationItem.prototype.setVolume = function (val, name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  this.audioController.setVolume(val);\r\n};\r\n\r\nAnimationItem.prototype.getVolume = function () {\r\n  return this.audioController.getVolume();\r\n};\r\n\r\nAnimationItem.prototype.mute = function (name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  this.audioController.mute();\r\n};\r\n\r\nAnimationItem.prototype.unmute = function (name) {\r\n  if (name && this.name !== name) {\r\n    return;\r\n  }\r\n  this.audioController.unmute();\r\n};\r\n\r\nAnimationItem.prototype.updaFrameModifier = function () {\r\n  this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\r\n  this.audioController.setRate(this.playSpeed * this.playDirection);\r\n};\r\n\r\nAnimationItem.prototype.getPath = function () {\r\n  return this.path;\r\n};\r\n\r\nAnimationItem.prototype.getAssetsPath = function (assetData) {\r\n  var path = '';\r\n  if (assetData.e) {\r\n    path = assetData.p;\r\n  } else if (this.assetsPath) {\r\n    var imagePath = assetData.p;\r\n    if (imagePath.indexOf('images/') !== -1) {\r\n      imagePath = imagePath.split('/')[1];\r\n    }\r\n    path = this.assetsPath + imagePath;\r\n  } else {\r\n    path = this.path;\r\n    path += assetData.u ? assetData.u : '';\r\n    path += assetData.p;\r\n  }\r\n  return path;\r\n};\r\n\r\nAnimationItem.prototype.getAssetData = function (id) {\r\n  var i = 0;\r\n  var len = this.assets.length;\r\n  while (i < len) {\r\n    if (id === this.assets[i].id) {\r\n      return this.assets[i];\r\n    }\r\n    i += 1;\r\n  }\r\n  return null;\r\n};\r\n\r\nAnimationItem.prototype.hide = function () {\r\n  this.renderer.hide();\r\n};\r\n\r\nAnimationItem.prototype.show = function () {\r\n  this.renderer.show();\r\n};\r\n\r\nAnimationItem.prototype.getDuration = function (isFrame) {\r\n  return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\r\n};\r\n\r\nAnimationItem.prototype.trigger = function (name) {\r\n  if (this._cbs && this._cbs[name]) {\r\n    switch (name) {\r\n      case 'enterFrame':\r\n      case 'drawnFrame':\r\n        this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\r\n        break;\r\n      case 'loopComplete':\r\n        this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\r\n        break;\r\n      case 'complete':\r\n        this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\r\n        break;\r\n      case 'segmentStart':\r\n        this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\r\n        break;\r\n      case 'destroy':\r\n        this.triggerEvent(name, new BMDestroyEvent(name, this));\r\n        break;\r\n      default:\r\n        this.triggerEvent(name);\r\n    }\r\n  }\r\n  if (name === 'enterFrame' && this.onEnterFrame) {\r\n    this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\r\n  }\r\n  if (name === 'loopComplete' && this.onLoopComplete) {\r\n    this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\r\n  }\r\n  if (name === 'complete' && this.onComplete) {\r\n    this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\r\n  }\r\n  if (name === 'segmentStart' && this.onSegmentStart) {\r\n    this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\r\n  }\r\n  if (name === 'destroy' && this.onDestroy) {\r\n    this.onDestroy.call(this, new BMDestroyEvent(name, this));\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\r\n  var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\r\n  this.triggerEvent('error', error);\r\n\r\n  if (this.onError) {\r\n    this.onError.call(this, error);\r\n  }\r\n};\r\n\r\nAnimationItem.prototype.triggerConfigError = function (nativeError) {\r\n  var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\r\n  this.triggerEvent('error', error);\r\n\r\n  if (this.onError) {\r\n    this.onError.call(this, error);\r\n  }\r\n};\r\n\r\n/* exported EffectsManager */\r\n\r\nfunction EffectsManager() {\r\n  this.effectElements = [];\r\n}\r\n\r\n\r\nvar lottie = {};\r\n\r\nfunction setLocationHref(href) {\r\n  locationHref = href;\r\n}\r\n\r\nfunction searchAnimations() {\r\n  if (standalone === true) {\r\n    animationManager.searchAnimations(animationData, standalone, renderer);\r\n  } else {\r\n    animationManager.searchAnimations();\r\n  }\r\n}\r\n\r\nfunction setSubframeRendering(flag) {\r\n  subframeEnabled = flag;\r\n}\r\n\r\nfunction setIDPrefix(prefix) {\r\n  idPrefix = prefix;\r\n}\r\n\r\nfunction loadAnimation(params) {\r\n  if (standalone === true) {\r\n    params.animationData = JSON.parse(animationData);\r\n  }\r\n  return animationManager.loadAnimation(params);\r\n}\r\n\r\nfunction setQuality(value) {\r\n  if (typeof value === 'string') {\r\n    switch (value) {\r\n      case 'high':\r\n        defaultCurveSegments = 200;\r\n        break;\r\n      default:\r\n      case 'medium':\r\n        defaultCurveSegments = 50;\r\n        break;\r\n      case 'low':\r\n        defaultCurveSegments = 10;\r\n        break;\r\n    }\r\n  } else if (!isNaN(value) && value > 1) {\r\n    defaultCurveSegments = value;\r\n  }\r\n  if (defaultCurveSegments >= 50) {\r\n    roundValues(false);\r\n  } else {\r\n    roundValues(true);\r\n  }\r\n}\r\n\r\nfunction inBrowser() {\r\n  return typeof navigator !== 'undefined';\r\n}\r\n\r\nfunction installPlugin(type, plugin) {\r\n  if (type === 'expressions') {\r\n    expressionsPlugin = plugin;\r\n  }\r\n}\r\n\r\nfunction getFactory(name) {\r\n  switch (name) {\r\n    case 'propertyFactory':\r\n      return PropertyFactory;\r\n    case 'shapePropertyFactory':\r\n      return ShapePropertyFactory;\r\n    case 'matrix':\r\n      return Matrix;\r\n    default:\r\n      return null;\r\n  }\r\n}\r\n\r\nlottie.play = animationManager.play;\r\nlottie.pause = animationManager.pause;\r\nlottie.setLocationHref = setLocationHref;\r\nlottie.togglePause = animationManager.togglePause;\r\nlottie.setSpeed = animationManager.setSpeed;\r\nlottie.setDirection = animationManager.setDirection;\r\nlottie.stop = animationManager.stop;\r\nlottie.searchAnimations = searchAnimations;\r\nlottie.registerAnimation = animationManager.registerAnimation;\r\nlottie.loadAnimation = loadAnimation;\r\nlottie.setSubframeRendering = setSubframeRendering;\r\nlottie.resize = animationManager.resize;\r\n// lottie.start = start;\r\nlottie.goToAndStop = animationManager.goToAndStop;\r\nlottie.destroy = animationManager.destroy;\r\nlottie.setQuality = setQuality;\r\nlottie.inBrowser = inBrowser;\r\nlottie.installPlugin = installPlugin;\r\nlottie.freeze = animationManager.freeze;\r\nlottie.unfreeze = animationManager.unfreeze;\r\nlottie.setVolume = animationManager.setVolume;\r\nlottie.mute = animationManager.mute;\r\nlottie.unmute = animationManager.unmute;\r\nlottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\r\nlottie.useWebWorker = function (flag) {\r\n  _useWebWorker = flag;\r\n};\r\nlottie.setIDPrefix = setIDPrefix;\r\nlottie.__getFactory = getFactory;\r\nlottie.version = '5.8.1';\r\n\r\nfunction checkReady() {\r\n  if (document.readyState === 'complete') {\r\n    clearInterval(readyStateCheckInterval);\r\n    searchAnimations();\r\n  }\r\n}\r\n\r\nfunction getQueryVariable(variable) {\r\n  var vars = queryString.split('&');\r\n  for (var i = 0; i < vars.length; i += 1) {\r\n    var pair = vars[i].split('=');\r\n    if (decodeURIComponent(pair[0]) == variable) { // eslint-disable-line eqeqeq\r\n      return decodeURIComponent(pair[1]);\r\n    }\r\n  }\r\n  return null;\r\n}\r\nvar standalone = '__[STANDALONE]__';\r\nvar animationData = '__[ANIMATIONDATA]__';\r\nvar renderer = '';\r\nvar queryString;\r\nif (standalone) {\r\n  var scripts = document.getElementsByTagName('script');\r\n  var index = scripts.length - 1;\r\n  var myScript = scripts[index] || {\r\n    src: '',\r\n  };\r\n  queryString = myScript.src.replace(/^[^\\?]+\\??/, ''); // eslint-disable-line no-useless-escape\r\n  renderer = getQueryVariable('renderer');\r\n}\r\nvar readyStateCheckInterval = setInterval(checkReady, 100);\r\n\nreturn lottie;\n}));"]}